#VRML V2.0 utf8
DEF Tf Transform {}
DEF TiS TimeSensor {
cycleInterval 5
loop TRUE
}
DEF PI PositionInterpolator {
key [ 0.0, 1.0 ]
keyValue [
0 0 0
2 3 5
]
}
ROUTE TiS.fraction_changed TO PI.set_fraction
ROUTE PI.value_changed TO Tf.translation
set_fraction | 0.0 | 0.25 | 0.5 | 0.75 | 1.0 |
---|---|---|---|---|---|
value_changed | ( 0, 0, 0) | ( 0.5, 0.75, 1.25) | ( 1.0, 1.5, 2.5) | ( 1.5, 2.25, 3.75) | ( 2, 3, 5) |
loop TRUE | loop FALSE |
![]() |
![]() |
DEF Sc Script {
eventIn SFTime resetCounter
eventIn SFBool repeat
eventOut SFTime restartTime
field SFInt32 times 3 # 繰り返す回数
field SFInt32 counter 0 # 繰り返した回数
url "javascript:
function resetCounter () {
counter = 0;
}
function repeat (active,et) {
if (!active) {
counter++;
if ( counter < times ) restartTime = et;
}
}
"
}
DEF Sc Script {
eventOut SFTime startTime
url "javascript:
function initialize () {
var d = new Date();
var t = d.getTime();
if ( t > 1072224000000 ) t /= 1000;
startTime = t + 2;
}
"
}
DEF Sc Script {
eventIn SFTime enterTime
eventOut SFTime startTime
field SFTime delay 2
url "javascript:
function enterTime (t) {
startTime = t + delay;
}
"
}
ROUTE PrS.enterTime TO TiS.startTime
DEF Sc Script {
eventIn SFTime pause
eventIn SFFloat set_fraction
eventOut SFFloat fraction_out
field SFBool active TRUE
field SFFloat oldF 0
url "javascript:
function pause () {
active = !active;
}
function set_fraction (f) {
var df = f - oldF;
if ( df < 0 ) df++;
oldF = f;
if (active) {
fraction_out += df;
if ( fraction_out > 1 ) fraction_out--;
}
}
"
}
DEF Sc Script {
eventIn SFVec3f adjustSpeed
eventIn SFFloat set_fraction
eventOut SFFloat fraction_out
field SFFloat speed 0
field SFFloat oldF 0
url "javascript:
function adjustSpeed (vec) {
speed = vec.x;
}
function set_fraction (f) {
var df = f - oldF;
if ( df < 0 ) df++;
oldF = f;
fraction_out += df * speed;
if ( fraction_out > 1 ) fraction_out--;
else if ( fraction_out < 0 ) fraction_out++;
}
"
}