#VRML V2.0 utf8 NavigationInfo { type "EXAMINE" } Viewpoint { position 0 10 10 orientation 1 0 0 -.8 } EXTERNPROTO TagChaser [ field SFVec3f position field SFVec3f goal field SFFloat speed field MFVec3f obstacles field SFInt32 index field SFFloat turnLimit field SFVec3f scale field SFBool it field SFInt32 itIndex eventIn SFVec3f set_goal eventIn MFVec3f obstacles_changed eventIn SFInt32 set_itIndex eventOut MFFloat report_position eventOut SFInt32 itIndex_changed ] "tagChaser.wrl" EXTERNPROTO TouchFloor [ field SFVec3f scale field SFColor color ] "touchFloor.wrl" DEF TOUCH TouchFloor { scale 5 1 5 color .2 .2 .2 } DEF CHASER0 TagChaser { it TRUE index 0 position 5 0 -3 speed 1 turnLimit .75 scale .5 .5 .5 } DEF CHASER1 TagChaser { itIndex 0 index 1 position -5 0 -5 speed 1 turnLimit .75 scale .5 .5 .5 } DEF CHASER2 TagChaser { itIndex 0 index 2 position -5 0 4 speed 1 turnLimit .75 scale .5 .5 .5 } DEF CHASER3 TagChaser { itIndex 0 index 3 position -3 0 4 speed 1 turnLimit .75 scale .5 .5 .5 } DEF CHASER4 TagChaser { itIndex 0 index 4 position -1 0 1 speed 1 turnLimit .75 scale .5 .5 .5 } DEF SCRIPT Script { eventIn SFTime beat eventIn MFFloat update_position eventIn SFInt32 set_itIndex eventOut MFVec3f chasers_moved eventOut SFInt32 itIndex_changed field MFVec3f chaserPositions [ ] field SFInt32 numChasers 5 url "vrmlscript: function set_itIndex(val) { itIndex_changed = val; } function initialize() { chaserPositions = new MFVec3f(); } function update_position(val) { i = val[0]; x = val[1]; y = val[2]; z = val[3]; chaserPositions[i] = new SFVec3f(x, y, z); } function beat(val) { chasers_moved = chaserPositions; } " } DEF SIMCLOCK TimeSensor { loop TRUE } ROUTE CHASER0.report_position TO SCRIPT.update_position ROUTE CHASER1.report_position TO SCRIPT.update_position ROUTE CHASER2.report_position TO SCRIPT.update_position ROUTE CHASER3.report_position TO SCRIPT.update_position ROUTE CHASER4.report_position TO SCRIPT.update_position ROUTE CHASER0.itIndex_changed TO SCRIPT.set_itIndex ROUTE CHASER1.itIndex_changed TO SCRIPT.set_itIndex ROUTE CHASER2.itIndex_changed TO SCRIPT.set_itIndex ROUTE CHASER3.itIndex_changed TO SCRIPT.set_itIndex ROUTE CHASER4.itIndex_changed TO SCRIPT.set_itIndex ROUTE SIMCLOCK.time TO SCRIPT.beat ROUTE SCRIPT.chasers_moved TO CHASER0.obstacles_changed ROUTE SCRIPT.chasers_moved TO CHASER1.obstacles_changed ROUTE SCRIPT.chasers_moved TO CHASER2.obstacles_changed ROUTE SCRIPT.chasers_moved TO CHASER3.obstacles_changed ROUTE SCRIPT.chasers_moved TO CHASER4.obstacles_changed ROUTE SCRIPT.itIndex_changed TO CHASER0.set_itIndex ROUTE SCRIPT.itIndex_changed TO CHASER1.set_itIndex ROUTE SCRIPT.itIndex_changed TO CHASER2.set_itIndex ROUTE SCRIPT.itIndex_changed TO CHASER3.set_itIndex ROUTE SCRIPT.itIndex_changed TO CHASER4.set_itIndex
mrl