summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2011-03-11 02:06:34 +0000
committerJesse Morgan <jesse@jesterpm.net>2011-03-11 02:06:34 +0000
commit52308d9ab00d8a117f241abeaba8335c9374c2ba (patch)
tree2649fef03c35a573f5135dc754c882562a082116
parent19007d3f4a1c69777cb01d50e433fb971519a1d2 (diff)
Some remote code that isn't yet remote.
-rw-r--r--src/tesseract/TesseractUI.java25
-rw-r--r--src/tesseract/objects/remote/RemoteObject.java17
-rw-r--r--src/tesseract/objects/remote/RemoteObjectMenu.java62
-rw-r--r--src/tesseract/objects/remote/RemoteObjectMenuItem.java24
-rw-r--r--src/tesseract/objects/remote/TankMenuItem.java16
-rw-r--r--src/tesseract/objects/tank/Tank.java7
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";
+ }
+
}