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