Mercurial > MadButterfly
annotate nodejs/mbapp.js @ 1405:05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
author | wycc |
---|---|
date | Mon, 04 Apr 2011 11:59:19 +0800 |
parents | 0efa20061d70 |
children | c918b79892ab |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
820
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
820
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
716 | 3 var mbfly = require("mbfly"); |
4 var svg = require("./svg"); | |
730 | 5 var sys = require("sys"); |
716 | 6 var ldr = mbfly.img_ldr_new("."); |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
7 |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
8 function _reverse(m1) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
9 var rev = new Array(1, 0, 0, 0, 1, 0); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
10 var m = new Array(m1[0], m1[1], m1[2], m1[3], m1[4], m1[5]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
11 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
12 rev[3] = -m[3] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
13 m[3] = 0; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
14 m[4] += rev[3] * m[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
15 m[5] += rev[3] * m[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
16 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
17 rev[1] = -m[1] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
18 rev[0] += rev[1] * rev[3]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
19 m[1] = 0; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
20 m[2] += rev[1] * m[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
21 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
22 rev[2] = -m[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
23 rev[5] = -m[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
24 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
25 rev[0] = rev[0] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
26 rev[1] = rev[1] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
27 rev[2] = rev[2] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
28 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
29 rev[3] = rev[3] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
30 rev[4] = rev[4] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
31 rev[5] = rev[5] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
32 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
33 return rev; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
34 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
35 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
36 function _decorate_mb_rt(mb_rt) { |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
37 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
38 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
39 mb_rt._mbapp_saved_coord_new = mb_rt.coord_new; |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
40 mb_rt.coord_new = function(parent) { |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
41 var coord; |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
42 |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
43 coord = this._mbapp_saved_coord_new(parent); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
44 coord.type = "coord"; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
45 coord.children = []; |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
46 coord._mbapp_saved_mtx = [coord[0], coord[1], coord[2], |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
47 coord[3], coord[4], coord[5]]; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
48 coord._mbapp_saved_rev_mtx = _reverse(coord._mbapp_saved_mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
49 coord.parent = parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
50 coord._mbapp_saved_add_shape = coord.add_shape; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
51 coord._mbapp_saved_clone_from_subtree = coord.clone_from_subtree; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
52 coord.add_shape = function(shape) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
53 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
54 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
55 this._mbapp_saved_add_shape(shape); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
56 shape.parent = this; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
57 this.children.push(shape); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
58 } |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
59 coord.clone_from_subtree = function(c) { |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
60 var newcoord = this._mbapp_saved_clone_from_subtree(c); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
61 newcoord.parent = this; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
62 this.children.push(newcoord); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
63 // FIXME: This is incorrect. However, we have no way to fix it for now. |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
64 // We need to implement a function which can get coord for a coord_t. |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
65 newcoord.children=c.children; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
66 return newcoord; |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
67 } |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
68 |
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
69 parent.children.push(coord); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
70 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
71 return coord; |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
72 }; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
73 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
74 /* |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
75 * Decorate root coord |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
76 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
77 coord = mb_rt.root; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
78 coord.type = "coord"; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
79 coord.children = []; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
80 coord._mbapp_saved_mtx = [coord[0], coord[1], coord[2], |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
81 coord[3], coord[4], coord[5]]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
82 coord._mbapp_saved_rev_mtx = _reverse(coord._mbapp_saved_mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
83 coord._mbapp_saved_add_shape = coord.add_shape; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
84 coord._mbapp_saved_clone_from_subtree = coord.clone_from_subtree; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
85 coord.add_shape = function(shape) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
86 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
87 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
88 this._mbapp_saved_add_shape(shape); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
89 shape.parent = this; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
90 } |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
91 coord.clone_from_subtree = function(c) { |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
92 var newcoord; |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
93 |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
94 newcoord = this._mbapp_saved_clone_from_subtree(c); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
95 newcoord.parent = this; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
96 this.children.push(newcoord); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
97 // FIXME: This is incorrect. However, we have no way to fix it for now. |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
98 // We need to implement a function which can get coord for a coord_t. |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
99 newcoord.children=c.children; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
100 return newcoord; |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
101 } |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
102 } |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
103 |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
104 app=function(display, w, h) { |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
105 var self = this; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
106 var mb_rt; |
716 | 107 |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
108 if(typeof display == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
109 display = ":0.0"; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
110 if(typeof w == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
111 w = 720; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
112 if(typeof h == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
113 h = 480; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
114 |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
115 mb_rt = this.mb_rt = new mbfly.mb_rt(display, w, h); |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
116 _decorate_mb_rt(mb_rt); |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
117 var background = mb_rt.rect_new(0, 0, 720, 480, 0, 0); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
118 var paint = mb_rt.paint_color_new(1, 1, 1, 1); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
119 paint.fill(background); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
120 mb_rt.root.add_shape(background); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
121 |
909 | 122 this.mb_rt.kbevents.add_event_observer(exports.EVT_KB_PRESS, function(evt) { self.KeyPress(evt);}); |
123 this.keymap={}; | |
124 this.onKeyPress = null; | |
914 | 125 this.svg = new svg.loadSVG(this.mb_rt,this.mb_rt.root,null); |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
126 this.frame_interval = 1000/30; // 12 frame per second |
1402 | 127 this.timer = null; |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
128 this._time = Date.now(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
129 } |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
130 |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
131 app.prototype.ts=function(m) { |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
132 var now = Date.now(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
133 var t = now-this._time; |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
134 sys.puts("["+t+"] "+m); |
716 | 135 } |
136 app.prototype.loadSVG=function(fname) { | |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
137 this.svg.load(this.mb_rt,this.mb_rt.root,fname); |
1391 | 138 this.changeScene(0); |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
139 sys.puts("xxxx"); |
716 | 140 } |
141 | |
730 | 142 app.prototype.KeyPress = function(evt) { |
143 if (this.onKeyPress) this.onKeyPress(evt.sym); | |
911 | 144 if (evt.sym in this.keymap) { |
145 this.keymap[evt.sym](); | |
146 } | |
730 | 147 } |
148 | |
716 | 149 app.prototype.loop=function() { |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
150 this.mb_rt.redraw_all(); |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
151 this.mb_rt.flush(); |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
152 } |
762 | 153 app.prototype.update=function() { |
154 this.mb_rt.redraw_all(); | |
155 this.mb_rt.flush(); | |
156 } | |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
157 app.prototype.get=function(name) { |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
158 return this.mb_rt.mbnames[name]; |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
159 } |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
160 app.prototype.addKeyboardListener=function(type,f) { |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
161 return this.mb_rt.kbevents.add_event_observer(type,f); |
716 | 162 } |
724 | 163 app.prototype.refresh=function() { |
886
3457f2d8b0b8
Only redraw changed when calling app.refresh() in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
884
diff
changeset
|
164 this.mb_rt.redraw_changed(); |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
165 //this.mb_rt.redraw_all(); |
724 | 166 this.mb_rt.flush(); |
167 } | |
730 | 168 app.prototype.dump=function() { |
169 sys.puts(this.onKeyPress); | |
170 } | |
171 | |
172 app.prototype.addKeyListener=function(key,f) { | |
731
1719484ed15d
Make the argument key can be an array to register multiple keys.
wycc
parents:
730
diff
changeset
|
173 if (typeof(key) == 'number') |
1719484ed15d
Make the argument key can be an array to register multiple keys.
wycc
parents:
730
diff
changeset
|
174 this.keymap[key] = f; |
911 | 175 else { |
176 for(k in key) { | |
177 this.keymap[k] = f; | |
731
1719484ed15d
Make the argument key can be an array to register multiple keys.
wycc
parents:
730
diff
changeset
|
178 } |
911 | 179 } |
730 | 180 } |
716 | 181 |
1376 | 182 app.prototype.generateScaleTween=function(src,dest,p) { |
1391 | 183 sys.puts("p="+ p); |
1376 | 184 src.hide(); |
185 // Duplicate the group | |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
186 var nodes = src.children; |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
187 if (src.dup) { |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
188 //src.dup.remove(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
189 //src.dup = null; |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
190 } |
1376 | 191 if (src.dup == null) { |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
192 var dup = this.mb_rt.coord_new(src.parent); |
1379 | 193 for (i in nodes) { |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
194 var c = nodes[i]; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
195 var ng = this.mb_rt.coord_new(dup); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
196 var k = dup.clone_from_subtree(c); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
197 c.dup = k; |
1379 | 198 } |
1376 | 199 src.dup = dup; |
200 } else { | |
201 dup = src.dup; | |
1379 | 202 src.dup.show(); |
1376 | 203 } |
1379 | 204 //dup.hide(); |
205 //dest.hide(); | |
206 //sys.puts(dup); | |
1376 | 207 |
1379 | 208 for(i in nodes) { |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
209 coord= nodes[i]; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
210 if (coord.target) |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
211 this.generateScaleTweenObject(coord.dup,coord,coord.target,p,''); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
212 else { |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
213 sys.puts(coord.id); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
214 sys.puts(coord[0]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
215 sys.puts(coord[1]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
216 sys.puts(coord[2]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
217 sys.puts(coord[3]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
218 sys.puts(coord[4]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
219 sys.puts(coord[5]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
220 } |
1379 | 221 } |
222 } | |
223 function printcoord(s) | |
224 { | |
225 sys.puts(s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]+" "+s[5]); | |
226 } | |
227 | |
228 function mul(a,b) | |
229 { | |
230 return [a[0]*b[0]+a[1]*b[3], a[0]*b[1]+a[1]*b[4], a[0]*b[2]+a[1]*b[5]+a[2], | |
231 a[3]*b[0]+a[4]*b[3], a[3]*b[1]+a[4]*b[4], a[3]*b[2]+a[4]*b[5]+a[5]]; | |
232 } | |
1376 | 233 |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
234 app.prototype.generateScaleTweenObject=function(coord,src,dest,p,id) { |
1402 | 235 //sys.puts("xxxxxxx"); |
236 //sys.puts("dest="+dest); | |
237 // sys.puts("src=["+src.sx+","+src.sy+","+src.r+","+src.tx+","+src.ty); | |
238 //sys.puts("id="+id+" dest=["+dest.sx+","+dest.sy+","+dest.r+","+dest.tx+","+dest.ty); | |
239 //sys.puts("src.center="+src.center); | |
240 //sys.puts("src.center.x="+src.center.x+" src.center.y="+src.center.y); | |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
241 if (src == null) return; |
1379 | 242 var p1 = 1-p; |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
243 var x1 = src.center.x; |
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
244 var y1 = src.center.y; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
245 var y1 = 0; |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
246 x1 = 0; |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
247 |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
248 // For the svg:use, the transform matrix is the transform of teh svg:use and the elements inside it |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
249 var d,sx,sy,r,tx,ty; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
250 sx = src.sx*p+dest.sx*p1; |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
251 sy = src.sy*p+dest.sy*p1; |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
252 r = src.r*p+dest.r*p1; |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
253 tx = src.tx*p+dest.tx*p1; |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
254 ty = src.ty*p+dest.ty*p1; |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
255 var mt = [1, 0, -x1, 0, 1, -y1]; |
1382 | 256 var opacity; |
1379 | 257 var ms; |
1382 | 258 |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
259 opacity = src.opacity*p1 + dest.opacity*p; |
1382 | 260 coord.opacity = opacity; |
261 | |
1379 | 262 if (r == 0) { |
263 m = mt; | |
264 } else { | |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
265 ms= [Math.cos(r), Math.sin(r),0,-Math.sin(r), Math.cos(r),0]; |
1379 | 266 m = mul(ms,mt); |
1376 | 267 } |
1379 | 268 m = mul([sx,0,0,0,sy,0],m); |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
269 m = mul([1,0,x1,0,1,y1],m); |
1379 | 270 m = mul([1,0,tx,0,1,ty],m); |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
271 //m[2] = -m[2]; |
1379 | 272 coord[0] = m[0]; |
273 coord[1] = m[1]; | |
274 coord[2] = m[2]; | |
275 coord[3] = m[3]; | |
276 coord[4] = m[4]; | |
277 coord[5] = m[5]; | |
1402 | 278 //sys.puts("id="+id+" src.tx="+src.tx+" src.ty="+src.ty+" tx="+tx+" ty="+ty+" r="+r+" x1="+x1+" y1="+y1+" p="+p+" "+m[0]+","+m[1]+","+m[2]+","+m[3]+","+m[4]+","+m[5]); |
1376 | 279 } |
978 | 280 |
281 app.prototype.changeScene=function(s) { | |
282 var nth; | |
1391 | 283 sys.puts(s); |
284 sys.puts(typeof(s)); | |
978 | 285 if (typeof(s)=='number') { |
286 var i; | |
287 nth = s; | |
288 } else { | |
289 nth = this.svg.getFrameNumber(s); | |
290 if (nth == -1) return; | |
291 } | |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
292 this.ts("goto to scene "+nth); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
293 this.currentScene = nth; |
978 | 294 var scenes = this.svg.scenes; |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
295 if (scenes == null) return; |
1376 | 296 for(i=0;i<scenes.length-1;i++) { |
978 | 297 try { |
1397 | 298 this.get(scenes[i].ref).hide(); |
978 | 299 if (nth >=scenes[i].start && nth <=scenes[i].end) { |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
300 this.get(scenes[i].ref).show(); |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
301 if (this.get(scenes[i].ref).dup) |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
302 this.get(scenes[i].ref).dup.show(); |
1376 | 303 if (scenes[i].type == 'normal' || i == scenes.length-1) { |
304 this.get(scenes[i].ref).show(); | |
305 } else if (scenes[i].type == 'scale') { | |
306 if (scenes[i].end == (scenes[i+1].start-1)) { | |
1379 | 307 var p = 1-(nth-scenes[i].start)/(scenes[i].end-scenes[i].start+1); |
1376 | 308 this.generateScaleTween(this.get(scenes[i].ref),this.get(scenes[i+1].ref),p); |
309 } else { | |
310 // If there is no second key frame defined, fall back to the normal | |
311 this.get(scenes[i].ref).show(); | |
312 } | |
1379 | 313 this.get(scenes[i+1].ref).hide(); |
1376 | 314 } |
315 | |
978 | 316 } else { |
317 this.get(scenes[i].ref).hide(); | |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
318 if (this.get(scenes[i].ref).dup) |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
319 this.get(scenes[i].ref).dup.hide(); |
978 | 320 } |
321 } catch(e) { | |
322 sys.puts(e); | |
323 sys.puts(scenes[i].ref); | |
324 } | |
325 } | |
1397 | 326 this.get(scenes[i].ref).hide(); |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
327 this.ts("refresh"); |
1379 | 328 this.refresh(); |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
329 this.ts("refresh done"); |
978 | 330 } |
1138 | 331 |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
332 app.prototype.runToScene=function(s) { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
333 if (typeof(s)=='number') { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
334 var i; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
335 nth = s; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
336 } else { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
337 nth = this.svg.getFrameNumber(s); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
338 if (nth == -1) return; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
339 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
340 var self = this; |
1391 | 341 sys.puts(this.currentScene+","+nth); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
342 if (nth > this.currentScene) { |
1402 | 343 this.skipdir = 1; |
344 } else { | |
345 this.skipdir = -1; | |
346 } | |
347 this.targetScene = nth; | |
348 this.startScene = this.currentScene; | |
349 this.starttime = Date.now(); | |
350 if (this.timer == null) { | |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
351 this.skipFrame(); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
352 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
353 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
354 |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
355 app.prototype.skipFrame=function() { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
356 var self = this; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
357 if (this.currentScene != this.targetScene) { |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
358 var now = Date.now(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
359 var step = Math.round((now - this.starttime)/this.frame_interval)*this.skipdir; |
1402 | 360 nextframe = this.startScene + step |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
361 //nextframe = this.currentScene + this.skipdir; |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
362 this.ts("goto begin"); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
363 |
1402 | 364 if (this.skipdir>0) { |
365 if (nextframe > this.targetScene) | |
366 nextframe = this.targetScene; | |
367 } else { | |
368 if (nextframe < this.targetScene) | |
369 nextframe = this.targetScene; | |
370 } | |
371 if (nextframe != this.targetScene) { | |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
372 var timegap = (nextframe-this.startScene)*this.skipdir*this.frame_interval+this.starttime - Date.now(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
373 sys.puts("goto "+timegap); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
374 if (timegap <200) { |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
375 timegap = 0; |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
376 } else { |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
377 } |
1402 | 378 this.timer = setTimeout(function() { |
379 self.skipFrame() | |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
380 }, timegap); |
1402 | 381 } else { |
382 this.timer = null; | |
383 } | |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
384 this.changeScene(nextframe); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
385 now = Date.now(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
386 this.ts("goto end"); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
387 } |
1138 | 388 } |
389 | |
978 | 390 app.prototype.addSceneListener=function(n, cb) { |
391 sys.puts("This is not implemented yet") | |
392 } | |
393 | |
872
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
394 var app_with_win = function(display, win) { |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
395 var self = this; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
396 var mb_rt; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
397 var background; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
398 var paint; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
399 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
400 if(typeof display == "undefined" || typeof win == "undefined") |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
401 throw "Invalid argument"; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
402 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
403 mb_rt = this.mb_rt = new mbfly.mb_rt_with_win(display, win); |
874
ec8d7e9c9642
Decorate mb_rt created by mb_rt_with_win()
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
404 _decorate_mb_rt(mb_rt); |
872
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
405 background = mb_rt.rect_new(0, 0, 720, 480, 0, 0); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
406 paint = mb_rt.paint_color_new(1, 1, 1, 1); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
407 paint.fill(background); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
408 mb_rt.root.add_shape(background); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
409 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
410 this.mb_rt.kbevents. |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
411 add_event_observer(exports.EVT_KB_PRESS, |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
412 function(evt) { self.KeyPress(evt); }); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
413 this.keymap = {}; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
414 this.onKeyPress = null; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
415 } |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
416 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
417 app_with_win.prototype = app.prototype; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
418 |
716 | 419 exports.app=app; |
872
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
420 exports.app_with_win = app_with_win; |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
421 |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
422 // Put all key definition here |
820 | 423 exports.KEY_LEFT = 0xff51; |
729
299ed9319dc6
Use key symbols instead of keycodes.
Thinker K.F. Li <thinker@branda.to>
parents:
724
diff
changeset
|
424 exports.KEY_UP = 0xff52; |
820 | 425 exports.KEY_RIGHT = 0xff53; |
729
299ed9319dc6
Use key symbols instead of keycodes.
Thinker K.F. Li <thinker@branda.to>
parents:
724
diff
changeset
|
426 exports.KEY_DOWN = 0xff54; |
820 | 427 exports.KEY_ENTER = 0xff0d; |
724 | 428 exports.EVT_ANY=0; |
429 exports.EVT_MOUSE_OVER=1; | |
430 exports.EVT_MOUSE_OUT=2; | |
431 exports.EVT_MOUSE_MOVE=3; | |
432 exports.EVT_MOUSE_BUT_PRESS4; | |
433 exports.EVT_MOUSE_BUT_RELEASE=5 | |
434 exports.EVT_KB_PRESS=6; | |
435 exports.EVT_KB_RELEASE=7; | |
436 exports.EVT_PROGM_COMPLETE=8; | |
437 exports.EVT_RDMAN_REDRAW=9; | |
438 exports.EVT_MONITOR_ADD=10; | |
439 exports.EVT_MONITOR_REMOVE=11; | |
440 exports.EVT_MONITOR_FREE=12; | |
441 exports.EVT_MOUSE_MOVE_RAW=13; | |
827 | 442 exports.ldr = ldr; |