package NET.worlds.scape; import NET.worlds.core.Std; import java.io.IOException; public abstract class SlidePropertyAction extends SetPropertyAction { private float _duration = 0.0F; private int _startMilliTime = 0; private static Object classCookie = new Object(); protected boolean slide() { return this._duration != 0.0F; } protected void start() { this._startMilliTime = Std.getFastTime(); } protected float fraction() { return (Std.getFastTime() - this._startMilliTime) / (1000.0F * this._duration); } @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")); } else { if (mode == 1) { return new Float(this._duration); } 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(1, classCookie); super.saveState(s); s.saveFloat(this._duration); } @Override public void restoreState(Restorer r) throws IOException, TooNewException { switch (r.restoreVersion(classCookie)) { case 1: super.restoreState(r); this._duration = r.restoreFloat(); return; default: throw new TooNewException(); } } }