summaryrefslogtreecommitdiff
path: root/src/tesseract/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src/tesseract/objects')
-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
5 files changed, 125 insertions, 1 deletions
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";
+ }
+
}