+++ /dev/null
-package eu.svjatoslav.sixth.e3d.examples.life;
-
-import eu.svjatoslav.sixth.e3d.geometry.Point3D;
-import eu.svjatoslav.sixth.e3d.geometry.Rectangle;
-import eu.svjatoslav.sixth.e3d.gui.Avatar;
-import eu.svjatoslav.sixth.e3d.gui.ViewFrame;
-import eu.svjatoslav.sixth.e3d.gui.ViewPanel;
-import eu.svjatoslav.sixth.e3d.gui.humaninput.WorldNavigationUserInputTracker;
-import eu.svjatoslav.sixth.e3d.math.Transform;
-import eu.svjatoslav.sixth.e3d.renderer.raster.Color;
-import eu.svjatoslav.sixth.e3d.renderer.raster.ShapeCollection;
-import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.line.LineAppearance;
-import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.wireframe.Grid2D;
-
-import java.awt.event.KeyEvent;
-
-
-public class Main extends WorldNavigationUserInputTracker {
-
- private static final Matrix MATRIX = new Matrix(
- new Point3D() // position matrix in the center of the scene
- );
-
- public static void main(final String[] args) {
- new Main().run();
- }
-
- /**
- * Handle keyboard input.
- */
- @Override
- public boolean keyPressed(final KeyEvent event, final ViewPanel viewPanel) {
- switch (event.getKeyChar()) {
- case ' ': // space key
- MATRIX.evolve(false);
- break;
- case 10: // ENTER
- MATRIX.evolve(true);
- break;
- case 'c': // reset matrix
- MATRIX.clear();
- break;
- default:
- return super.keyPressed(event, viewPanel);
- }
- return true;
- }
-
- private void run() {
-
- // create application frame visible to the user
- final ViewFrame viewFrame = new ViewFrame();
-
- final ShapeCollection shapeCollection = viewFrame.getViewPanel()
- .getRootShapeCollection();
-
- // add matrix
- shapeCollection.addShape(MATRIX);
-
- // add wire-frame grid (optional)
- shapeCollection.addShape(createGrid());
-
- final ViewPanel viewPanel = viewFrame.getViewPanel();
-
- setAvatarOrientation(viewPanel.getAvatar());
-
- // enable receiving of keyboard events
- viewPanel.getKeyboardFocusStack().pushFocusOwner(this);
-
- // Done! World is built. So ensure screen is updated too.
- viewPanel.repaintDuringNextViewUpdate();
- }
-
- /**
- * Create pink wire-frame grid below (for decorative purposes).
- */
- private Grid2D createGrid() {
- return new Grid2D(
- new Transform(
- new Point3D( // Grid positioning:
- 0, // center
- 100, // below the main scene
- 0), // center
-
- // Grid orientation:
- 0, // no rotation along XZ axis
- Math.PI / 2), // face down
-
- new Rectangle(800), // large enough, square grid
-
- 5, 5, // grid will be divided to 5x5 segments
-
- new LineAppearance(3, // line thickness
- new Color("FF000050") // red and quite transparent
- )
- );
- }
-
- /**
- * Set Avatar/Camera initial position in the world.
- */
- private void setAvatarOrientation(final Avatar avatar) {
- avatar.setLocation(new Point3D(100, -50, -200));
- avatar.setAngleXZ(0.2f);
- avatar.setAngleYZ(-0.7f);
- }
-
-}