summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/AnimatedActionManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'NET/worlds/scape/AnimatedActionManager.java')
-rw-r--r--NET/worlds/scape/AnimatedActionManager.java401
1 files changed, 401 insertions, 0 deletions
diff --git a/NET/worlds/scape/AnimatedActionManager.java b/NET/worlds/scape/AnimatedActionManager.java
new file mode 100644
index 0000000..d3c8d2c
--- /dev/null
+++ b/NET/worlds/scape/AnimatedActionManager.java
@@ -0,0 +1,401 @@
+/* */ package NET.worlds.scape;
+/* */
+/* */ import NET.worlds.core.IniFile;
+/* */ import NET.worlds.network.NetUpdate;
+/* */ import NET.worlds.network.URL;
+/* */ import java.awt.Menu;
+/* */ import java.awt.MenuItem;
+/* */ import java.awt.event.ActionEvent;
+/* */ import java.awt.event.ActionListener;
+/* */ import java.io.File;
+/* */ import java.io.IOException;
+/* */ import java.io.PrintStream;
+/* */ import java.io.RandomAccessFile;
+/* */ import java.util.Enumeration;
+/* */ import java.util.StringTokenizer;
+/* */ import java.util.Vector;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public class AnimatedActionManager
+/* */ implements ActionListener, BGLoaded
+/* */ {
+/* */ public static AnimatedActionManager get()
+/* */ {
+/* 38 */ if (theAnimatedActionManager == null) {
+/* 39 */ theAnimatedActionManager = new AnimatedActionManager();
+/* */ }
+/* 41 */ return theAnimatedActionManager;
+/* */ }
+/* */
+/* */ private Vector<AnimatedAction> getActionList(URL avatar, URL object)
+/* */ {
+/* 46 */ if ((this.actionList == null) || (avatar == null) || (object == null)) { return null;
+/* */ }
+/* 48 */ String av = PosableShape.getBodyType(avatar);
+/* 49 */ if (av == null) { return null;
+/* */ }
+/* 51 */ String ob = object.toString();
+/* 52 */ int dot = ob.lastIndexOf(".");
+/* 53 */ if (dot != -1) {
+/* 54 */ ob = ob.substring(0, dot);
+/* */ }
+/* 56 */ Vector<AnimatedAction> ret = new Vector();
+/* */
+/* */
+/* */
+/* 60 */ Enumeration<AnimatedAction> e = this.actionList.elements();
+/* 61 */ while (e.hasMoreElements())
+/* */ {
+/* 63 */ AnimatedAction a = (AnimatedAction)e.nextElement();
+/* 64 */ if (vectorCheck(av, a.avatarNames))
+/* */ {
+/* 66 */ if (vectorCheck(ob, a.targetObjects))
+/* */ {
+/* 68 */ ret.addElement(a);
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* 73 */ return ret;
+/* */ }
+/* */
+/* */
+/* */ private boolean vectorCheck(String s, Vector<String> v)
+/* */ {
+/* 79 */ Enumeration<String> e = v.elements();
+/* 80 */ while (e.hasMoreElements())
+/* */ {
+/* 82 */ String element = (String)e.nextElement();
+/* 83 */ if (s.toLowerCase().endsWith(element.toLowerCase()))
+/* 84 */ return true;
+/* 85 */ if (element.equals("any"))
+/* 86 */ return true;
+/* */ }
+/* 88 */ return false;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public boolean buildActionMenu(Menu m, Shape target)
+/* */ {
+/* 97 */ assert (m != null);
+/* */
+/* */
+/* 100 */ if (this._currentAction != null) { return false;
+/* */ }
+/* */
+/* */
+/* 104 */ SuperRoot ultimateOwner = target;
+/* 105 */ while (ultimateOwner.getOwner() != null)
+/* */ {
+/* 107 */ ultimateOwner = ultimateOwner.getOwner();
+/* 108 */ if ((ultimateOwner instanceof PosableShape))
+/* */ {
+/* 110 */ target = (Shape)ultimateOwner;
+/* 111 */ break;
+/* */ }
+/* */ }
+/* */
+/* */
+/* 116 */ Pilot p = Pilot.getActive();
+/* 117 */ if (p == null) return false;
+/* 118 */ if (!(p instanceof HoloPilot)) return false;
+/* 119 */ HoloPilot hp = (HoloPilot)p;
+/* */
+/* */
+/* */
+/* 123 */ if (hp.getInternalDrone().getRoom() != target.getRoom())
+/* */ {
+/* */
+/* 126 */ return false;
+/* */ }
+/* */
+/* */
+/* */
+/* 131 */ Vector<AnimatedAction> v = getActionList(hp.getInternalDrone()
+/* 132 */ .getCurrentURL(), target.getURL());
+/* */
+/* 134 */ this.currentMenuActions = v;
+/* */
+/* 136 */ if (v == null) return false;
+/* 137 */ if (v.size() == 0) { return false;
+/* */ }
+/* 139 */ Enumeration<AnimatedAction> e = v.elements();
+/* 140 */ while (e.hasMoreElements())
+/* */ {
+/* 142 */ AnimatedAction a = (AnimatedAction)e.nextElement();
+/* 143 */ a.setTargetShape(target);
+/* */
+/* 145 */ int idx = a.actionName.indexOf("\\");
+/* */
+/* 147 */ if (idx != -1)
+/* */ {
+/* 149 */ String action = a.actionName.substring(idx + 1);
+/* */
+/* 151 */ String submenu = a.actionName.substring(0, idx);
+/* 152 */ int items = m.getItemCount();
+/* 153 */ boolean inserted = false;
+/* 154 */ for (int i = 0; i < items; i++)
+/* */ {
+/* 156 */ MenuItem item = m.getItem(i);
+/* 157 */ if (item.getLabel().equals(submenu))
+/* */ {
+/* 159 */ if ((item instanceof Menu))
+/* */ {
+/* 161 */ ((Menu)item).add(action);
+/* */
+/* 163 */ inserted = true;
+/* 164 */ break;
+/* */ }
+/* */ }
+/* */ }
+/* 168 */ if (!inserted)
+/* */ {
+/* 170 */ Menu sm = new Menu(submenu);
+/* 171 */ sm.addActionListener(this);
+/* 172 */ sm.add(action);
+/* 173 */ m.add(sm);
+/* */ }
+/* */ }
+/* */ else
+/* */ {
+/* 178 */ m.add(a.actionName);
+/* */ }
+/* */ }
+/* */
+/* 182 */ return true;
+/* */ }
+/* */
+/* */
+/* */
+/* */ public boolean processMenuClick(String actionName)
+/* */ {
+/* 189 */ if (this.currentMenuActions == null) { return false;
+/* */ }
+/* 191 */ Enumeration<AnimatedAction> e = this.currentMenuActions.elements();
+/* 192 */ while (e.hasMoreElements())
+/* */ {
+/* 194 */ AnimatedAction a = (AnimatedAction)e.nextElement();
+/* 195 */ String thisAction = a.actionName;
+/* 196 */ int idx = thisAction.indexOf('\\');
+/* 197 */ if (idx != -1)
+/* */ {
+/* 199 */ thisAction = thisAction.substring(idx + 1);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* 205 */ if (thisAction.equals(actionName))
+/* */ {
+/* 207 */ Pilot p = Pilot.getActive();
+/* 208 */ if (p == null) return false;
+/* 209 */ if (!(p instanceof HoloPilot)) return false;
+/* 210 */ HoloPilot hp = (HoloPilot)p;
+/* */
+/* 212 */ if (this._currentAction != null)
+/* */ {
+/* 214 */ this._currentAction.abort();
+/* */ }
+/* 216 */ this._currentAction = a;
+/* */
+/* 218 */ a.execute(hp);
+/* 219 */ return true;
+/* */ }
+/* */ }
+/* */
+/* 223 */ return false;
+/* */ }
+/* */
+/* */
+/* 227 */ private AnimatedAction _currentAction = null;
+/* */ static final String actionFile = "actions/actions.dat";
+/* */
+/* */ public void actionCompleted(AnimatedAction a) {
+/* 231 */ assert (a == this._currentAction);
+/* 232 */ this._currentAction = null;
+/* */ }
+/* */
+/* */ static final String localActionFile = "actions.dat";
+/* */ static final String version = "VERSION";
+/* */ public void actionPerformed(ActionEvent e) {
+/* 238 */ processMenuClick(e.getActionCommand());
+/* */ }
+/* */
+/* */ static final String action = "ACTION";
+/* */ private Vector<AnimatedAction> actionList;
+/* */ private Vector<AnimatedAction> currentMenuActions;
+/* */ private AnimatedActionManager()
+/* */ {
+/* 246 */ System.out.println("Loading action manager");
+/* 247 */ this.actionList = new Vector();
+/* */
+/* 249 */ loadActionsFile();
+/* */ }
+/* */
+/* */
+/* */ private void loadActionsFile()
+/* */ {
+/* 255 */ File f = new File("actions.dat");
+/* 256 */ if (f.exists()) { parseActionFile("actions.dat");
+/* */ }
+/* */
+/* 259 */ String serv = NetUpdate.getUpgradeServerURL();
+/* 260 */ String s = IniFile.override().getIniString("actionFile",
+/* 261 */ "actions/actions.dat");
+/* 262 */ BackgroundLoader.get(this, URL.make(serv + s));
+/* */ }
+/* */
+/* */
+/* */ public synchronized Object asyncBackgroundLoad(String localName, URL remoteURL)
+/* */ {
+/* 268 */ return localName;
+/* */ }
+/* */
+/* */ public boolean syncBackgroundLoad(Object obj, URL remoteURL) {
+/* 272 */ System.out.println("Got actions file ");
+/* 273 */ String localName = (String)obj;
+/* 274 */ if ((localName != null) && (new File(localName).exists()))
+/* */ {
+/* 276 */ parseActionFile(localName);
+/* */ }
+/* 278 */ return false;
+/* */ }
+/* */
+/* */ public Room getBackgroundLoadRoom() {
+/* 282 */ return null;
+/* */ }
+/* */
+/* */
+/* */
+/* */ private String getLine(RandomAccessFile fIn)
+/* */ throws IOException
+/* */ {
+/* 290 */ while (fIn.getFilePointer() < fIn.length())
+/* */ {
+/* 292 */ String line = fIn.readLine().trim();
+/* 293 */ if (line == null) return null;
+/* 294 */ if ((!line.startsWith("//")) &&
+/* 295 */ (line.length() != 0))
+/* */ {
+/* 297 */ return line;
+/* */ }
+/* */ }
+/* 300 */ return null;
+/* */ }
+/* */
+/* */
+/* */ private void parseActionFile(String fileName)
+/* */ {
+/* 306 */ int verNum = 0;
+/* */
+/* 308 */ assert (this.actionList != null);
+/* 309 */ this.actionList.removeAllElements();
+/* */
+/* */ try
+/* */ {
+/* 313 */ RandomAccessFile fIn = new RandomAccessFile(fileName,
+/* 314 */ "r");
+/* */
+/* */ String line;
+/* 317 */ while ((line = getLine(fIn)) != null) {
+/* */ String line;
+/* 319 */ StringTokenizer tok = new StringTokenizer(line);
+/* */
+/* 321 */ String firstWord = tok.nextToken();
+/* 322 */ if (firstWord.equals("VERSION"))
+/* */ {
+/* 324 */ String ver = tok.nextToken();
+/* 325 */ if (ver.equals("1")) {
+/* 326 */ verNum = 1;
+/* 327 */ } else if (ver.equals("2")) {
+/* 328 */ verNum = 2;
+/* */ } else {
+/* 330 */ throw new Exception("Bad version.");
+/* */ }
+/* 332 */ } else if (firstWord.equals("ACTION"))
+/* */ {
+/* 334 */ if (verNum == 0) {
+/* 335 */ throw new Exception("Actions file version not specified.");
+/* */ }
+/* 337 */ AnimatedAction a = new AnimatedAction();
+/* 338 */ a.actionName = line.substring("ACTION".length() + 1);
+/* 339 */ readVector(fIn, a.avatarNames);
+/* 340 */ readVector(fIn, a.targetObjects);
+/* 341 */ if (verNum > 1)
+/* */ {
+/* 343 */ a.consentRequired = getLine(fIn)
+/* 344 */ .toLowerCase().equals("consent");
+/* */ }
+/* 346 */ StringTokenizer tok2 = new StringTokenizer(
+/* 347 */ getLine(fIn));
+/* 348 */ Float x = new Float(tok2.nextToken());
+/* 349 */ Float y = new Float(tok2.nextToken());
+/* 350 */ a.targetRelPosition = new Point2(
+/* 351 */ x.floatValue(), y.floatValue());
+/* 352 */ Float yaw = new Float(getLine(fIn));
+/* 353 */ a.targetRelYaw = yaw.floatValue();
+/* 354 */ a.preAnimationAction =
+/* 355 */ AnimatedAction.getAction(getLine(fIn));
+/* 356 */ a.preAnimationParameter = getLine(fIn);
+/* 357 */ a.actionName1 = getLine(fIn);
+/* 358 */ if (verNum > 1)
+/* */ {
+/* 360 */ a.simultaneousAction =
+/* 361 */ AnimatedAction.getAction(getLine(fIn));
+/* 362 */ a.simultaneousParameter = getLine(fIn);
+/* */ }
+/* 364 */ a.postAnimationAction =
+/* 365 */ AnimatedAction.getAction(getLine(fIn));
+/* 366 */ a.postAnimationParameter = getLine(fIn);
+/* 367 */ a.actionName2 = getLine(fIn);
+/* 368 */ this.actionList.addElement(a);
+/* */ }
+/* */ }
+/* */
+/* 372 */ fIn.close();
+/* */ }
+/* */ catch (Exception e)
+/* */ {
+/* 376 */ System.out.println("Error reading actions.dat: " +
+/* 377 */ e.toString());
+/* */ }
+/* */ }
+/* */
+/* */ private void readVector(RandomAccessFile fIn, Vector<String> v) throws IOException
+/* */ {
+/* 383 */ String line = getLine(fIn);
+/* 384 */ StringTokenizer tok = new StringTokenizer(line);
+/* */
+/* 386 */ while (tok.hasMoreTokens())
+/* */ {
+/* 388 */ v.addElement(tok.nextToken());
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* 394 */ private static AnimatedActionManager theAnimatedActionManager = null;
+/* */ }
+
+
+/* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\AnimatedActionManager.class
+ * Java compiler version: 6 (50.0)
+ * JD-Core Version: 0.7.1
+ */ \ No newline at end of file