Dynamic Avoidance

#VRML V2.0 utf8

NavigationInfo { type "EXAMINE" }
Viewpoint { position 0 10 10  orientation 1 0 0 -.8 }

EXTERNPROTO AvoidBoxChaser [
	      field SFVec3f position
	      field SFVec3f goal
	      field SFFloat speed
	      field MFVec3f obstacles
	      field SFInt32 index
	      eventIn SFVec3f set_goal
	      eventIn MFVec3f obstacles_changed
	      eventOut MFFloat report_position
	     ] "avoidBoxChaser.wrl"

EXTERNPROTO TouchFloor [ field SFVec3f scale 
			 field SFColor color ] "touchFloor.wrl"


DEF TOUCH TouchFloor { scale 5 1 5  color .2 .2 .2 }

DEF CHASER0 AvoidBoxChaser { index 0  position 5 0 -3  speed .5 }
DEF CHASER1 AvoidBoxChaser { index 1  position -5 0 -5  speed .5 }
DEF CHASER2 AvoidBoxChaser { index 2  position -5 0 4  speed .5 }
DEF CHASER3 AvoidBoxChaser { index 3  position -3 0 4  speed .5 }
DEF CHASER4 AvoidBoxChaser { index 4  position -1 0 1  speed .5 }
DEF CHASER5 AvoidBoxChaser { index 5  position -2 0 2  speed .5 }
DEF CHASER6 AvoidBoxChaser { index 6  position -3 0 -2  speed .5 }
DEF CHASER7 AvoidBoxChaser { index 7  position -4 0 3  speed .5 }
DEF CHASER8 AvoidBoxChaser { index 8  position -5 0 -3  speed .5 }

DEF SCRIPT Script {
   eventIn SFTime beat
   eventIn MFFloat update_position
   eventOut MFVec3f chasers_moved
   field MFVec3f chaserPositions [ ]
   field SFInt32 numChasers 9
   url "vrmlscript:

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 CHASER5.report_position TO SCRIPT.update_position
ROUTE CHASER6.report_position TO SCRIPT.update_position
ROUTE CHASER7.report_position TO SCRIPT.update_position
ROUTE CHASER8.report_position TO SCRIPT.update_position

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.chasers_moved TO CHASER5.obstacles_changed
ROUTE SCRIPT.chasers_moved TO CHASER6.obstacles_changed
ROUTE SCRIPT.chasers_moved TO CHASER7.obstacles_changed
ROUTE SCRIPT.chasers_moved TO CHASER8.obstacles_changed



mrl