package NET.worlds.scape; import NET.worlds.console.Console; import java.io.IOException; import java.text.MessageFormat; public class Toggle extends TriggeredSwitchableBehavior implements Persister, FrameHandler, MouseDownHandler, BumpHandler { protected boolean toggleBumpable; protected boolean toggleVisible; protected WObject o; protected boolean initialized = false; public Toggle() { this.trigger = new String("none"); this.externalTriggerTag = new String(""); this.toggleBumpable = true; this.toggleVisible = true; } @Override public void ExternalTrigger(Trigger trigger_source, int sequence_no, int event_no) { this.trigger_source = trigger_source; this.sequence_no = sequence_no; this.event_no = event_no; this.toggle(); } public void toggle() { if (this.toggleBumpable) { this.o.setBumpable(true); } else { this.o.setBumpable(false); } if (this.toggleVisible) { this.o.setVisible(true); } else { this.o.setVisible(false); } if (this.trigger_source != null) { this.trigger_source.registerFinishedTriggerTag(this.sequence_no, this.event_no); } } @Override public boolean handle(FrameEvent e) { if (!this.initialized) { this.o = e.receiver; this.initialized = true; } return true; } @Override public boolean handle(MouseDownEvent e) { if (this.enabled && this.trigger.equals("click")) { this.toggle(); } return true; } @Override public boolean handle(BumpEventTemp e) { if (this.enabled && this.trigger.equals("bump")) { this.toggle(); } 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 = StringPropertyEditor.make(new Property(this, index, "Trigger")); } else if (mode == 1) { ret = new String(this.trigger); } else if (mode == 2) { this.trigger = ((String)value).toString().trim(); if (this.trigger.equals("external")) { Trigger.TriggeredSwitchableBehaviorList[Trigger.TriggeredSwitchableBehaviorListCount] = this; Trigger.TriggeredSwitchableBehaviorListCount++; } } break; case 1: if (mode == 0) { ret = StringPropertyEditor.make(new Property(this, index, "External Trigger Tag")); } else if (mode == 1) { ret = new String(this.externalTriggerTag); } else if (mode == 2) { this.externalTriggerTag = ((String)value).toString().trim(); } break; case 2: if (mode == 0) { ret = BooleanPropertyEditor.make(new Property(this, index, "Toggle Bumpable"), "No", "Yes"); } else if (mode == 1) { ret = new Boolean(this.toggleBumpable); } else if (mode == 2) { this.toggleBumpable = (Boolean)value; } break; case 3: if (mode == 0) { ret = BooleanPropertyEditor.make(new Property(this, index, "Toggle Visible"), "No", "Yes"); } else if (mode == 1) { ret = new Boolean(this.toggleVisible); } else if (mode == 2) { this.toggleVisible = (Boolean)value; } break; default: ret = super.properties(index, offset + 4, mode, value); } return ret; } @Override public String toString() { return super.toString() + "[" + " enabled " + this.enabled + ", trigger " + this.trigger + ", externalTriggerTag " + this.externalTriggerTag + "]"; } @Override public void saveState(Saver s) throws IOException { s.saveString(this.trigger); s.saveString(this.externalTriggerTag); s.saveBoolean(this.toggleBumpable); s.saveBoolean(this.toggleVisible); } @Override public void restoreState(Restorer r) throws IOException { this.trigger = r.restoreString(); if (this.trigger.equals("external")) { Trigger.TriggeredSwitchableBehaviorList[Trigger.TriggeredSwitchableBehaviorListCount] = this; Trigger.TriggeredSwitchableBehaviorListCount++; } this.externalTriggerTag = r.restoreString(); this.toggleBumpable = r.restoreBoolean(); this.toggleVisible = r.restoreBoolean(); } @Override public void postRestore(int version) { String name = this.getName(); String arg1 = name == null ? "" : name; SuperRoot owner = this.getOwner(); String oname = ""; if (owner != null) { oname = owner.getName(); } String arg2 = oname == null ? "" : oname; Object[] arguments = new Object[]{new String(arg1), new String(arg2)}; Console.println(MessageFormat.format(Console.message("Toggle-obs"), arguments)); } }