VRML: Slider


#VRML V2.0 utf8

PROTO Slider [ 
	      field SFFloat mult 1  # multiply [0..1] output by this much
	      field SFVec3f position 0 0 0  # position slider on screen
	      eventOut SFFloat value_changed  # output slider value [0..mult]
	      eventOut SFTime timeValue_changed  # output slider value [0..mult] as SFTime
	     ]
{
   Group {
      children [
	 DEF WHERE ProximitySensor { size 1000 1000 1000 }
	 DEF HUD Transform {
	    children DEF SCREENPLACE Transform {
	       translation IS position
	       scale .01 .01 .01
	       children Group {
		  children [
		     DEF SLIDER PlaneSensor { 
			minPosition -10 0  
			maxPosition 10 0 
		     }
		     DEF SLIDEE Transform {
			children Shape {
			   geometry IndexedFaceSet {
			      coord Coordinate { 
				 point [ 1 1 0, -1 1 0, -1 -1 0, 1 -1 0 ] 
			      }
			      coordIndex [ 0 1 2 3 ]
			   }
			}
		     }
		    ]
	       }
	    }
	 }
	 DEF SCRIPT Script {
	    eventIn SFVec3f position_changed
	    eventOut SFFloat value_changed IS value_changed
	    eventOut SFTime timeValue_changed IS timeValue_changed
	    field SFFloat mult IS mult
	    url "vrmlscript:

             // output a value based on slider's x translation
             function position_changed(val) {
               value_changed = (val.x+10)/20 * mult;
               timeValue_changed = (val.x+10)/20 * mult;
             }

            "
	 }
	]
   }
   
   ROUTE WHERE.position_changed TO HUD.translation
   ROUTE WHERE.orientation_changed TO HUD.rotation
   ROUTE SLIDER.translation_changed TO SLIDEE.translation
   ROUTE SLIDER.translation_changed TO SCRIPT.position_changed
}


mrl