##:@* slide set ## ##@ extern @proto @vr-proto-slide-pvl-slide.wrl @proto @vr-proto-slide-effects-transitions.wrl ##@ proto PROTO SlideSet [ exposedField SFInt32 touched 0 exposedField MFNode slides [] exposedField SFFloat width 0 exposedField SFFloat height 0 exposedField SFBool auto TRUE exposedField SFString view "" exposedField SFVec3f position 0 0 10 exposedField SFVec3f location 0 0 0 exposedField SFRotation rotation 0 0 1 0 exposedField SFVec3f scale 1 1 1 exposedField SFBool show FALSE eventIn SFTime previous eventIn SFTime next eventIn SFInt32 hide eventOut SFInt32 update eventOut SFInt32 number eventOut SFInt32 level eventOut SFString id eventOut SFString direction exposedField SFNode backdrop NULL exposedField SFNode background NULL exposedField MFColor bgColor [ 0.4 0.4 0.8 ] ] { ##@ viewpoint DEF viewpoint Viewpoint { position 0 0 10 } ##@ body DEF switch Switch { whichChoice 0 choice [ DEF root Transform { translation IS location scale IS scale rotation IS rotation children [ DEF body Transform { translation 0 0 -25 scale 2.2 1.8 0.5 children [ DEF decoration slide-background { } DEF SWITCH Switch { whichChoice 0 choice IS slides } ] } ] } ] } ##@ script DEF SCRIPT Script { directOutput TRUE field SFNode me USE SCRIPT field SFNode body USE body field SFBool show IS show field SFBool auto IS auto field SFString view IS view field SFNode background IS background field SFNode decoration USE decoration field SFNode viewpoint USE viewpoint field SFVec3f position IS position field SFInt32 nextSlide 0 field SFInt32 effect 0 field SFNode effects TransitionEffects{} field SFNode showTimeSensor TimeSensor{} eventIn SFBool showTimer field SFNode hideTimeSensor TimeSensor{} eventIn SFBool hideTimer field SFNode xswitch USE switch field SFNode slides USE SWITCH eventIn SFTime next IS next eventIn SFTime prev IS previous eventIn SFInt32 hide IS hide eventOut SFInt32 update IS update eventOut SFInt32 number IS number eventOut SFString id IS id eventOut SFInt32 level IS level eventOut SFString direction IS direction ##@ functions url "vrmlscript: function initialize() { Browser.addRoute(showTimeSensor,'isActive', me, 'showTimer'); Browser.addRoute(hideTimeSensor,'isActive', me, 'hideTimer'); viewpoint.set_bind = TRUE; setBgColor(); // AE if (auto) { x = 1.1*Browser.windowAspect; y = 1.18*1.8; z=0.5; body.scale = new SFVec3f(x,y,z); } id = 'start'; number = 0; direction = 'forward'; } function setBgColor() { var currSlide = slides.whichChoice; var slide = slides.choice[currSlide]; if(slide.hasBgColor) { background.skyColor = slide.bgColor; } decoration.whichChoice = slide.bgChoice; //viewpoint.position = position; //viewpoint.set_bind = TRUE; } ##@ hide function hide(value) { xswitch.whichChoice = value; } ##@ next function next(value,time) { var nrSlides = slides.choice.length; var currSlide = slides.whichChoice; var slide = slides.choice[currSlide]; var currLevel = slide.showLevel; var toon = show; direction = 'forward'; if(currLevel+1 >= slide.nrLevels) { if(currSlide+1 >= nrSlides) { level = 0; nextSlide = 0; } else { level = 0; nextSlide = currSlide + 1; } number = nextSlide; slides.choice[nextSlide].showLevel = 0; id = slides.choice[nextSlide].id; toon = show || slides.choice[nextSlide].show; if (toon) { hideTimeSensor.startTime = time; hideTimeSensor.stopTime = time + 3; } else { slides.whichChoice = nextSlide; } update = 1; } else { slide.showLevel = currLevel+1; level = currLevel + 1; update = 2; } } ##@ previous function prev(value,time) { var nrSlides = slides.choice.length; var currSlide = slides.whichChoice; var slide = slides.choice[currSlide]; var currLevel = slide.showLevel; var toon = show; direction = 'backward'; if(currLevel-1 <= -1) { if(currSlide-1 <= -1) { nextSlide = nrSlides - 1; } else { nextSlide = currSlide - 1; } number = nextSlide; slides.choice[nextSlide].showLevel = slides.choice[nextSlide].nrLevels - 1; id = slides.choice[nextSlide].id; toon = show || slides.choice[nextSlide].show; if (toon) { hideTimeSensor.startTime = time; hideTimeSensor.stopTime = time + 3; } else { slides.whichChoice = nextSlide; } update = 3; } else { slide.showLevel = currLevel-1; level = slide.showLevel; update = 4; } } ##@ show function showTimer(value,time) { var currSlide = slides.whichChoice; var slide = slides.choice[currSlide]; if(value) { if(slide.showEffect == -1) { effect = Math.round(Math.random()* effects.show.length); if(effect >= effects.show.length) { effect=0; } } else { effect = slide.showEffect; } Browser.addRoute(effects.show[effect], 'translation', slide, 'translation'); Browser.addRoute(effects.show[effect], 'rotation', slide, 'rotation'); Browser.addRoute(showTimeSensor, 'fraction_changed', effects.show[effect], 'set_fraction'); effects.show[effect].set_fraction = 0.0; } else { Browser.deleteRoute(effects.show[effect], 'translation', slide, 'translation'); Browser.deleteRoute(effects.show[effect], 'rotation', slide, 'rotation'); Browser.deleteRoute(showTimeSensor, 'fraction_changed', effects.show[effect], 'set_fraction'); } } ##@ hide function hideTimer(value,time) { var currSlide = slides.whichChoice; var slide = slides.choice[currSlide]; if(value) { if(slide.hideEffect == -1) { effect = Math.round(Math.random()* effects.hide.length); if(effect >= effects.hide.length) { effect=0; } } else { effect = slide.hideEffect; } Browser.addRoute(effects.hide[effect], 'translation', slide, 'translation'); Browser.addRoute(effects.hide[effect], 'rotation', slide, 'rotation'); Browser.addRoute(hideTimeSensor, 'fraction_changed', effects.hide[effect], 'set_fraction'); effects.hide[effect].set_fraction = 0.0; } else { Browser.deleteRoute(effects.hide[effect], 'translation', slide, 'translation'); Browser.deleteRoute(effects.hide[effect], 'rotation', slide, 'rotation'); Browser.deleteRoute(hideTimeSensor, 'fraction_changed', effects.hide[effect], 'set_fraction'); // Start show-animation slides.whichChoice = nextSlide; setBgColor(); showTimeSensor.startTime = time; showTimeSensor.stopTime = time + 3; } } " } } ##