diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2011-03-11 02:06:34 +0000 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2011-03-11 02:06:34 +0000 |
commit | 52308d9ab00d8a117f241abeaba8335c9374c2ba (patch) | |
tree | 2649fef03c35a573f5135dc754c882562a082116 | |
parent | 19007d3f4a1c69777cb01d50e433fb971519a1d2 (diff) |
Some remote code that isn't yet remote.
-rw-r--r-- | src/tesseract/TesseractUI.java | 25 | ||||
-rw-r--r-- | src/tesseract/objects/remote/RemoteObject.java | 17 | ||||
-rw-r--r-- | src/tesseract/objects/remote/RemoteObjectMenu.java | 62 | ||||
-rw-r--r-- | src/tesseract/objects/remote/RemoteObjectMenuItem.java | 24 | ||||
-rw-r--r-- | src/tesseract/objects/remote/TankMenuItem.java | 16 | ||||
-rw-r--r-- | src/tesseract/objects/tank/Tank.java | 7 |
6 files changed, 148 insertions, 3 deletions
diff --git a/src/tesseract/TesseractUI.java b/src/tesseract/TesseractUI.java index 0378f64..b1d5335 100644 --- a/src/tesseract/TesseractUI.java +++ b/src/tesseract/TesseractUI.java @@ -4,6 +4,9 @@ import java.awt.GraphicsConfiguration; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; @@ -49,6 +52,7 @@ import tesseract.newmenu.NewPlanarPolygonMenuItem; import tesseract.newmenu.NewSurfBoardMenuItem; import tesseract.newmenu.NewToroidMenuItem; import tesseract.objects.PhysicalObject; +import tesseract.objects.remote.RemoteObjectMenu; import com.sun.j3d.utils.picking.PickCanvas; import com.sun.j3d.utils.picking.PickResult; @@ -128,6 +132,11 @@ public class TesseractUI extends JFrame { private PhysicalObject myCurrentObject; /** + * Remote Objects. + */ + private RemoteObjectMenu myRemoteObjects; + + /** * UI Constructor. */ public TesseractUI() { @@ -160,6 +169,9 @@ public class TesseractUI extends JFrame { new NewToroidMenuItem(myWorld), new NewSurfBoardMenuItem(myWorld) }; + + myRemoteObjects = new RemoteObjectMenu(myWorld); + createMenu(); setupCanvas(); pack(); @@ -390,11 +402,12 @@ public class TesseractUI extends JFrame { } }); networkMenu.add(chat); - //menuBar.add(networkMenu);//*/ - setJMenuBar(menuBar); + // Remote Objects + menuBar.add(myRemoteObjects); + setJMenuBar(menuBar); } /** @@ -538,6 +551,14 @@ public class TesseractUI extends JFrame { } }); + // Keyboard Events + myCanvas.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + myRemoteObjects.sendKeyToObjects(e); + } + }); + // Setup the timer. myTimer = new Timer(MILISECONDS_IN_SECOND / UPDATE_RATE, new ActionListener() { diff --git a/src/tesseract/objects/remote/RemoteObject.java b/src/tesseract/objects/remote/RemoteObject.java index 7c3e3be..d9df0db 100644 --- a/src/tesseract/objects/remote/RemoteObject.java +++ b/src/tesseract/objects/remote/RemoteObject.java @@ -50,5 +50,22 @@ public abstract class RemoteObject extends PhysicalObject { break; } } + + /** + * Get the name of the object for the menu. + * + * @return The object's name for the menu. + */ + public abstract String getName(); + + /** + * Send a KeyEvent to this remote object. + * + * @param keyEvent The key event + */ + public void sendKeyEvent(final KeyEvent keyEvent) { + // TODO: Send this event over the network if necessary. + keyEventReceived(keyEvent); + } } diff --git a/src/tesseract/objects/remote/RemoteObjectMenu.java b/src/tesseract/objects/remote/RemoteObjectMenu.java new file mode 100644 index 0000000..b63ee93 --- /dev/null +++ b/src/tesseract/objects/remote/RemoteObjectMenu.java @@ -0,0 +1,62 @@ +package tesseract.objects.remote; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.util.ArrayList; + +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JMenu; + +import tesseract.World; + +/** + * Remote object menu. + * + * @author jesse + */ +public class RemoteObjectMenu extends JMenu { + private ArrayList<RemoteObject> myControlledObjects; + + private World myWorld; + + public RemoteObjectMenu(final World theWorld) { + super("RC Objects"); + + myWorld = theWorld; + myControlledObjects = new ArrayList<RemoteObject>(); + + // Objects that can be added + add(new TankMenuItem(this)); + + // Separator + addSeparator(); + + // Living Objects here... + } + + public void addObject(final RemoteObject theObject) { + JCheckBoxMenuItem item = new JCheckBoxMenuItem(); + + item.setText(theObject.getName()); + + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (((JCheckBoxMenuItem) e.getSource()).isSelected()) { + myControlledObjects.add(theObject); + + } else { + myControlledObjects.remove(theObject); + } + } + }); + + myWorld.addObject(theObject); + } + + public void sendKeyToObjects(final KeyEvent e) { + for (RemoteObject o : myControlledObjects) { + o.sendKeyEvent(e); + } + } +} diff --git a/src/tesseract/objects/remote/RemoteObjectMenuItem.java b/src/tesseract/objects/remote/RemoteObjectMenuItem.java new file mode 100644 index 0000000..49b8be6 --- /dev/null +++ b/src/tesseract/objects/remote/RemoteObjectMenuItem.java @@ -0,0 +1,24 @@ +package tesseract.objects.remote; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JMenuItem; + +import tesseract.World; + +public abstract class RemoteObjectMenuItem extends JMenuItem { + protected RemoteObjectMenuItem(final String theLabel, + final RemoteObjectMenu theMenu) { + super(theLabel); + + addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + RemoteObject o = createRemoteObject(); + theMenu.addObject(o); + } + }); + } + + protected abstract RemoteObject createRemoteObject(); +} diff --git a/src/tesseract/objects/remote/TankMenuItem.java b/src/tesseract/objects/remote/TankMenuItem.java new file mode 100644 index 0000000..317c0fc --- /dev/null +++ b/src/tesseract/objects/remote/TankMenuItem.java @@ -0,0 +1,16 @@ +package tesseract.objects.remote; + +import javax.vecmath.Vector3f; + +import tesseract.objects.tank.Tank; + +public class TankMenuItem extends RemoteObjectMenuItem { + public TankMenuItem(final RemoteObjectMenu theMenu) { + super("Tank", theMenu); + } + + @Override + protected RemoteObject createRemoteObject() { + return new Tank(new Vector3f(), 1); + } +} diff --git a/src/tesseract/objects/tank/Tank.java b/src/tesseract/objects/tank/Tank.java index 4b160fb..12f6fb3 100644 --- a/src/tesseract/objects/tank/Tank.java +++ b/src/tesseract/objects/tank/Tank.java @@ -13,7 +13,7 @@ public class Tank extends RemoteObject { private final TransformGroup tank;
private final TransformGroup body;
private final TransformGroup turret;
- private static final float DEFAULT_SCALE = 1f;;
+ private static final float DEFAULT_SCALE = 0.0625f;
private static final Color DEFAULT_BODY_COLOR = Color.GREEN;
private static final Color DEFAULT_TRACK_COLOR = Color.DARK_GRAY;
private static final Color DEFAULT_TURRET_COLOR = Color.GREEN;
@@ -49,4 +49,9 @@ public class Tank extends RemoteObject { */
private static final long serialVersionUID = 4419863813052251438L;
+ @Override
+ public String getName() {
+ return "Tank";
+ }
+
}
|