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 }