Mercurial > hg > Members > kono > Cerium
annotate Renderer/Test/vacuum.cc @ 583:530d189ebf1a
add writer
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 25 Oct 2009 20:11:38 +0900 |
parents | b21a013051a2 |
children | d0b8860c17f8 |
rev | line source |
---|---|
507 | 1 #include <math.h> |
2 #include "vacuum.h" | |
3 #include "SceneGraphRoot.h" | |
4 #define ENCOUNT 55 | |
5 using namespace std; | |
6 | |
7 static float vacuum_speed = 10.0f; | |
8 | |
9 | |
10 /*オブジェクト毎にファイルを分けてみた | |
11 * | |
12 * | |
13 */ | |
14 | |
15 | |
16 | |
17 void | |
18 no_move_idle(SceneGraphPtr node, int screen_w, int screen_h) | |
19 { | |
20 | |
21 } | |
22 | |
23 void | |
24 no_collision_idle(SceneGraphPtr node, int screen_w, int screen_h,SceneGraphPtr tree) | |
25 { | |
26 | |
27 } | |
28 | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
29 int redcube; |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
30 int enemy; |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
31 |
507 | 32 void |
33 vacuum_coll(SceneGraphPtr node, int screen_w, int screen_h, | |
34 SceneGraphPtr tree) | |
35 { | |
36 Pad *pad = sgroot->getController(); | |
37 | |
38 if(node->frame%ENCOUNT == ENCOUNT-1) { | |
39 if(random()%2) { | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
40 add_cubecollision_object(redcube,node,screen_w,screen_h); |
507 | 41 } |
42 else { | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
43 add_cubecollision_object(enemy,node,screen_w,screen_h); |
507 | 44 } |
45 } | |
46 | |
47 if (pad->cross.isHold()) { | |
48 SceneGraphIteratorPtr it = sgroot->getIterator(tree); | |
49 collision_red(it,node); | |
50 it = sgroot->getIterator(tree); | |
51 collision_purple(it,node,screen_w,screen_h); | |
52 } | |
53 | |
54 else if(pad->circle.isHold()) { | |
55 SceneGraphIteratorPtr it = sgroot->getIterator(tree); | |
56 lock_attack(node,it); | |
57 } | |
58 | |
59 } | |
60 | |
61 void | |
62 lock_attack(SceneGraphPtr node,SceneGraphIteratorPtr it) | |
63 { | |
64 | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
65 SceneGraphPtr e; |
507 | 66 SceneGraphPtr near_enemy = NULL; |
67 float dx,dy,r,range = 100; | |
68 // Pad *pad = sgroot->getController(); | |
69 | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
70 for(;it->hasNext(enemy);) { |
507 | 71 |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
72 it->next(enemy); |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
73 e = it->get(); |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
74 dx = e->xyz[0] - node->xyz[0]; |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
75 dy = e->xyz[1] - node->xyz[1]; |
507 | 76 r = sqrt(dx*dx+dy*dy); |
77 | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
78 if(range > r && e->stack_xyz[2] == 0) { |
507 | 79 range = r; |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
80 near_enemy = e; |
507 | 81 } |
82 } | |
83 | |
84 | |
85 if(near_enemy != NULL) { | |
86 /*stack_xyz[2]をlockonフラグとして使うかな?*/ | |
87 SceneGraphPtr lockon; | |
88 // SceneGraphPtr near_enemy_common_move = near_enemy->parent; | |
89 near_enemy->stack_xyz[2] = 1; | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
90 lockon = sgroot->createSceneGraph("LOCK"); |
507 | 91 lockon->set_move_collision(no_move_idle,lockon_collision); |
92 //near_enemy_common_move->addChild(lockon); | |
93 near_enemy->addChild(lockon); | |
94 } | |
95 | |
96 } | |
97 | |
98 void | |
99 lockon_collision(SceneGraphPtr node,int w,int h,SceneGraphPtr tree) { | |
100 | |
101 Pad *pad = sgroot->getController(); | |
102 SceneGraphPtr lockon_enemy = node->parent; | |
103 | |
104 /* node->angle[0] = -lockon_enemy->angle[0]; | |
105 node->angle[1] = -lockon_enemy->angle[1]; | |
106 node->angle[2] = -lockon_enemy->angle[2];*/ | |
107 | |
108 if(pad->circle.isRelease()) { | |
109 lockon_enemy->remove(); | |
110 } | |
111 | |
112 } | |
113 | |
114 | |
115 void | |
116 vacuum_move(SceneGraphPtr node , int w, int h) | |
117 { | |
118 Pad *pad = sgroot->getController(); | |
119 | |
120 if (pad->right.isHold() && w > node->xyz[0]) { | |
121 node->xyz[0] += vacuum_speed; | |
122 node->angle[0] += 2; | |
123 } else if (pad->left.isHold() && 0 < node->xyz[0]) { | |
124 node->xyz[0] -= vacuum_speed; | |
125 node->angle[0] -= 2; | |
126 } | |
127 | |
128 if (pad->up.isHold() && 0 < node->xyz[1]) { | |
129 node->xyz[1] -= vacuum_speed; | |
130 node->angle[1] -= 2; | |
131 } else if (pad->down.isHold() && h > node->xyz[1]) { | |
132 node->xyz[1] += vacuum_speed; | |
133 node->angle[1] += 2; | |
134 } | |
135 | |
136 if (pad->start.isPush()) { | |
137 node->xyz[0] = w/2; | |
138 node->xyz[1] = h*0.8; | |
139 } | |
140 } | |
141 | |
142 | |
143 | |
144 /*cubeをランダムな場所に生成*/ | |
145 void | |
146 add_cubecollision_object(int id,SceneGraphPtr root,int w,int h) | |
147 { | |
148 SceneGraphPtr object; | |
149 SceneGraphPtr common_move; | |
150 | |
151 common_move = sgroot->createSceneGraph(); | |
152 object = sgroot->createSceneGraph(id); | |
153 object->xyz[0] = random()%w; | |
154 object->xyz[1] = random()%h; | |
155 object->set_move_collision(no_move_idle,cube_collision); | |
156 //common_move->addChild(object); | |
157 root->addBrother(object); | |
158 } | |
159 | |
160 | |
557
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
161 MainLoopPtr |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
162 vacuum::init(Viewer *sgroot, int w, int h) |
507 | 163 { |
164 SceneGraphPtr title; | |
165 | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
166 sgroot->createFromXMLfile( "xml_file/gamecube.xml"); |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
167 sgroot->createFromXMLfile( "xml_file/title.xml"); |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
168 sgroot->createFromXMLfile( "xml_file/gameover.xml"); |
507 | 169 |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
170 title = sgroot->createSceneGraph("TITLE"); |
507 | 171 title->xyz[0] = w/2; |
172 title->xyz[1] = h/2; | |
173 title->set_move_collision(no_move_idle, title_collision); | |
174 | |
175 sgroot->setSceneData(title); | |
563
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
176 |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
177 redcube = sgroot->getSgid("REDCUBE"); |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
178 enemy = sgroot->getSgid("ENEMY"); |
b21a013051a2
all exmple on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
557
diff
changeset
|
179 |
557
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
180 return sgroot; |
507 | 181 } |
557
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
182 |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
183 extern Application * |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
184 application() { |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
185 return new vacuum(); |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
186 } |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
187 |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
188 const char *usr_help_str = "Usage: ./test_nogl [OPTION]\n"; |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
189 |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
190 extern int init(TaskManager *manager, int argc, char *argv[]); |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
191 extern void task_initialize(); |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
192 static void TMend(TaskManager *manager); |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
193 |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
194 int |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
195 TMmain(TaskManager *manager, int argc, char *argv[]) |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
196 { |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
197 task_initialize(); |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
198 manager->set_TMend(TMend); |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
199 return init(manager, argc, argv); |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
200 |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
201 } |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
202 |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
203 void |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
204 TMend(TaskManager *manager) |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
205 { |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
206 printf("test_nogl end\n"); |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
207 } |
ec72b601b71f
fix examlples (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
508
diff
changeset
|
208 |