/run/automenta/spacenet/run/old/swing/ArdorAwtExample.java
Java | 566 lines | 411 code | 117 blank | 38 comment | 14 complexity | d18c432c7117731de946023f5cd1383b MD5 | raw file
Possible License(s): LGPL-3.0
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- package automenta.spacenet.run.old.swing;
- import automenta.spacenet.space.video.Exit;
- import com.ardor3d.annotation.MainThread;
- import com.ardor3d.framework.ArdorModule;
- import com.ardor3d.framework.Canvas;
- import com.ardor3d.framework.DisplaySettings;
- import com.ardor3d.framework.FrameHandler;
- import com.ardor3d.framework.Scene;
- import com.ardor3d.framework.Updater;
- import com.ardor3d.framework.jogl.JoglAwtCanvas;
- import com.ardor3d.framework.jogl.JoglCanvasRenderer;
- import com.ardor3d.image.util.AWTImageLoader;
- import com.ardor3d.input.ButtonState;
- import com.ardor3d.input.ControllerWrapper;
- import com.ardor3d.input.InputState;
- import com.ardor3d.input.Key;
- import com.ardor3d.input.MouseCursor;
- import com.ardor3d.input.MouseState;
- import com.ardor3d.input.PhysicalLayer;
- import com.ardor3d.input.awt.AwtFocusWrapper;
- import com.ardor3d.input.awt.AwtKeyboardWrapper;
- import com.ardor3d.input.awt.AwtMouseManager;
- import com.ardor3d.input.awt.AwtMouseWrapper;
- import com.ardor3d.input.logical.AnyKeyCondition;
- import com.ardor3d.input.logical.DummyControllerWrapper;
- import com.ardor3d.input.logical.InputTrigger;
- import com.ardor3d.input.logical.KeyHeldCondition;
- import com.ardor3d.input.logical.KeyPressedCondition;
- import com.ardor3d.input.logical.KeyReleasedCondition;
- import com.ardor3d.input.logical.LogicalLayer;
- import com.ardor3d.input.logical.MouseButtonCondition;
- import com.ardor3d.input.logical.TriggerAction;
- import com.ardor3d.input.logical.TriggerConditions;
- import com.ardor3d.input.logical.TwoInputStates;
- import com.ardor3d.intersection.PickResults;
- import com.ardor3d.light.PointLight;
- import com.ardor3d.math.ColorRGBA;
- import com.ardor3d.math.Matrix3;
- import com.ardor3d.math.Ray3;
- import com.ardor3d.math.Vector3;
- import com.ardor3d.renderer.Camera;
- import com.ardor3d.renderer.Camera.ProjectionMode;
- import com.ardor3d.renderer.Renderer;
- import com.ardor3d.renderer.state.LightState;
- import com.ardor3d.renderer.state.ZBufferState;
- import com.ardor3d.scenegraph.Mesh;
- import com.ardor3d.scenegraph.Node;
- import com.ardor3d.scenegraph.shape.Box;
- import com.ardor3d.util.ReadOnlyTimer;
- import com.google.common.base.Predicate;
- import com.google.common.base.Predicates;
- import com.google.inject.Guice;
- import com.google.inject.Inject;
- import com.google.inject.Injector;
- import com.google.inject.Module;
- import com.google.inject.Stage;
- import java.awt.Dimension;
- import java.awt.GridLayout;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Random;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.SwingConstants;
- /**
- *
- * @author seh
- */
- public class ArdorAwtExample {
- public final static class ExampleScene implements Scene {
- private final Node root;
- public ExampleScene() {
- root = new Node("root");
- }
- public Node getRoot() {
- return root;
- }
- @MainThread
- public boolean renderUnto(final Renderer renderer) {
- renderer.draw(root);
- return true;
- }
- public PickResults doPick(final Ray3 pickRay) {
- // does nothing.
- return null;
- }
- }
- static MouseCursor _cursor1;
- static MouseCursor _cursor2;
- static Map<Canvas, Boolean> _showCursor1 = new HashMap<Canvas, Boolean>();
- public static void main(final String[] args) throws Exception {
- System.setProperty("ardor3d.useMultipleContexts", "true");
- final Module ardorModule = new ArdorModule();
- // final Module systemModule = new LwjglAwtModule();
- final Injector injector = Guice.createInjector(Stage.PRODUCTION, ardorModule);
- final FrameHandler frameWork = injector.getInstance(FrameHandler.class);
- final MyExit exit = new MyExit();
- final LogicalLayer logicalLayer = injector.getInstance(LogicalLayer.class);
- final ExampleScene scene1 = new ExampleScene();
- final RotatingCubeGame game1 = new RotatingCubeGame(scene1, exit, logicalLayer, Key.T);
- frameWork.addUpdater(game1);
- final ExampleScene scene2 = new ExampleScene();
- final RotatingCubeGame game2 = new RotatingCubeGame(scene2, exit, logicalLayer, Key.G);
- frameWork.addUpdater(game2);
- final JFrame frame = new JFrame("AWT Example");
- frame.addWindowListener(new WindowAdapter() {
- @Override
- public void windowClosing(final WindowEvent e) {
- exit.exit();
- }
- });
- frame.setLayout(new GridLayout(2, 3));
- AWTImageLoader.registerLoader();
- // try {
- // final SimpleResourceLocator srl = new SimpleResourceLocator(ExampleBase.class.getClassLoader().getResource(
- // "com/ardor3d/example/media/"));
- // ResourceLocatorTool.addResourceLocator(ResourceLocatorTool.TYPE_TEXTURE, srl);
- // } catch (final URISyntaxException ex) {
- // ex.printStackTrace();
- // }
- final AWTImageLoader awtImageLoader = new AWTImageLoader();
- // _cursor1 = createMouseCursor(awtImageLoader, "/com/ardor3d/example/media/input/wait_cursor.png");
- // _cursor2 = createMouseCursor(awtImageLoader, "/com/ardor3d/example/media/input/movedata.gif");
- addCanvas(frame, scene1, logicalLayer, frameWork);
- frame.add(new JLabel(
- "<html>" + "<table>" + "<tr><th align=\"left\" style=\"font-size: 16\">Action</th><th align=\"left\" style=\"font-size: 16\">Command</th></tr>" + "<tr><td>WS</td><td>Move camera position forward/back</td></tr>" + "<tr><td>AD</td><td>Turn camera left/right</td></tr>" + "<tr><td>QE</td><td>Strafe camera left/right</td></tr>" + "<tr><td>T</td><td>Toggle cube rotation for scene 1 on press</td></tr>" + "<tr><td>G</td><td>Toggle cube rotation for scene 2 on press</td></tr>" + "<tr><td>U</td><td>Toggle both cube rotations on release</td></tr>" + "<tr><td>0 (zero)</td><td>Reset camera position</td></tr>" + "<tr><td>9</td><td>Face camera towards cube without changing position</td></tr>" + "<tr><td>ESC</td><td>Quit</td></tr>" + "<tr><td>Mouse</td><td>Press left button to rotate camera.</td></tr>" + "</table>" + "</html>", SwingConstants.CENTER));
- addCanvas(frame, scene1, logicalLayer, frameWork);
- frame.add(new JLabel("", SwingConstants.CENTER));
- addCanvas(frame, scene2, logicalLayer, frameWork);
- frame.add(new JLabel("", SwingConstants.CENTER));
- frame.pack();
- frame.setVisible(true);
- game1.init();
- game2.init();
- while (!exit.isExit()) {
- frameWork.updateFrame();
- Thread.yield();
- }
- frame.dispose();
- System.exit(0);
- }
- // private static MouseCursor createMouseCursor(final AWTImageLoader awtImageLoader, final String resourceName) throws IOException {
- // final com.ardor3d.image.Image image = awtImageLoader.load(JoglAwtExample.class.getResourceAsStream(resourceName), false);
- //
- // return new MouseCursor("cursor1", image, 0, image.getHeight() - 1);
- // }
- private static void addCanvas(final JFrame frame, final ExampleScene scene, final LogicalLayer logicalLayer,
- final FrameHandler frameWork) throws Exception {
- final JoglCanvasRenderer canvasRenderer = new JoglCanvasRenderer(scene);
- final DisplaySettings settings = new DisplaySettings(400, 300, 24, 0, 0, 16, 0, 0, false, false);
- final JoglAwtCanvas theCanvas = new JoglAwtCanvas(settings, canvasRenderer);
- frame.add(theCanvas);
- _showCursor1.put(theCanvas, true);
- theCanvas.setSize(new Dimension(400, 300));
- theCanvas.setVisible(true);
- final AwtKeyboardWrapper keyboardWrapper = new AwtKeyboardWrapper(theCanvas);
- final AwtFocusWrapper focusWrapper = new AwtFocusWrapper(theCanvas);
- final AwtMouseManager mouseManager = new AwtMouseManager(theCanvas);
- final AwtMouseWrapper mouseWrapper = new AwtMouseWrapper(theCanvas, mouseManager);
- final ControllerWrapper controllerWrapper = new DummyControllerWrapper();
- final PhysicalLayer pl = new PhysicalLayer(keyboardWrapper, mouseWrapper, controllerWrapper, focusWrapper);
- logicalLayer.registerInput(theCanvas, pl);
- logicalLayer.registerTrigger(new InputTrigger(new KeyPressedCondition(Key.H), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- if (source != theCanvas) {
- return;
- }
- if (_showCursor1.get(theCanvas)) {
- mouseManager.setCursor(_cursor1);
- } else {
- mouseManager.setCursor(_cursor2);
- }
- _showCursor1.put(theCanvas, !_showCursor1.get(theCanvas));
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyPressedCondition(Key.J), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- if (source != theCanvas) {
- return;
- }
- mouseManager.setCursor(MouseCursor.SYSTEM_DEFAULT);
- }
- }));
- frameWork.addCanvas(theCanvas);
- }
- private static class MyExit implements Exit {
- private volatile boolean exit = false;
- public void exit() {
- exit = true;
- }
- public boolean isExit() {
- return exit;
- }
- }
- public static class RotatingCubeGame implements Updater {
- // private final Canvas view;
- private final ExampleScene scene;
- private final Exit exit;
- private final LogicalLayer logicalLayer;
- private final Key toggleRotationKey;
- private final static float CUBE_ROTATE_SPEED = 1;
- private final Vector3 rotationAxis = new Vector3(1, 1, 0);
- private double angle = 0;
- private Mesh box = new Box("The cube", new Vector3(-1, -1, -1), new Vector3(1, 1, 1));
- private final Matrix3 rotation = new Matrix3();
- private static final int MOVE_SPEED = 4;
- private static final double TURN_SPEED = 0.5;
- private final Matrix3 _incr = new Matrix3();
- private static final double MOUSE_TURN_SPEED = 1;
- private int rotationSign = 1;
- @Inject
- public RotatingCubeGame(final ExampleScene scene, final Exit exit, final LogicalLayer logicalLayer,
- final Key toggleRotationKey) {
- this.scene = scene;
- this.exit = exit;
- this.logicalLayer = logicalLayer;
- this.toggleRotationKey = toggleRotationKey;
- }
- @MainThread
- public void init() {
- // add a cube to the scene
- // add a rotating controller to the cube
- // add a light
- // box = SimpleShapeFactory.createQuad("the 'box'", 1, 1);
- final ZBufferState buf = new ZBufferState();
- buf.setEnabled(true);
- buf.setFunction(ZBufferState.TestFunction.LessThanOrEqualTo);
- scene.getRoot().setRenderState(buf);
- // Add a texture to the box.
- // final TextureState ts = new TextureState();
- // ts.setTexture(TextureManager.load("images/ardor3d_white_256.jpg", Texture.MinificationFilter.Trilinear,
- // Format.GuessNoCompression, true));
- // box.setRenderState(ts);
- box.setRandomColors();
- final PointLight light = new PointLight();
- final Random random = new Random();
- final float r = random.nextFloat();
- final float g = random.nextFloat();
- final float b = random.nextFloat();
- final float a = random.nextFloat();
- light.setDiffuse(new ColorRGBA(r, g, b, a));
- light.setAmbient(new ColorRGBA(0.5f, 0.5f, 0.5f, 1.0f));
- light.setLocation(new Vector3(MOVE_SPEED, MOVE_SPEED, MOVE_SPEED));
- light.setEnabled(true);
- /** Attach the light to a lightState and the lightState to rootNode. */
- final LightState lightState = new LightState();
- lightState.setEnabled(true);
- lightState.attach(light);
- scene.getRoot().setRenderState(lightState);
- scene.getRoot().attachChild(box);
- registerInputTriggers();
- }
- private void registerInputTriggers() {
- logicalLayer.registerTrigger(new InputTrigger(new KeyHeldCondition(Key.W), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- moveForward(source, tpf);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyHeldCondition(Key.S), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- moveBack(source, tpf);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyHeldCondition(Key.A), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- turnLeft(source, tpf);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyHeldCondition(Key.D), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- turnRight(source, tpf);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyHeldCondition(Key.Q), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- moveLeft(source, tpf);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyHeldCondition(Key.E), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- moveRight(source, tpf);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyPressedCondition(Key.ESCAPE), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- exit.exit();
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyPressedCondition(toggleRotationKey), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- toggleRotation();
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyReleasedCondition(Key.U), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- toggleRotation();
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyPressedCondition(Key.ZERO), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- resetCamera(source);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new KeyPressedCondition(Key.NINE), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- lookAtZero(source);
- }
- }));
- final Predicate<TwoInputStates> mouseMovedAndOneButtonPressed = Predicates.and(TriggerConditions.mouseMoved(),
- Predicates.or(TriggerConditions.leftButtonDown(), TriggerConditions.rightButtonDown()));
- logicalLayer.registerTrigger(new InputTrigger(mouseMovedAndOneButtonPressed, new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- final MouseState mouseState = inputStates.getCurrent().getMouseState();
- turn(source, mouseState.getDx() * tpf * -MOUSE_TURN_SPEED);
- rotateUpDown(source, mouseState.getDy() * tpf * -MOUSE_TURN_SPEED);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new MouseButtonCondition(ButtonState.DOWN, ButtonState.DOWN,
- ButtonState.UNDEFINED), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- moveForward(source, tpf);
- }
- }));
- logicalLayer.registerTrigger(new InputTrigger(new AnyKeyCondition(), new TriggerAction() {
- public void perform(final Canvas source, final TwoInputStates inputStates, final double tpf) {
- final InputState current = inputStates.getCurrent();
- System.out.println("Key character pressed: " + current.getKeyboardState().getKeyEvent().getKeyChar());
- }
- }));
- }
- private void lookAtZero(final Canvas source) {
- source.getCanvasRenderer().getCamera().lookAt(Vector3.ZERO, Vector3.UNIT_Y);
- }
- private void resetCamera(final Canvas source) {
- final Vector3 loc = new Vector3(0.0f, 0.0f, 10.0f);
- final Vector3 left = new Vector3(-1.0f, 0.0f, 0.0f);
- final Vector3 up = new Vector3(0.0f, 1.0f, 0.0f);
- final Vector3 dir = new Vector3(0.0f, 0f, -1.0f);
- source.getCanvasRenderer().getCamera().setFrame(loc, left, up, dir);
- }
- private void toggleRotation() {
- rotationSign *= -1;
- }
- @MainThread
- public void update(final ReadOnlyTimer timer) {
- final double tpf = timer.getTimePerFrame();
- logicalLayer.checkTriggers(tpf);
- // rotate away
- angle += tpf * CUBE_ROTATE_SPEED * rotationSign;
- rotation.fromAngleAxis(angle, rotationAxis);
- if (box!=null) {
- box.setRotation(rotation);
- box.updateGeometricState(tpf, true);
- }
- }
- private void rotateUpDown(final Canvas canvas, final double speed) {
- final Camera camera = canvas.getCanvasRenderer().getCamera();
- final Vector3 temp = Vector3.fetchTempInstance();
- _incr.fromAngleNormalAxis(speed, camera.getLeft());
- _incr.applyPost(camera.getLeft(), temp);
- camera.setLeft(temp);
- _incr.applyPost(camera.getDirection(), temp);
- camera.setDirection(temp);
- _incr.applyPost(camera.getUp(), temp);
- camera.setUp(temp);
- Vector3.releaseTempInstance(temp);
- camera.normalize();
- }
- private void turnRight(final Canvas canvas, final double tpf) {
- turn(canvas, -TURN_SPEED * tpf);
- }
- private void turn(final Canvas canvas, final double speed) {
- final Camera camera = canvas.getCanvasRenderer().getCamera();
- final Vector3 temp = Vector3.fetchTempInstance();
- _incr.fromAngleNormalAxis(speed, camera.getUp());
- _incr.applyPost(camera.getLeft(), temp);
- camera.setLeft(temp);
- _incr.applyPost(camera.getDirection(), temp);
- camera.setDirection(temp);
- _incr.applyPost(camera.getUp(), temp);
- camera.setUp(temp);
- Vector3.releaseTempInstance(temp);
- camera.normalize();
- }
- private void turnLeft(final Canvas canvas, final double tpf) {
- turn(canvas, TURN_SPEED * tpf);
- }
- private void moveForward(final Canvas canvas, final double tpf) {
- final Camera camera = canvas.getCanvasRenderer().getCamera();
- final Vector3 loc = Vector3.fetchTempInstance().set(camera.getLocation());
- final Vector3 dir = Vector3.fetchTempInstance();
- if (camera.getProjectionMode() == ProjectionMode.Perspective) {
- dir.set(camera.getDirection());
- } else {
- // move up if in parallel mode
- dir.set(camera.getUp());
- }
- dir.multiplyLocal(MOVE_SPEED * tpf);
- loc.addLocal(dir);
- camera.setLocation(loc);
- Vector3.releaseTempInstance(loc);
- Vector3.releaseTempInstance(dir);
- }
- private void moveLeft(final Canvas canvas, final double tpf) {
- final Camera camera = canvas.getCanvasRenderer().getCamera();
- final Vector3 loc = Vector3.fetchTempInstance().set(camera.getLocation());
- final Vector3 dir = Vector3.fetchTempInstance();
- dir.set(camera.getLeft());
- dir.multiplyLocal(MOVE_SPEED * tpf);
- loc.addLocal(dir);
- camera.setLocation(loc);
- Vector3.releaseTempInstance(loc);
- Vector3.releaseTempInstance(dir);
- }
- private void moveRight(final Canvas canvas, final double tpf) {
- final Camera camera = canvas.getCanvasRenderer().getCamera();
- final Vector3 loc = Vector3.fetchTempInstance().set(camera.getLocation());
- final Vector3 dir = Vector3.fetchTempInstance();
- dir.set(camera.getLeft());
- dir.multiplyLocal(-MOVE_SPEED * tpf);
- loc.addLocal(dir);
- camera.setLocation(loc);
- Vector3.releaseTempInstance(loc);
- Vector3.releaseTempInstance(dir);
- }
- private void moveBack(final Canvas canvas, final double tpf) {
- final Camera camera = canvas.getCanvasRenderer().getCamera();
- final Vector3 loc = Vector3.fetchTempInstance().set(camera.getLocation());
- final Vector3 dir = Vector3.fetchTempInstance();
- if (camera.getProjectionMode() == ProjectionMode.Perspective) {
- dir.set(camera.getDirection());
- } else {
- // move up if in parallel mode
- dir.set(camera.getUp());
- }
- dir.multiplyLocal(-MOVE_SPEED * tpf);
- loc.addLocal(dir);
- camera.setLocation(loc);
- Vector3.releaseTempInstance(loc);
- Vector3.releaseTempInstance(dir);
- }
- }
- }