#VRML V2.0 utf8 Viewpoint { position -8 0 65 } 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 ] "protos5.wrl#FSM" 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 ] "protos5.wrl#FSM_TRANSITION" EXTERNPROTO INPUT [ eventIn SFTime touched eventOut SFBool enabled eventOut SFBool isActive eventOut SFBool state_changed field SFBool state ] "protos5.wrl#INPUT" EXTERNPROTO TANK [ exposedField SFFloat transparency field SFVec3f text_position field MFString name field SFVec3f position ] "protos5.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 ] "protos5.wrl#PIPE" 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 ] "protos5.wrl#FSM_STATE" EXTERNPROTO god [ eventIn SFFloat set_clock eventOut SFBool enabled eventIn SFString state_changed field MFString behavior field SFNode from field SFNode to field SFNode fsm ] "protos5.wrl#god" EXTERNPROTO FBM [ eventIn SFFloat set_clock field SFVec3f position field MFNode functions field MFNode traces ] "fbm1proto.wrl#FBM" EXTERNPROTO SWITCH [ eventIn SFTime touched field SFVec3f position field SFBool state field MFNode behavior eventOut SFBool enabled eventOut SFBool isActive eventOut SFBool state_changed eventOut SFFloat float_data_out ] "switch.wrl#SWITCH" EXTERNPROTO REDMAN [ field SFVec3f toledo ] "forms.wrl#YOURFORM" EXTERNPROTO MFACTORY [ field MFString name field SFVec3f position field SFInt32 howMany field SFTime interval field SFInt32 vizMode field SFNode viz field SFBool initially_running field SFInt32 basenum field SFNode vizprotostgnode eventIn SFBool start eventIn SFTime setMoverPace eventOut SFNode aMover eventOut SFBool stop ] "mfactory.wrl#MFACTORY" EXTERNPROTO NEW_FBM_FUNCTION [ eventIn SFNode aMoverIn field SFNode amover eventOut SFNode aMoverOut eventIn SFFloat set_clock eventIn SFTime clock_tick eventIn SFFloat float_data1_in field MFString name field SFVec3f text_position field SFVec3f function_position field SFBool process field SFFloat transparency_value field SFFloat min_value field SFFloat tmp_transparency_value field SFFloat tmp_min_value eventOut SFFloat new_transparency eventOut SFFloat float_data1_out eventOut SFBool done ] "fbm1proto.wrl#NEW_FBM_FUNCTION" EXTERNPROTO FBM_TRACE [ field SFVec3f translation field SFRotation rotation exposedField MFNode geometry ] "fbm1proto.wrl#FBM_TRACE" EXTERNPROTO FBMPATH [ field SFVec3f position field SFVec3f translation ] "fbm1proto.wrl#FBMPATH" EXTERNPROTO PATH [ field SFString name field SFVec3f origin field SFVec3f destination field SFColor rug field SFFloat visibility eventIn SFNode arrive eventOut SFNode depart eventIn SFFloat setViz ] "path.wrl#PATH" DEF Touch TouchSensor {enabled TRUE} DEF ts1 TimeSensor {enabled FALSE } DEF ts2 TimeSensor {enabled FALSE } DEF ts3 TimeSensor {enabled FALSE } DEF ts TouchSensor { enabled TRUE } DEF tr Transform { rotation 0 1 0 1 scale 4 4 4 translation -8.5 -8 -5 children [Inline { url ["queen.wrl"] }] } Transform { children [ Transform {scale 2 2 2 translation -7 -8 7 children Inline { url ["fountain.wrl",] } }]} DEF pi1 PositionInterpolator { key [0, 1]keyValue [-6.5 -8 -5,10.5 -8 14] } DEF pi3 PositionInterpolator { key [0, 1]keyValue [-23 -8 14, 10.5 -8 14] } DEF pi2 PositionInterpolator { key [0, 1]keyValue [10.5 -8 14, -23 -8 14] } NavigationInfo { headlight TRUE type [ "EXAMINE", "ANY" ]} DEF Input INPUT {} DEF Clock TimeSensor { loop TRUE cycleInterval 0.1 enabled TRUE stopTime -1 } DEF Machine1 NEW_FBM_FUNCTION { name "M1" text_position -3.3 1 0 function_position -3 0 0 transparency_value 0.92 } DEF Machine2 NEW_FBM_FUNCTION { name "M2" text_position -0.3 1 0 function_position 0 0 0 transparency_value 0.92 } DEF Machine3 NEW_FBM_FUNCTION { name "M3" text_position 2.7 1 0 function_position 3 0 0 transparency_value 0.92 } DEF Path1 FBM_TRACE {rotation 0 1 0 -0.8 translation 0 -7.75 1 geometry Inline { url ["post.wrl"] } } DEF Path3 FBM_TRACE {rotation 0 1 0 3.14 translation -6 -7.75 18 geometry Inline { url ["post.wrl"] } } DEF Path2 FBM_TRACE { rotation 0 0 0 0 translation -6 -7.75 15.5 geometry Inline { url ["post.wrl"] } } DEF path1 PATH {name "path1" origin -6.5 -8 -5 destination 10.5 -8 14, visibility 0} DEF path3 PATH {name "path2" origin -23 -8 14 destination 10.5 -8 14, visibility 0} DEF path2 PATH {name "path3" origin 10.5 -8 14 destination -23 -8 14, visibility 0} DEF terminate PATH {name "terminate" origin 100000 0 0 destination 100000 0 0, visibility 0} DEF mGenerator MFACTORY {name "" initially_running FALSE position -12 1 -12 howMany 1 interval 1 vizMode 0 viz REDMAN {} } DEF Plant FSM { position -6 -2 -6 states [ DEF Tank1 FSM_STATE { enabled TRUE geometry DEF Tank1G TANK { text_position 0 13 0 name "s1" position -2 0 -2 } 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 13 0 name "s2" position 20 0 20 } 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 13 0 name "s3" position -20 0 20 } 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 0 -5.75 15 rotation 0 1 0 -0.4 } ] #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 0 -5.75 14 rotation 0 1 0 1.57 } 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 0 -5.75 31.5 } behavior "javascript: function set_clock(value,ts) { if (from.enabled) if (fsm.input==TRUE) {state_changed = 's2';} } " } #DEF Pipe3 DEF god1 god { fsm USE Plant from USE Tank1 to USE Tank2 behavior "javascript: function set_clock(value, ts) { if (from.enabled) { if (fsm.input==TRUE) {enabled = TRUE;} if (fsm.input==FALSE) {enabled = FALSE;} } } " } DEF god2 god { fsm USE Plant from USE Tank2 to USE Tank3 behavior "javascript: function set_clock(value, ts) { if (from.enabled) {if (fsm.input==FALSE) {enabled = TRUE;} if (fsm.input==TRUE) {enabled = FALSE;}} } " } DEF god3 god { fsm USE Plant from USE Tank3 to USE Tank2 behavior "javascript: function set_clock(value, ts) { if (from.enabled) {if (fsm.input==TRUE) {enabled = TRUE;} if (fsm.input==FALSE) {enabled = FALSE;}} } " } ] #transitions }#DEF Plant # when button is clicked, show "In = 0.9" and move to FBM1 # 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 #ROUTE god1.enabled TO ts1.enabled ROUTE god2.enabled TO ts2.enabled ROUTE god3.enabled TO ts3.enabled ROUTE Touch.touchTime TO ts1.startTime ROUTE Touch.touchTime TO ts2.startTime ROUTE Touch.touchTime TO ts3.startTime ROUTE ts1.fraction_changed TO pi1.set_fraction ROUTE ts2.fraction_changed TO pi2.set_fraction ROUTE ts3.fraction_changed TO pi3.set_fraction ROUTE pi1.value_changed TO tr.translation ROUTE pi2.value_changed TO tr.translation ROUTE pi3.value_changed TO tr.translation