//
import vrml.external.field.*; import vrml.external.Node; import vrml.external.Browser; import vrml.external.exception.*; import improv.actor.*; import improv.actor.behavior.*; import improv.event.*; import improv.misc.*; import improv.util.gui.*; import improv.util.*; import java.applet.Applet; public class Actors extends Applet implements EventOutObserver,ImprovObserver { private Actor actor; private Browser browser; private NYUSplashScreen splash; private Node timeNode; private LayerPanel panel; private ImprovEditor editor; public void init() { browser = Browser.getBrowser(this); splash = new NYUSplashScreen(this); try { timeNode = browser.getNode("Time"); EventOut time = timeNode.getEventOut("time"); time.advise(this,null); } catch(InvalidNodeException e) { System.out.println("Problem: "+e); } addActors(); } public void addActors() { } public Actor addActor(String name) { return actor = new Actor(name, splash); } public void setActor(Actor actor) { this.actor = actor; } public void setBehavior(String state) { actor.setBehavior(state); } public void setProperty(String property, float value) { actor.setProperty(property,value); } public void showPanel() { (panel = new LayerPanel(actor)).show(); } public void showEditor() { (editor = new ImprovEditor(actor)).show(); } /** handleImprovEvent is implemented as part of the ImprovObserver interface: - called by any ImprovObservable object to which this VRMLManager is an observer, - usually not called directly, but is used by Improv to update the VRML scene. */ public void handleImprovEvent(ImprovEvent evt) { switch(evt.id) { case ImprovTypes.SFObjectCHANNEL: ((EventInSFNode)evt.arg).setValue((Node)(((SFObjectChannel)evt.target).getValue())); break; case ImprovTypes.SFStringCHANNEL: ((EventInSFString)evt.arg).setValue(((SFStringChannel)evt.target).getValue()); break; case ImprovTypes.SFBoolCHANNEL: ((EventInSFBool)evt.arg).setValue(((SFBoolChannel)evt.target).getValue()); break; case ImprovTypes.SFFloatCHANNEL: ((EventInSFFloat)evt.arg).setValue(((SFFloatChannel)evt.target).getValue()); break; case ImprovTypes.SFInt32CHANNEL: ((EventInSFInt32)evt.arg).setValue(((SFInt32Channel)evt.target).getValue()); break; case ImprovTypes.SFVec2fCHANNEL: ((EventInSFVec2f)evt.arg).setValue(((SFVec2fChannel)evt.target).getValue()); break; case ImprovTypes.SFVec3fCHANNEL: if(evt.arg instanceof EventInSFVec3f) ((EventInSFVec3f)evt.arg).setValue(((SFVec3fChannel)evt.target).getValue()); else ((EventInSFColor)evt.arg).setValue(((SFVec3fChannel)evt.target).getValue()); break; case ImprovTypes.SFRotationCHANNEL: SFRotationChannel chan = (SFRotationChannel)evt.target; ((EventInSFRotation)evt.arg).setValue(chan.getValue()); if(chan.xyzArg!=null) ((EventInSFVec3f)chan.xyzArg).setValue(chan.getXYZ()); break; case ImprovTypes.MFObjectCHANNEL: Object nodes[] = ((MFObjectChannel)evt.target).getValue(); for(int i=0;i