package NET.worlds.scape; import java.io.IOException; public class PostspinBehavior extends SpinBehavior implements FrameHandler { private float xCenter; private float yCenter; private float zCenter; private static Object classCookie = new Object(); public PostspinBehavior(float x, float y, float z, float cycleTime) { this(x, y, z, 0.0F, 0.0F, 1.0F, cycleTime); } public PostspinBehavior(float x, float y, float z, float ax, float ay, float az) { this(x, y, z, ax, ay, az, 5.0F); } public PostspinBehavior(float x, float y, float z, float ax, float ay, float az, float cycleTime) { super(cycleTime, ax, ay, az); this.xCenter = x; this.yCenter = y; this.zCenter = z; } public PostspinBehavior() { } public float getXCenter() { return this.xCenter; } public float getYCenter() { return this.yCenter; } public float getZCenter() { return this.zCenter; } public Point3Temp getCenter() { return Point3Temp.make(this.xCenter, this.yCenter, this.zCenter); } public void setXCenter(float c) { this.xCenter = c; } public void setYCenter(float c) { this.yCenter = c; } public void setZCenter(float c) { this.zCenter = c; } public void setCenter(Point3Temp center) { this.xCenter = center.x; this.yCenter = center.y; this.zCenter = center.z; } @Override public boolean handle(FrameEvent e) { if (this.enabled && this.cycleTime > 0.0F) { e.receiver.moveBy(-this.xCenter, -this.yCenter, -this.zCenter); e.receiver.postspin(this.ax, this.ay, this.az, 0.36F * e.dt / this.cycleTime); e.receiver.moveBy(this.xCenter, this.yCenter, this.zCenter); } return true; } @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 = Point3PropertyEditor.make(new Property(this, index, "Center")); } else if (mode == 1) { ret = new Point3(this.getCenter()); } else if (mode == 2) { this.setCenter((Point3)value); } break; default: ret = super.properties(index, offset + 1, mode, value); } return ret; } @Override public String toString() { return super.toString() + "[center " + this.getCenter() + ", axis " + this.getAxis() + ", cycleTime " + this.cycleTime + ", enabled " + this.enabled + "]"; } @Override public void saveState(Saver s) throws IOException { s.saveVersion(0, classCookie); super.saveState(s); s.saveFloat(this.xCenter); s.saveFloat(this.yCenter); s.saveFloat(this.zCenter); } @Override public void restoreState(Restorer r) throws IOException, TooNewException { switch (r.restoreVersion(classCookie)) { case 0: super.restoreState(r); this.xCenter = r.restoreFloat(); this.yCenter = r.restoreFloat(); this.zCenter = r.restoreFloat(); return; default: throw new TooNewException(); } } }