#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
}