package NET.worlds.scape; import NET.worlds.console.Console; import NET.worlds.network.URL; import java.io.IOException; public class DispenserAction extends Action { URL wobName; Point3 center = new Point3(200.0F, 200.0F, 0.0F); float radius = 50.0F; private static Object classCookie = new Object(); @Override public Persister trigger(Event arg, Persister seqID) { WObject w = (WObject)this.getOwner(); SuperRoot ob = SuperRoot.readFile(this.wobName); if (!(ob instanceof WObject)) { Console.println(Console.message("Cant-find") + this.wobName); return null; } else { WObject wob = (WObject)ob; Point3Temp pos = Point3Temp.make( this.radius - (float)Math.random() * 2.0F * this.radius, this.radius - (float)Math.random() * 2.0F * this.radius, 0.0F ) .plus(this.center); pos.z = wob.getZ(); wob.moveTo(pos); w.getRoom().add(wob); return null; } } @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 = URLPropertyEditor.make(new Property(this, index, "wob File Name"), "wob"); } else if (mode == 1) { ret = this.wobName; } else if (mode == 2) { this.wobName = (URL)value; } break; case 1: if (mode == 0) { ret = Point3PropertyEditor.make(new Property(this, index, "Center Position For Drop")); } else if (mode == 1) { ret = new Point3(this.center); } else if (mode == 2) { this.center = new Point3((Point3)value); } break; case 2: if (mode == 0) { ret = FloatPropertyEditor.make(new Property(this, index, "Drop-position Radius")); } else if (mode == 1) { ret = new Float(this.radius); } else if (mode == 2) { this.radius = (Float)value; } break; default: ret = super.properties(index, offset + 3, mode, value); } return ret; } @Override public void saveState(Saver s) throws IOException { s.saveVersion(0, classCookie); super.saveState(s); URL.save(s, this.wobName); s.save(this.center); s.saveFloat(this.radius); } @Override public void restoreState(Restorer r) throws IOException, TooNewException { switch (r.restoreVersion(classCookie)) { case 0: super.restoreState(r); this.wobName = URL.restore(r); this.center = (Point3)r.restore(); this.radius = r.restoreFloat(); return; default: throw new TooNewException(); } } @Override public String toString() { return super.toString() + "[" + this.wobName + "]"; } }