Mercurial > hg > old > magoroku_racing
annotate gSprite.cc @ 126:030394675d8e
succes compile
author | e085768 |
---|---|
date | Thu, 30 Jun 2011 21:48:38 +0900 |
parents | c62fec1dd2f8 |
children | d9e3137e70a0 |
rev | line source |
---|---|
116 | 1 //SgoexCerium.ccより |
2 #include "matrix_calc.h" | |
3 #include "TaskManager.h" | |
4 #include "SceneGraph.h" | |
5 #include "Application.h" | |
119 | 6 #include <iostream> |
116 | 7 |
0 | 8 #include <stdio.h> |
9 #include <stdlib.h> | |
91 | 10 #include "libps2.h" |
11 #include "ps2util.h" | |
0 | 12 #include "gSprite.h" |
90
8edae89a3877
compile on Mac OS X
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
88
diff
changeset
|
13 #include <stdbool.h> |
0 | 14 |
122 | 15 #define DEFOBJ 100 |
16 #define SPRITE_COL 0x4f | |
17 #define SCREEN_HALF_W 320 | |
18 #define SCREEN_HALF_H 240 | |
0 | 19 |
122 | 20 static SpriteTable sptable[DEFOBJ]; |
21 static ps2utilSprite sp[DEFOBJ]; // 表示スプライト用スタック | |
22 static unsigned int sp_counter; | |
23 static bool flag_spriteInited = false; // スプライトロードフラグ | |
0 | 24 |
115 | 25 //static TEXTURE *sprite_tex; |
0 | 26 |
122 | 27 extern Viewer *droot; |
116 | 28 |
122 | 29 /*static*/ SceneGraphPtr root; |
116 | 30 |
122 | 31 static float my_scale = 5; |
116 | 32 |
33 | |
34 //SgoexCerium.ccより | |
0 | 35 void |
116 | 36 flip() |
37 { | |
122 | 38 CameraPtr camera = droot->sgroot->getCamera(); |
116 | 39 |
119 | 40 droot->sgroot->flip(); |
41 droot->sgroot->lightCalc(); | |
116 | 42 |
122 | 43 root = droot->createSceneGraph(); |
119 | 44 //root->xyz[0] = screen_w/2; |
45 //root->xyz[1] = screen_h/2;; | |
122 | 46 root->xyz[0] = 0; |
47 root->xyz[1] = 0; | |
124 | 48 root->xyz[2] = 0; |
49 //root->xyz[2] = 30.0f; | |
116 | 50 |
119 | 51 /*親の回転、座標から、子の回転、座標を算出*/ |
52 get_matrix(root->matrix, root->angle, root->xyz, camera->matrix); | |
53 /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/ | |
54 get_matrix(root->real_matrix, root->angle, root->xyz, camera->real_matrix); | |
55 //出力して、次のものを出力するための準備 | |
56 droot->setSceneData(root); | |
116 | 57 } |
58 | |
124 | 59 // rootのポインターを返す |
60 SceneGraphPtr getRootPtr( void ) | |
61 { | |
62 return root; | |
63 } | |
116 | 64 |
65 /*void | |
0 | 66 gSprite_DefSprite(int number, int tx, int ty, int tw, int th) |
67 { | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
68 sptable[number].tx = tx; |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
69 sptable[number].ty = ty; |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
70 sptable[number].tw = tw; |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
71 sptable[number].th = th; |
116 | 72 }*/ |
73 | |
74 void | |
75 gSprite_DefSprite(int number, const char *name, float w, float h, int color)//, OBJECT *obj) | |
76 { | |
122 | 77 SpriteTable *m = &sptable[number]; |
78 m->w = w; | |
79 m->h = h; | |
80 m->color = (color & 32); | |
81 m->mx = w / 2; //画像の中心を座標としたいらしい。 | |
82 m->my = h / 2; | |
83 m->tex_w = power_of_two(m->w); | |
84 m->tex_h = power_of_two(m->h); | |
85 m->texture = (int *)name; | |
0 | 86 } |
87 | |
116 | 88 /*void |
119 | 89 gSprite_PutSprite(int number, int x, int y) |
90 { | |
91 ps2utilSprite *p = &sp[sp_counter]; | |
116 | 92 |
119 | 93 ps2util_sprite_Set_basicAttribute( |
94 p, | |
95 (unsigned short)x, (unsigned short)y, | |
96 (unsigned short)sptable[number].tw*2, (unsigned short)sptable[number].th*2, | |
97 (unsigned short)sptable[number].tx, (unsigned short)sptable[number].ty, | |
98 (unsigned short)sptable[number].tw, (unsigned short)sptable[number].th, | |
99 SPRITE_PRIO_FOREGROUND); | |
116 | 100 |
119 | 101 ps2util_sprite_Request(p); |
102 sp_counter++; | |
103 }*/ | |
116 | 104 |
0 | 105 |
116 | 106 //void gSprite_PutSprite(int number, short x, short y, int zorder) |
124 | 107 void gSprite_PutSprite(int number, int x, int y, int z) |
116 | 108 { |
109 SpriteTable *m = &sptable[number]; | |
118 | 110 |
116 | 111 char *name = (char *) m->texture; |
112 if (!name) { | |
113 printf("PutSprite %d unknown\n",number); | |
114 return; | |
115 } | |
119 | 116 |
116 | 117 SceneGraphPtr object = droot->createSceneGraph(name); |
119 | 118 |
124 | 119 // ズレ直し? |
122 | 120 /* |
124 | 121 object->c_xyz[0] = m->mx; |
122 object->c_xyz[1] = m->my; | |
123 | |
119 | 124 object->xyz[0] -= object->c_xyz[0]*my_scale; |
125 object->xyz[1] -= object->c_xyz[1]*my_scale; | |
126 object->xyz[2] -= object->c_xyz[2]; | |
124 | 127 |
119 | 128 object->xyz[0] += x+m->mx; |
129 object->xyz[1] += y+m->my; | |
122 | 130 |
124 | 131 // object->xyz[2] += zorder * 0.01; |
132 */ | |
133 | |
122 | 134 object->xyz[0] = x; |
135 object->xyz[1] = y; | |
124 | 136 object->xyz[2] = z; |
137 | |
122 | 138 root->addChild(object); |
116 | 139 |
118 | 140 float scale[] = {my_scale,my_scale,1}; |
116 | 141 //float c_xyz[] = {0,0,0}; |
142 //scale_matrix(object->matrix, scale, c_xyz); | |
143 | |
144 /*親の回転、座標から、子の回転、座標を算出*/ | |
118 | 145 get_matrix_scale(object->matrix, object->angle, object->xyz, scale, root->matrix); |
116 | 146 |
147 /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/ | |
119 | 148 get_matrix(object->real_matrix, object->angle, object->xyz, root->real_matrix); |
149 | |
0 | 150 } |
151 | |
116 | 152 |
153 /*void | |
154 gSprite_PutSpriteEx(int number, int x, int y, float w, float h) | |
155 { | |
115 | 156 ps2utilSprite *p = &sp[sp_counter]; |
0 | 157 |
115 | 158 ps2util_sprite_Set_basicAttribute( |
116 | 159 p, |
160 (unsigned short)x, (unsigned short)y, | |
161 (unsigned short)sptable[number].tw*w, (unsigned short)sptable[number].th*h, | |
162 (unsigned short)sptable[number].tx, (unsigned short)sptable[number].ty, | |
163 (unsigned short)sptable[number].tw, (unsigned short)sptable[number].th, | |
164 SPRITE_PRIO_FOREGROUND); | |
0 | 165 |
115 | 166 ps2util_sprite_Request(p); |
167 sp_counter++; | |
116 | 168 } |
169 */ | |
170 | |
171 void | |
124 | 172 gSprite_PutSpriteEx(int number, int x, int y, int z, float scalex, float scaley, float angle) |
116 | 173 { |
174 if (1) { | |
124 | 175 gSprite_PutSprite(number, x, y, z); |
116 | 176 return; |
177 } | |
178 | |
179 SpriteTable *m = &sptable[number]; | |
180 char *name = (char *) m->texture; | |
181 if (!name) { | |
182 printf("PutSpriteEx %d unknown\n",number); | |
183 return; | |
184 } | |
185 SceneGraphPtr object = droot->createSceneGraph(name); | |
186 root->addChild(object); | |
187 | |
188 float scale[] = {my_scale*scalex*4,my_scale*scaley*4,1}; | |
189 | |
190 /*親の回転、座標から、子の回転、座標を算出*/ | |
191 object->xyz[0] = x - object->c_xyz[0] * my_scale - m->w*my_scale; | |
192 object->xyz[1] = y - object->c_xyz[1] * my_scale - m->h*my_scale; | |
193 object->xyz[2] = number * 0.01; | |
194 //object->c_xyz[0] = m->mx; | |
195 //object->c_xyz[1] = m->my; | |
196 object->angle[3] = angle * (3.1415926*2/4096); | |
197 get_matrix(object->matrix, object->angle, object->xyz, root->matrix); | |
198 float c_xyz[] = {0,0,0}; | |
199 scale_matrix(object->matrix, scale, c_xyz); | |
200 /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/ | |
201 // get_matrix(object->real_matrix, object->angle, object->xyz, root->real_matrix); | |
0 | 202 } |
203 | |
116 | 204 |
205 | |
206 | |
207 | |
208 //ここいらはどうやら、スプライトを取得する部分。 | |
209 /* | |
119 | 210 static void |
211 gSprite_Init_Png(const char *texname) | |
212 { | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
213 if (!(sprite_tex = read_png_file(texname))) { |
119 | 214 fprintf(stderr, |
215 "cannot creat texture - init_png().\n"); | |
216 fflush(stderr); | |
217 exit(EXIT_FAILURE); | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
218 } |
116 | 219 |
220 | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
221 if (ps2util_tex_Set(sprite_tex) == -1) { |
119 | 222 fprintf(stderr, |
223 "cannot set texture - init_png().\n"); | |
224 fflush(stderr); | |
225 exit(EXIT_FAILURE); | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
226 } |
116 | 227 |
228 | |
119 | 229 } |
116 | 230 */ |
95 | 231 |
116 | 232 /* |
0 | 233 static void |
234 gSprite_Create() | |
235 { | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
236 int i; |
0 | 237 |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
238 for (i=0; i<DEFOBJ; i++) { |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
239 if (ps2util_sprite_Create(&sp[i], sprite_tex) == -1) { |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
240 fprintf(stderr, |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
241 "cannot create sprite No.%d - create_sprite()\n", i); |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
242 fflush(stderr); |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
243 exit(EXIT_FAILURE); |
0 | 244 } |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
245 ps2util_sprite_Unuse_alpha(&sp[i]); |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
246 } |
116 | 247 |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
248 flag_spriteInited = false; |
116 | 249 |
0 | 250 } |
116 | 251 */ |
252 | |
0 | 253 |
95 | 254 void |
0 | 255 gSprite_Init() |
256 { | |
119 | 257 droot->createFromXMLfile("xml_file/title.xml"); |
258 | |
122 | 259 droot->createFromXMLfile("xml_file/select.xml"); |
260 droot->createFromXMLfile("xml_file/sp_meter.xml"); | |
261 droot->createFromXMLfile("xml_file/r_arrow.xml"); | |
262 droot->createFromXMLfile("xml_file/l_arrow.xml"); | |
263 droot->createFromXMLfile("xml_file/km.xml"); | |
264 droot->createFromXMLfile("xml_file/rap.xml"); | |
265 droot->createFromXMLfile("xml_file/1p.xml"); | |
266 droot->createFromXMLfile("xml_file/2p.xml"); | |
267 droot->createFromXMLfile("xml_file/select_car_1.xml"); | |
268 droot->createFromXMLfile("xml_file/select_car_2.xml"); | |
269 droot->createFromXMLfile("xml_file/select_car_3.xml"); | |
270 droot->createFromXMLfile("xml_file/select_corse_1.xml"); | |
271 droot->createFromXMLfile("xml_file/select_corse_2.xml"); | |
272 | |
273 | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
274 ps2util_graphic_Init(); |
116 | 275 //gSprite_Init_Png("img/main2.png"); |
276 //gSprite_Create(); // スプライト生成 | |
118 | 277 |
119 | 278 // testCoeler |
122 | 279 int tc = 1; |
280 | |
281 gSprite_DefSprite( TITLE, "title", 512, 666, tc); // タイトル | |
282 gSprite_DefSprite( SELECT, "select", 33, 33, tc); // 選択マーク | |
283 gSprite_DefSprite( SP_METER, "sp_meter", 106, 34, tc); // スピードメーター | |
284 gSprite_DefSprite( R_ARROW, "r_arrow", 18, 20, tc); // 右矢印 | |
285 gSprite_DefSprite( L_ARROW, "l_arrow", 17, 20, tc); // 左矢印 | |
286 gSprite_DefSprite( KM, "km", 55, 26, tc); // km/h | |
287 gSprite_DefSprite( RAP, "rap", 39, 26, tc); // Rap | |
126 | 288 gSprite_DefSprite( PLAYER_1, "1P", 53, 46, tc); // 1p |
289 gSprite_DefSprite( PLAYER_2, "2P", 53, 46, tc); // 2P | |
122 | 290 gSprite_DefSprite( SELECT_CAR_1, "select_car_1", 165, 140, tc); // 選択画面の車 |
291 gSprite_DefSprite( SELECT_CAR_2, "select_car_2", 165, 140, tc); | |
292 gSprite_DefSprite( SELECT_CAR_3, "select_car_3", 165, 140, tc); | |
293 gSprite_DefSprite( SELECT_CORSE_1, "select_corse_1", 148, 114, tc); // 選択画面のコース | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
294 // 本当は (82, 272,...)です。二つ目のコース絵がないので |
122 | 295 gSprite_DefSprite( SELECT_CORSE_2, "select_corse_2", 148, 114 ,tc); |
0 | 296 |
95 | 297 } |
90
8edae89a3877
compile on Mac OS X
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
88
diff
changeset
|
298 |
95 | 299 |
0 | 300 static void |
301 gSprite_Clear() | |
302 { | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
303 int i; |
0 | 304 |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
305 for (i=0; i<DEFOBJ; i++) { |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
306 sprite_disappear(&sp[i].attribute); |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
307 } |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
308 sp_counter = 0; |
0 | 309 } |
95 | 310 |
116 | 311 |
312 | |
0 | 313 void |
314 gSprite_Draw_Reset() | |
315 { | |
96
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
316 if (flag_spriteInited == true) { |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
317 gSprite_Clear(); |
0b65ca27f113
compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents:
95
diff
changeset
|
318 } |
0 | 319 } |
95 | 320 |
0 | 321 |
116 | 322 |
0 | 323 void |
324 gSprite_PutSprite_Pause() | |
325 { | |
326 } |