diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/movie15/animation.js')
-rw-r--r-- | Master/texmf-dist/doc/latex/movie15/animation.js | 100 |
1 files changed, 51 insertions, 49 deletions
diff --git a/Master/texmf-dist/doc/latex/movie15/animation.js b/Master/texmf-dist/doc/latex/movie15/animation.js index 7c870a1b498..99829252365 100644 --- a/Master/texmf-dist/doc/latex/movie15/animation.js +++ b/Master/texmf-dist/doc/latex/movie15/animation.js @@ -1,52 +1,63 @@ -/////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////// // // animation.js // // JavaScript for use with `3Djscript' option of \includemovie // -// * Activates animation embedded in the u3d file. -// * Arrow keys `Down', `Up' can be used for speeding up and slowing -// down a running animation, key `Home' for reverting to the default -// speed. +// 888888888888888888888888888888888888888888888888888888888888 +// * 88 Set includemovie-option `repeat=0', to take effect !!! 88 +// 888888888888888888888888888888888888888888888888888888888888 // -/////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////// -// adjustable parameters -/////////////////////////////////////////////////////// -var rate = 1; // 1 --> use original speed as default -var palindrome = true; // true --> play forth and back -/////////////////////////////////////////////////////// +// * Activates keyframe animation embedded in the u3d file. +// * Arrow keys `Down', `Up' can be used for speeding up and +// slowing down a running animation, key `Home' for reverting +// to the default speed. +// +// * Adjustable parameters: +var rate = 1; // 1 --> use original speed as default +var palindrome = true; // true --> play forth and back +// +///////////////////////////////////////////////////////////////// //get the first animation in the scene var myAnim = scene.animations.getByIndex(0); -rate = Math.abs(rate); -myAnim.speed = rate; -myAnim.forward = true; +myAnim.wallTime = 0; +myAnim.speed = 1; +myAnim.myLength = myAnim.endTime - myAnim.startTime; scene.activateAnimation(myAnim); +//method to set animation speed +myAnim.setSpeed = function (speed) { + speed = Math.abs(speed); + this.wallTime /= speed/this.speed; //correct the walltime + this.speed = speed; +}; + +//method to change animation speed by a factor +myAnim.changeSpeed = function (mult) { + this.wallTime /= mult; //correct the walltime + this.speed *= mult; +}; + +//set default speed +myAnim.setSpeed(rate); + //menu items -runtime.addCustomMenuItem( - "faster", "Faster (Key Up)", "default", 0 -); -runtime.addCustomMenuItem( - "slower", "Slower (Key Down)", "default", 0 -); -runtime.addCustomMenuItem( - "default", "Default Speed (Key Home)", "default", 0 -); +runtime.addCustomMenuItem("faster", "Faster (Key Up)", "default", 0); +runtime.addCustomMenuItem("slower", "Slower (Key Down)", "default", 0); +runtime.addCustomMenuItem("default", "Default Speed (Key Home)", "default", 0); //menu handler to control speed menuEventHandler = new MenuEventHandler(); menuEventHandler.onEvent = function(e) { if (e.menuItemName == "faster") { - myAnim.speed *= 1.25; + myAnim.changeSpeed(1.25); } else if (e.menuItemName == "slower") { - myAnim.speed /= 1.25; + myAnim.changeSpeed(1/1.25); } else if (e.menuItemName == "default") { - myAnim.speed = rate; + myAnim.setSpeed(rate); } }; runtime.addEventHandler(menuEventHandler); @@ -57,15 +68,15 @@ keyEventHandler.onKeyDown = true; keyEventHandler.onEvent = function(e) { switch(e.characterCode) { case 30: //key up - myAnim.speed *= 1.05; + myAnim.changeSpeed(1.05); break; case 31: //key down - myAnim.speed /= 1.05; + myAnim.changeSpeed(1/1.05); break; case 4: //key home - myAnim.speed = rate; + myAnim.setSpeed(rate); break; } }; @@ -75,24 +86,15 @@ runtime.addEventHandler(keyEventHandler); myTimer = new TimeEventHandler(); myTimer.onTimeChange = true; myTimer.onEvent = function(e) { - if (myAnim.forward) { - myAnim.currentTime += e.deltaTime * myAnim.speed; - if (myAnim.currentTime > myAnim.endTime) { - if (palindrome == true) { - myAnim.currentTime = myAnim.endTime; - myAnim.forward = false; - } - else { - myAnim.currentTime = myAnim.startTime; - } - } - } - else { - myAnim.currentTime -= e.deltaTime * myAnim.speed; - if (myAnim.currentTime < myAnim.startTime) { - myAnim.currentTime = myAnim.startTime; - myAnim.forward = true; - } + myAnim.wallTime += e.deltaTime; + if (palindrome == true) { + myAnim.currentTime = + myAnim.startTime + + myAnim.myLength/2 + * (1 - Math.cos(Math.PI * myAnim.speed/myAnim.myLength * myAnim.wallTime)); + } else { + myAnim.currentTime = myAnim.startTime + + (myAnim.speed * myAnim.wallTime % myAnim.myLength); } }; runtime.addEventHandler(myTimer); |