annotate Pants_FPS/resources/SceneGraph.js @ 17:bf87fe5a9797

ver3
author <e085737>
date Fri, 10 Dec 2010 20:19:03 +0900
parents 9367d87879ee
children 931ad40d56f5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
<e085737>
parents:
diff changeset
1 // ループさせる処理を入れる
<e085737>
parents:
diff changeset
2 function MainLoop(ctx,sgroot,w,h){
<e085737>
parents:
diff changeset
3 collision_object(sg_exec_tree,sgroot,w,h)
<e085737>
parents:
diff changeset
4 move_object(sg_exec_tree,sgroot,w,h)
<e085737>
parents:
diff changeset
5 draw_object(ctx,sg_exec_tree,sgroot)
17
<e085737>
parents: 16
diff changeset
6 camera_object(ctx, sgroot, sgroot.camera)
13
<e085737>
parents:
diff changeset
7 }
<e085737>
parents:
diff changeset
8
<e085737>
parents:
diff changeset
9
<e085737>
parents:
diff changeset
10 /* 再帰的に呼び出して全てのnodeのcollisionを実行する */
<e085737>
parents:
diff changeset
11 function collision_object(node,sgroot,w,h){
<e085737>
parents:
diff changeset
12 if(node.collision != null){
<e085737>
parents:
diff changeset
13 node.collision(node,sgroot,w,h)
<e085737>
parents:
diff changeset
14 node.frame++
<e085737>
parents:
diff changeset
15 }
16
<e085737>
parents: 13
diff changeset
16
<e085737>
parents: 13
diff changeset
17 for(num in node.child){
<e085737>
parents: 13
diff changeset
18 collision_object(node.child[num],sgroot,w,h)
<e085737>
parents: 13
diff changeset
19 }
13
<e085737>
parents:
diff changeset
20 }
<e085737>
parents:
diff changeset
21
<e085737>
parents:
diff changeset
22
<e085737>
parents:
diff changeset
23 /* 再帰的に呼び出して全てのnodeのmoveを実行する */
<e085737>
parents:
diff changeset
24 function move_object(node,sgroot,w,h){
16
<e085737>
parents: 13
diff changeset
25 if(node.move != null){
<e085737>
parents: 13
diff changeset
26 node.move(node,sgroot,w,h)
<e085737>
parents: 13
diff changeset
27 }
<e085737>
parents: 13
diff changeset
28
13
<e085737>
parents:
diff changeset
29 for(num in node.child){
<e085737>
parents:
diff changeset
30 move_object(node.child[num],sgroot,w,h)
<e085737>
parents:
diff changeset
31 }
<e085737>
parents:
diff changeset
32 }
<e085737>
parents:
diff changeset
33
<e085737>
parents:
diff changeset
34
<e085737>
parents:
diff changeset
35 /* 再帰的に呼び出して全てのnodeをdrawする */
<e085737>
parents:
diff changeset
36 function draw_object(ctx,node,sgroot){
16
<e085737>
parents: 13
diff changeset
37 if(node.id != null){
<e085737>
parents: 13
diff changeset
38 drawObject_link(ctx, node, node.angle, node.xyz, node.scale, sgroot.sg_src[node.id])
<e085737>
parents: 13
diff changeset
39 }else if(node.id != null && node.link == true){
<e085737>
parents: 13
diff changeset
40 drawObject_link(ctx, node, node.angle, node.xyz, node.scale, sgroot.sg_src[node.id])
<e085737>
parents: 13
diff changeset
41 }else{
<e085737>
parents: 13
diff changeset
42 create_matrix(node, node.angle, node.xyz, node.scale)
<e085737>
parents: 13
diff changeset
43 }
<e085737>
parents: 13
diff changeset
44
13
<e085737>
parents:
diff changeset
45 for(num in node.child){
<e085737>
parents:
diff changeset
46 draw_object(ctx,node.child[num],sgroot)
<e085737>
parents:
diff changeset
47 }
<e085737>
parents:
diff changeset
48 }
<e085737>
parents:
diff changeset
49
<e085737>
parents:
diff changeset
50
17
<e085737>
parents: 16
diff changeset
51 function camera_object(ctx, sgroot, node){
<e085737>
parents: 16
diff changeset
52 sgroot.getCamera(ctx, node)
<e085737>
parents: 16
diff changeset
53 }
<e085737>
parents: 16
diff changeset
54
<e085737>
parents: 16
diff changeset
55
16
<e085737>
parents: 13
diff changeset
56 hand_mat = function(node){
<e085737>
parents: 13
diff changeset
57 for(var num in node.child){
<e085737>
parents: 13
diff changeset
58 node.child[num].parents_mat = new J3DIMatrix4()
<e085737>
parents: 13
diff changeset
59 //node.child[num].parents_mat = node.mat
<e085737>
parents: 13
diff changeset
60 node.mat.getAsArrayMatrix(node.child[num].parents_mat.$matrix)
<e085737>
parents: 13
diff changeset
61 }
<e085737>
parents: 13
diff changeset
62 }
<e085737>
parents: 13
diff changeset
63
<e085737>
parents: 13
diff changeset
64
<e085737>
parents: 13
diff changeset
65 SceneGraph = function(){
13
<e085737>
parents:
diff changeset
66 this.next = null
<e085737>
parents:
diff changeset
67 this.prev = null
<e085737>
parents:
diff changeset
68 this.last = null
<e085737>
parents:
diff changeset
69 this.parents = null
<e085737>
parents:
diff changeset
70 this.children = null
<e085737>
parents:
diff changeset
71 this.lastChild = null
<e085737>
parents:
diff changeset
72
<e085737>
parents:
diff changeset
73 this.xyz = new Array(0,0,0)
<e085737>
parents:
diff changeset
74 this.angle = new Array(0,0,0)
<e085737>
parents:
diff changeset
75 this.stack_xyz = new Array(0,0,0)
<e085737>
parents:
diff changeset
76 this.stack_angle = new Array(0,0,0)
<e085737>
parents:
diff changeset
77 this.w = 0
<e085737>
parents:
diff changeset
78 this.h = 0
<e085737>
parents:
diff changeset
79 this.scale = 1.0
<e085737>
parents:
diff changeset
80 this.dx = 1.0
<e085737>
parents:
diff changeset
81 this.dy = 1.0
<e085737>
parents:
diff changeset
82 this.dz = 1.0
16
<e085737>
parents: 13
diff changeset
83 this.id = null
13
<e085737>
parents:
diff changeset
84 this.num = 0
16
<e085737>
parents: 13
diff changeset
85 this.parents_mat = null
<e085737>
parents: 13
diff changeset
86 this.mat = null
<e085737>
parents: 13
diff changeset
87 this.link = false
13
<e085737>
parents:
diff changeset
88
<e085737>
parents:
diff changeset
89 this.move = null
<e085737>
parents:
diff changeset
90 this.collision = null
<e085737>
parents:
diff changeset
91 this.child = new Array()
<e085737>
parents:
diff changeset
92
<e085737>
parents:
diff changeset
93
<e085737>
parents:
diff changeset
94 this.flag_remove = 0
<e085737>
parents:
diff changeset
95 this.flag_drawable = 1
<e085737>
parents:
diff changeset
96
<e085737>
parents:
diff changeset
97 this.frame = 0
<e085737>
parents:
diff changeset
98 }
<e085737>
parents:
diff changeset
99
<e085737>
parents:
diff changeset
100
<e085737>
parents:
diff changeset
101 // SceneGraphを削除する
<e085737>
parents:
diff changeset
102 SceneGraph.prototype.remove = function(node){
<e085737>
parents:
diff changeset
103 if(node.parents != null){
<e085737>
parents:
diff changeset
104 var length = node.parents.child.length
<e085737>
parents:
diff changeset
105
<e085737>
parents:
diff changeset
106
<e085737>
parents:
diff changeset
107 if(length != 0){
<e085737>
parents:
diff changeset
108 // 親の書き換え
<e085737>
parents:
diff changeset
109 for(num in node.child){
<e085737>
parents:
diff changeset
110 node.child[num].parents = node.parents
<e085737>
parents:
diff changeset
111 }
<e085737>
parents:
diff changeset
112
<e085737>
parents:
diff changeset
113 // 要素を取り除く
<e085737>
parents:
diff changeset
114 node.parents.child.splice(node.num, 1)
<e085737>
parents:
diff changeset
115
<e085737>
parents:
diff changeset
116 // 取り除いたnodeのchildをnodeのparentsに追加
<e085737>
parents:
diff changeset
117 for(num in node.child){
<e085737>
parents:
diff changeset
118 if(node.child[num].id != "LOCK"){
<e085737>
parents:
diff changeset
119 node.parents.child.push(node.child[num])
<e085737>
parents:
diff changeset
120 }
<e085737>
parents:
diff changeset
121 }
<e085737>
parents:
diff changeset
122
<e085737>
parents:
diff changeset
123
<e085737>
parents:
diff changeset
124 // idの振りなおし
<e085737>
parents:
diff changeset
125 for(num in node.parents.child){
<e085737>
parents:
diff changeset
126 node.parents.child[num].num = num
<e085737>
parents:
diff changeset
127 }
<e085737>
parents:
diff changeset
128 }else{
<e085737>
parents:
diff changeset
129 node.parents.child.length = 0
<e085737>
parents:
diff changeset
130 }
<e085737>
parents:
diff changeset
131 }
<e085737>
parents:
diff changeset
132 }
<e085737>
parents:
diff changeset
133
<e085737>
parents:
diff changeset
134
<e085737>
parents:
diff changeset
135 /* moveとcollisionをsetする */
<e085737>
parents:
diff changeset
136 SceneGraph.prototype.set_move_collision = function(new_move, new_collision){
<e085737>
parents:
diff changeset
137 this.move = new_move
<e085737>
parents:
diff changeset
138 this.collision = new_collision
<e085737>
parents:
diff changeset
139 }
<e085737>
parents:
diff changeset
140
<e085737>
parents:
diff changeset
141
<e085737>
parents:
diff changeset
142 SceneGraph.prototype.addBrother = function(bro){
<e085737>
parents:
diff changeset
143 if(this.parents != null){
<e085737>
parents:
diff changeset
144 parents.addChild(bro)
<e085737>
parents:
diff changeset
145 }else{
<e085737>
parents:
diff changeset
146 alert("error : doesn't have parent")
<e085737>
parents:
diff changeset
147 }
<e085737>
parents:
diff changeset
148
<e085737>
parents:
diff changeset
149 return bro
<e085737>
parents:
diff changeset
150 }
<e085737>
parents:
diff changeset
151
<e085737>
parents:
diff changeset
152
<e085737>
parents:
diff changeset
153 /* 子どもの追加 */
<e085737>
parents:
diff changeset
154 SceneGraph.prototype.addChild = function(node){
<e085737>
parents:
diff changeset
155 var num = this.child.length
<e085737>
parents:
diff changeset
156 this.child.push(node)
<e085737>
parents:
diff changeset
157 node.parents = this
<e085737>
parents:
diff changeset
158 node.num = num
<e085737>
parents:
diff changeset
159 }
<e085737>
parents:
diff changeset
160
<e085737>
parents:
diff changeset
161
<e085737>
parents:
diff changeset
162
<e085737>
parents:
diff changeset
163
<e085737>
parents:
diff changeset
164