package NET.worlds.scape; import NET.worlds.core.Std; import java.io.IOException; public class WaitAction extends Action { float duration = 1.0F; private static Object classCookie = new Object(); public WaitAction() { } public WaitAction(float duration) { this.duration = duration; } @Override public Persister trigger(Event evt, Persister seqID) { long evttime = 0L; if (evt == null) { evttime = Std.getFastTime(); } else { evttime = evt.time; } if (seqID == null) { seqID = new WaitActionState(evttime + (long)(1000.0F * this.duration)); } if (!((WaitActionState)seqID).run(evttime)) { seqID = null; } return seqID; } @Override public Object properties(int index, int offset, int mode, Object value) throws NoSuchPropertyException { Object ret = null; switch (index - offset) { case 0: if (mode == 0) { ret = FloatPropertyEditor.make(new Property(this, index, "Duration (s)")); } else if (mode == 1) { ret = new Float(this.duration); } else if (mode == 2) { this.duration = (Float)value; } break; default: ret = super.properties(index, offset + 1, mode, value); } return ret; } @Override public void saveState(Saver s) throws IOException { s.saveVersion(2, classCookie); super.saveState(s); s.saveFloat(this.duration); } @Override public void restoreState(Restorer r) throws IOException, TooNewException { switch (r.restoreVersion(classCookie)) { case 0: r.setOldFlag(); super.restoreState(r); this.duration = r.restoreInt(); break; case 1: r.setOldFlag(); super.restoreState(r); this.duration = r.restoreFloat(); r.restoreLong(); break; case 2: super.restoreState(r); this.duration = r.restoreFloat(); break; default: throw new TooNewException(); } } @Override public String toString() { return super.toString() + "[" + this.duration + " s]"; } }