#VRML V2.0 utf8 # # World with PROTO interfaces and Behaviors # EXTERNPROTO FSM [ eventIn SFFloat set_clock field SFVec3f position exposedField SFBool input eventIn SFString set_state field SFString start_state field MFNode states field MFNode transitions ] "protos3.wrl#FSM" EXTERNPROTO FSM_STATE [ eventIn SFFloat set_clock exposedField SFBool enabled field SFNode node field SFNode nodeG field MFNode audio exposedField MFNode geometry field MFString behavior ] "protos3.wrl#FSM_STATE" EXTERNPROTO FSM_TRANSITION [ eventIn SFFloat set_clock exposedField SFBool enabled eventOut SFString state_changed field SFNode from field SFNode to field SFNode fsm field SFNode object exposedField MFNode geometry field MFString behavior ] "protos3.wrl#FSM_TRANSITION" EXTERNPROTO INPUT [ eventIn SFTime touched eventOut SFBool enabled eventOut SFBool isActive eventOut SFBool state_changed field SFBool state ] "protos3.wrl#INPUT" EXTERNPROTO TANK [ exposedField SFFloat transparency field SFVec3f text_position field MFString name field SFVec3f position ] "protos3.wrl#TANK" EXTERNPROTO PIPE [ field SFVec3f local_frame field SFVec3f translation field SFRotation rotation field SFVec3f cylinder_translation field SFVec3f cone_translation field SFRotation cone_rotation ] "protos3.wrl#PIPE" # # World # NavigationInfo { headlight TRUE type [ "EXAMINE", "ANY" ]} DEF Clock TimeSensor {loop TRUE} DEF Input INPUT {} DEF Touch TouchSensor {enabled TRUE} DEF Plant FSM { position -6 -2 -6 states [ DEF Tank1 FSM_STATE { enabled TRUE geometry DEF Tank1G TANK { text_position -1 1 0 name "s1" position 6 5 0 } node USE Tank1 nodeG USE Tank1G behavior "javascript: function set_clock(value,ts) { if(node.enabled) nodeG.set_transparency = 0.0; else nodeG.set_transparency = 0.6;}" } #DEF Tank1 DEF Tank2 FSM_STATE { geometry DEF Tank2G TANK { text_position -1.5 1 0 name "s2" position 9 0 0 } node USE Tank2 nodeG USE Tank2G behavior "javascript: function set_clock(value,ts) { if(node.enabled) nodeG.set_transparency = 0.0; else nodeG.set_transparency = 0.6;}" } #DEF Tank2 DEF Tank3 FSM_STATE { geometry DEF Tank3G TANK { text_position -1.5 1 0 name "s3" position 3.0 0 0 } node USE Tank3 nodeG USE Tank3G behavior "javascript: function set_clock(value,ts) { if(node.enabled) nodeG.set_transparency = 0.0; else nodeG.set_transparency = 0.6;}" } #DEF Tank3 ] #states start_state "s1" transitions [ DEF Pipe1 FSM_TRANSITION { fsm USE Plant from USE Tank1 to USE Tank2 geometry Transform { children [ DEF Pipe1G PIPE { local_frame 8 2.5 0 rotation 0 0 1 0.785 cylinder_translation 0 1 0 cone_rotation 0 0 1 3.14 } ] #children } #Transform behavior "javascript: function set_clock(value,ts) { if (from.enabled) { if (fsm.input==TRUE) state_changed = 's2';} } " } #DEF Pipe1 DEF Pipe2 FSM_TRANSITION { fsm USE Plant from USE Tank2 to USE Tank3 geometry DEF Pipe2G PIPE { local_frame 6 -0.75 0 translation 0.5 0 0 rotation 0 0 1 1.571 cone_translation 0 1 0 } behavior "javascript: function set_clock(value,ts) { if (from.enabled) { if (fsm.input==FALSE) state_changed = 's3';} } " } #DEF Pipe2 DEF Pipe3 FSM_TRANSITION { fsm USE Plant from USE Tank3 to USE Tank2 geometry DEF Pipe3G PIPE { local_frame 6 0.75 0 translation -0.5 0 0 rotation 0 0 1 -1.571 cone_translation 0 1 0 } behavior "javascript: function set_clock(value,ts) { if (from.enabled) if (fsm.input==TRUE) state_changed = 's2'; } " } #DEF Pipe3 ] #transitions }#DEF Plant # # Routes # ROUTE Clock.fraction_changed TO Plant.set_clock ROUTE Touch.touchTime TO Input.touched ROUTE Input.state_changed TO Plant.set_input ROUTE Tank1.enabled_changed TO Pipe1.set_enabled ROUTE Tank2.enabled_changed TO Pipe2.set_enabled ROUTE Tank3.enabled_changed TO Pipe3.set_enabled ROUTE Pipe1.state_changed TO Plant.set_state ROUTE Pipe2.state_changed TO Plant.set_state ROUTE Pipe3.state_changed TO Plant.set_state