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