Mercurial > hg > Members > kono > Cerium
comparison Renderer/Application/ieshoot.cc @ 507:735f76483bb2
Reorganization..
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 12 Oct 2009 09:39:35 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
506:1d4a8a86f26b | 507:735f76483bb2 |
---|---|
1 #include "SceneGraphRoot.h" | |
2 #include "SGList.h" | |
3 | |
4 static const float jiki_speed = 6.0f; | |
5 static const float jiki_radius = 32.0f; | |
6 | |
7 static const float tama_speed = 10.0f; | |
8 static const float tama_radius = 16.0f; | |
9 | |
10 static const float boss_radius_x = 64.0f; | |
11 static const float boss_radius_y = 128.0f; | |
12 | |
13 static const float iebosstama_speed = 15.0f; | |
14 | |
15 static void | |
16 ieboss_collision(SceneGraphPtr node, int screen_w, int screen_h, | |
17 SceneGraphPtr tree); | |
18 static void | |
19 ieboss_collision_invincibil(SceneGraphPtr node, int screen_w, int screen_h, SceneGraphPtr tree); | |
20 static void ieboss_move(SceneGraphPtr node, int screen_w, int screen_h); | |
21 | |
22 static void iebosstama_move(SceneGraphPtr node, int screen_w, int screen_h); | |
23 | |
24 | |
25 static void | |
26 iejiki_collision(SceneGraphPtr node, int screen_w, int screen_h, | |
27 SceneGraphPtr tree) | |
28 { | |
29 } | |
30 | |
31 static void | |
32 ietama_collision(SceneGraphPtr node, int screen_w, int screen_h, | |
33 SceneGraphPtr tree) | |
34 { | |
35 } | |
36 | |
37 static void | |
38 ieboss_collision(SceneGraphPtr node, int screen_w, int screen_h, | |
39 SceneGraphPtr tree) | |
40 { | |
41 SceneGraphIteratorPtr it = sgroot->getIterator(tree); | |
42 static int damage = 0; | |
43 | |
44 for (; it->hasNext(IETAMA);) { | |
45 it->next(IETAMA); | |
46 SceneGraphPtr tama = it->get(); | |
47 | |
48 if (node->xyz[0] - boss_radius_x < tama->xyz[0] + tama_radius | |
49 && node->xyz[0] + boss_radius_x > tama->xyz[0] - tama_radius | |
50 && node->xyz[1] + boss_radius_y > tama->xyz[1] - tama_radius) { | |
51 tama->remove(); | |
52 | |
53 node->set_move_collision(ieboss_move, ieboss_collision_invincibil); | |
54 | |
55 SceneGraphPtr iebosstama = sgroot->createSceneGraph(Earth); | |
56 iebosstama->set_move_collision(iebosstama_move, ietama_collision); | |
57 iebosstama->xyz[0] = node->xyz[0]; | |
58 iebosstama->xyz[1] = node->xyz[1] + boss_radius_y; | |
59 //iebosstama->xyz[2] = 50.0f; | |
60 node->addBrother(iebosstama); | |
61 | |
62 damage++; | |
63 } | |
64 } | |
65 | |
66 if (damage > 10) { | |
67 node->remove(); | |
68 } | |
69 } | |
70 | |
71 static void | |
72 ieboss_move(SceneGraphPtr node, int screen_w, int screen_h) | |
73 { | |
74 /** | |
75 * TODO | |
76 * Boss が複数居た場合、これじゃ駄目 | |
77 */ | |
78 static float x_speed = 5.0f; | |
79 static float z_speed = 5.0f; | |
80 | |
81 node->xyz[0] += x_speed; | |
82 | |
83 if (node->xyz[0] - boss_radius_x < 0) { | |
84 x_speed = -x_speed; | |
85 node->xyz[0] = boss_radius_x; | |
86 } else if (node->xyz[0] + boss_radius_x > screen_w) { | |
87 x_speed = -x_speed; | |
88 node->xyz[0] = screen_w - boss_radius_x; | |
89 } | |
90 | |
91 //node->xyz[2] += z_speed; | |
92 if (node->xyz[2] >= 100.0f) { | |
93 node->xyz[2] = 99.99f; | |
94 z_speed = -z_speed; | |
95 } else if (node->xyz[2] <= -100.0f) { | |
96 node->xyz[2] = -99.99f; | |
97 z_speed = -z_speed; | |
98 } | |
99 } | |
100 | |
101 static void | |
102 ieboss_collision_invincibil(SceneGraphPtr node, int screen_w, int screen_h, | |
103 SceneGraphPtr tree) | |
104 { | |
105 static int frame = 0; | |
106 | |
107 frame++; | |
108 | |
109 node->flag_drawable ^= 1; | |
110 | |
111 if (frame > 60) { | |
112 frame = 0; | |
113 node->flag_drawable = 1; | |
114 node->set_move_collision(ieboss_move, ieboss_collision); | |
115 } | |
116 } | |
117 | |
118 static void | |
119 iebosstama_move(SceneGraphPtr node, int screen_w, int screen_h) | |
120 { | |
121 node->xyz[1] += iebosstama_speed; | |
122 | |
123 // 描画領域から抜けたら削除 | |
124 if (node->xyz[1] > screen_h) { | |
125 node->remove(); | |
126 } | |
127 } | |
128 | |
129 static void | |
130 ietama_move(SceneGraphPtr node, int screen_w, int screen_h) | |
131 { | |
132 node->xyz[1] -= tama_speed; | |
133 | |
134 // 描画領域から抜けたら削除 | |
135 if (node->xyz[1] < 0) { | |
136 node->remove(); | |
137 } | |
138 } | |
139 | |
140 static void | |
141 iejiki_move(SceneGraphPtr node, int screen_w, int screen_h) | |
142 { | |
143 Pad *pad = sgroot->getController(); | |
144 | |
145 if (pad->left.isPush() | |
146 || pad->left.isHold()) { | |
147 node->xyz[0] -= jiki_speed; | |
148 | |
149 if (node->xyz[0] - jiki_radius< 0) { | |
150 node->xyz[0] = jiki_radius; | |
151 } | |
152 } | |
153 | |
154 if (pad->right.isPush() | |
155 || pad->right.isHold()) { | |
156 node->xyz[0] += jiki_speed; | |
157 | |
158 if (node->xyz[0] + jiki_radius > screen_w) { | |
159 node->xyz[0] = screen_w - jiki_radius; | |
160 } | |
161 } | |
162 | |
163 if (pad->up.isPush() | |
164 || pad->up.isHold()) { | |
165 node->xyz[1] -= jiki_speed; | |
166 | |
167 if (node->xyz[1] - jiki_radius < 0) { | |
168 node->xyz[1] = jiki_radius; | |
169 } | |
170 } | |
171 | |
172 if (pad->down.isPush() | |
173 || pad->down.isHold()) { | |
174 node->xyz[1] += jiki_speed; | |
175 | |
176 if (node->xyz[1] + jiki_radius > screen_h) { | |
177 node->xyz[1] = screen_h - jiki_radius; | |
178 } | |
179 } | |
180 | |
181 if (pad->circle.isPush()) { | |
182 SceneGraphPtr ietama = sgroot->createSceneGraph(IETAMA); | |
183 ietama->set_move_collision(ietama_move, ietama_collision); | |
184 ietama->xyz[0] = node->xyz[0]; | |
185 ietama->xyz[1] = node->xyz[1]; | |
186 node->addBrother(ietama); | |
187 } | |
188 } | |
189 | |
190 | |
191 void | |
192 ieshoot_init(TaskManager *manager) | |
193 { | |
194 SceneGraphPtr iejiki; | |
195 SceneGraphPtr enemy; | |
196 SceneGraphPtr back; | |
197 | |
198 sgroot->createFromXMLfile(manager, "xml_file/ietama.xml"); | |
199 sgroot->createFromXMLfile(manager, "xml_file/ieboss.xml"); | |
200 sgroot->createFromXMLfile(manager, "xml_file/iejiki.xml"); | |
201 sgroot->createFromXMLfile(manager, "xml_file/universe.xml"); | |
202 | |
203 back = sgroot->createSceneGraph(); | |
204 | |
205 iejiki = sgroot->createSceneGraph(IEJIKI); | |
206 iejiki->set_move_collision(iejiki_move, iejiki_collision); | |
207 iejiki->xyz[2] = 20; | |
208 back->addChild(iejiki); | |
209 | |
210 enemy = sgroot->createSceneGraph(IEBOSS); | |
211 enemy->set_move_collision(ieboss_move, ieboss_collision); | |
212 enemy->xyz[1] = boss_radius_y; | |
213 back->addChild(enemy); | |
214 | |
215 sgroot->setSceneData(back); | |
216 } |