summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/movie15/animation.js
blob: 7c870a1b4985de545b169b1eb4dc615aa4c335b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
///////////////////////////////////////////////////////////////////////
//
// 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.
//
///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////
// 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;
scene.activateAnimation(myAnim);

//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
);

//menu handler to control speed
menuEventHandler = new MenuEventHandler();
menuEventHandler.onEvent = function(e) {
  if (e.menuItemName == "faster") {
    myAnim.speed *= 1.25;
  }
  else if (e.menuItemName == "slower") {
    myAnim.speed /= 1.25;
  }
  else if (e.menuItemName == "default") {
    myAnim.speed = rate;
  }
};
runtime.addEventHandler(menuEventHandler);

//key handler to control speed
keyEventHandler = new KeyEventHandler();
keyEventHandler.onKeyDown = true;
keyEventHandler.onEvent = function(e) {
  switch(e.characterCode) {
    case 30: //key up
      myAnim.speed *= 1.05;
      break;

    case 31: //key down
      myAnim.speed /= 1.05;
      break;

    case 4: //key home
      myAnim.speed = rate;
      break;
  }
};
runtime.addEventHandler(keyEventHandler);

//run the animation using a TimeEventHandler
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;
    }
  }
};
runtime.addEventHandler(myTimer);