/* */ package NET.worlds.scape; /* */ /* */ import NET.worlds.core.Std; /* */ import java.io.IOException; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public class AnimateAction /* */ extends Action /* */ { /* */ int startTime; /* 33 */ public int cycleTime = 1000; /* */ /* */ /* 36 */ public String frameList = ""; /* */ /* 38 */ protected int frameListCount = 0; /* */ /* */ /* */ /* 42 */ protected Material[] frameMaterialArray = null; /* */ /* 44 */ public int cycles = 0; /* 45 */ public boolean infiniteLoop = false; /* */ /* */ protected int cycleNo; /* */ protected int currentFrameNo; /* 49 */ private boolean running = false; /* */ /* */ public AnimateAction() { /* 52 */ startAnimation(); /* */ } /* */ /* */ public void startAnimation() { /* 56 */ this.cycleNo = 0; /* 57 */ this.currentFrameNo = -1; /* 58 */ this.startTime = Std.getRealTime(); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void preprocessFrameList(String frameList) /* */ { /* 69 */ this.frameMaterialArray = AnimatingDoor.namesToMaterialArray(this, /* 70 */ frameList); /* 71 */ this.frameListCount = (this.frameMaterialArray == null ? 0 : /* 72 */ this.frameMaterialArray.length); /* */ } /* */ /* */ /* */ /* */ public void detach() /* */ { /* 79 */ if (this.frameMaterialArray != null) { /* 80 */ int i = this.frameMaterialArray.length; /* 81 */ do { this.frameMaterialArray[i].setKeepLoaded(false);i--; /* 80 */ } while (i >= 0); /* */ /* 82 */ this.frameMaterialArray = null; /* 83 */ this.frameListCount = 0; /* */ } /* 85 */ super.detach(); /* */ } /* */ /* */ /* */ public Persister trigger(Event e, Persister seqID) /* */ { /* 91 */ Object owner = getOwner(); /* 92 */ if (!(owner instanceof Animatable)) { /* 93 */ this.frameMaterialArray = null; /* 94 */ this.frameListCount = 0; /* 95 */ return null; /* */ } /* */ /* 98 */ Animatable o = (Animatable)owner; /* */ /* */ /* */ /* 102 */ if (!o.hasClump()) { /* 103 */ this.frameMaterialArray = null; /* 104 */ this.frameListCount = 0; /* 105 */ return seqID; /* */ } /* */ /* */ /* 109 */ if (this.frameMaterialArray == null) { /* 110 */ preprocessFrameList(this.frameList); /* */ } /* */ /* 113 */ if (seqID == null) /* */ { /* 115 */ if ((this.running) && (!this.infiniteLoop)) { /* 116 */ return null; /* */ } /* 118 */ startAnimation(); /* */ } /* */ /* 121 */ int nextFrameNo = 0; /* 122 */ if ((this.frameListCount == 0) || (this.cycleTime <= 0)) { /* 123 */ this.cycleNo = 1000000000; /* */ } else { /* 125 */ int runTime = Std.getRealTime() - this.startTime; /* 126 */ long frameNo = this.frameListCount * runTime / this.cycleTime; /* 127 */ this.cycleNo = ((int)(frameNo / this.frameListCount)); /* 128 */ nextFrameNo = (int)(frameNo - this.cycleNo * this.frameListCount); /* */ } /* */ /* 131 */ if ((this.cycleNo >= this.cycles) && (!this.infiniteLoop)) { /* 132 */ nextFrameNo = this.frameListCount - 1; /* 133 */ this.running = false; /* */ } else { /* 135 */ this.running = true; /* */ } /* 137 */ if (nextFrameNo != this.currentFrameNo) { /* 138 */ this.currentFrameNo = nextFrameNo; /* 139 */ if ((o.hasClump()) && (this.currentFrameNo >= 0)) { /* 140 */ o.setMaterial(this.frameMaterialArray[this.currentFrameNo]); /* */ } /* */ } /* */ /* 144 */ return this.running ? this : null; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public Object properties(int index, int offset, int mode, Object value) /* */ throws NoSuchPropertyException /* */ { /* 154 */ Object ret = null; /* 155 */ switch (index - offset) { /* */ case 0: /* 157 */ if (mode == 0) { /* 158 */ ret = IntegerPropertyEditor.make( /* 159 */ new Property(this, index, "Cycle Time")); /* 160 */ } else if (mode == 1) { /* 161 */ ret = new Integer(this.cycleTime); /* 162 */ } else if (mode == 2) /* 163 */ this.cycleTime = ((Integer)value).intValue(); /* 164 */ break; /* */ case 1: /* 166 */ if (mode == 0) { /* 167 */ ret = IntegerPropertyEditor.make( /* 168 */ new Property(this, index, "Cycles")); /* 169 */ } else if (mode == 1) { /* 170 */ ret = new Integer(this.cycles); /* 171 */ } else if (mode == 2) /* 172 */ this.cycles = ((Integer)value).intValue(); /* 173 */ break; /* */ case 2: /* 175 */ if (mode == 0) { /* 176 */ ret = BooleanPropertyEditor.make( /* 177 */ new Property(this, index, "Infinite Loop"), /* 178 */ "False", "True"); /* 179 */ } else if (mode == 1) { /* 180 */ ret = new Boolean(this.infiniteLoop); /* 181 */ } else if (mode == 2) { /* 182 */ this.infiniteLoop = ((Boolean)value).booleanValue(); /* */ } /* 184 */ break; /* */ case 3: /* 186 */ if (mode == 0) { /* 187 */ ret = StringPropertyEditor.make( /* 188 */ new Property(this, index, "Frame List")); /* 189 */ } else if (mode == 1) { /* 190 */ ret = new String(this.frameList); /* 191 */ } else if (mode == 2) { /* 192 */ this.frameList = ((String)value).toString().trim().toLowerCase(); /* 193 */ preprocessFrameList(this.frameList); /* */ } /* 195 */ break; /* */ default: /* 197 */ ret = super.properties(index, offset + 4, mode, value); /* */ } /* 199 */ return ret; /* */ } /* */ /* */ public String toString() { /* 203 */ String ret = super.toString() + /* 204 */ "[cycleTime " + this.cycleTime + ", cycles " + this.cycles + ","; /* 205 */ if (!this.infiniteLoop) /* 206 */ ret = ret + " not "; /* 207 */ ret = ret + "Infinite ]"; /* */ /* 209 */ return ret; /* */ } /* */ /* */ /* */ /* */ /* 215 */ private static Object classCookie = new Object(); /* */ /* */ public void saveState(Saver s) throws IOException { /* 218 */ s.saveVersion(3, classCookie); /* 219 */ super.saveState(s); /* 220 */ s.saveBoolean(this.infiniteLoop); /* 221 */ s.saveInt(this.cycleTime); /* 222 */ s.saveInt(this.cycles); /* 223 */ s.saveString(this.frameList); /* */ } /* */ /* */ public void restoreState(Restorer r) throws IOException, TooNewException { /* 227 */ switch (r.restoreVersion(classCookie)) { /* */ case 3: /* 229 */ super.restoreState(r); /* 230 */ this.infiniteLoop = r.restoreBoolean(); /* 231 */ this.cycleTime = r.restoreInt(); /* 232 */ this.cycles = r.restoreInt(); /* 233 */ this.frameList = r.restoreString(); /* 234 */ break; /* */ case 2: /* 236 */ super.restoreState(r); /* 237 */ this.cycleTime = r.restoreInt(); /* 238 */ this.cycles = r.restoreInt(); /* 239 */ this.infiniteLoop = (this.cycles == 0); /* 240 */ this.frameList = r.restoreString(); /* 241 */ break; /* */ case 1: /* 243 */ super.restoreState(r); /* */ case 0: /* 245 */ this.cycleTime = ((int)r.restoreFloat()); /* 246 */ this.cycles = r.restoreInt(); /* 247 */ this.infiniteLoop = (this.cycles == 0); /* 248 */ this.frameList = r.restoreString(); /* 249 */ break; /* */ default: /* 251 */ throw new TooNewException(); /* */ } /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\AnimateAction.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */