Open or Close on Rollover

Open or Close on Rollover

#VRML V2.0 utf8

Shape { 
   appearance Appearance { material Material { diffuseColor 1 0 0 } }
   geometry Sphere {}
}		

DEF OPENME Transform {
   translation 0 0 1.5
   center -1 0 0
   children [
      DEF TOUCH TouchSensor {}
      Shape { 
	 appearance Appearance { material Material {} }
	 geometry Box { size 2 2 .1 }
      }		
     ]
}

DEF TIMER TimeSensor { cycleInterval 2 }

DEF OPENER OrientationInterpolator {
   key [ 0 1 ]
   keyValue [ 0 1 0  0, 0 1 0  -1.75 ]
}

DEF SCRIPT Script {	
   eventIn SFBool isOver
   eventIn SFBool working
   eventOut MFRotation keyValue
   eventOut SFTime moveNow
   field SFBool isOpen FALSE
   field SFBool changing FALSE
   url "vrmlscript:
function isOver(val, ts) {
   if(val && !changing) {
      moveNow = ts;
      closed = new SFRotation(0, 1, 0, 0);
      open = new SFRotation(0, 1, 0, -1.75);
      if(isOpen) { 
	 vals = new MFRotation(open, closed);
	 keyValue = vals;
	 isOpen = FALSE;
      }
      else { 
	 vals = new MFRotation(closed, open);
	 keyValue = vals;
	 isOpen = TRUE;
      }
   }
}

function working(val) {
   changing = val;
}"
}

ROUTE TOUCH.isOver TO SCRIPT.isOver
ROUTE SCRIPT.keyValue TO OPENER.keyValue
ROUTE SCRIPT.moveNow TO TIMER.startTime
ROUTE TIMER.fraction_changed TO OPENER.set_fraction
ROUTE OPENER.value_changed TO OPENME.rotation
ROUTE TIMER.isActive TO SCRIPT.working


mrl