diff options
Diffstat (limited to 'src/tesseract/objects/remote')
-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 |
4 files changed, 119 insertions, 0 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); + } +} |