Dynamic Actor State (playing tag)

#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