Mercurial > hg > old > magoroku_racing
comparison field.cc @ 130:4f50f5a3b363
new repository
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 22 Jul 2011 18:20:17 +0900 |
parents | d88dfd3d46c5 |
children | 993d5f7e5f30 |
comparison
equal
deleted
inserted
replaced
129:d88dfd3d46c5 | 130:4f50f5a3b363 |
---|---|
8 #include "field.h" | 8 #include "field.h" |
9 #include "car.h" | 9 #include "car.h" |
10 #include "quotanion.h" | 10 #include "quotanion.h" |
11 #include <stdbool.h> | 11 #include <stdbool.h> |
12 | 12 |
13 #include "Application.h" | 13 #include "gSprite.h" |
14 #include "getStrFromFile.h" | |
15 | |
14 | 16 |
15 #define BUFSIZE 256 | 17 #define BUFSIZE 256 |
16 | 18 |
17 /* --- main.c --- */ | 19 /* --- main.c --- */ |
18 extern FILE *main_fp; | 20 extern FILE *main_fp; |
28 static FieldPtr field_list; | 30 static FieldPtr field_list; |
29 | 31 |
30 // 現在走ってるfield | 32 // 現在走ってるfield |
31 static FieldPtr field_actual; | 33 static FieldPtr field_actual; |
32 | 34 |
33 extern Viewer *droot; | |
34 | 35 |
35 // 適当に自作:miya | 36 // 適当に自作:miya |
36 PolygonInfo* xml_read_file(char *colImg) | 37 PolygonInfo* xml_read_file(char *colImg) |
37 { | 38 { |
38 PolygonInfo* test; | 39 PolygonInfo* test; |
40 | 41 |
41 return test; | 42 return test; |
42 } | 43 } |
43 | 44 |
44 | 45 |
45 | |
46 static FieldPtr | 46 static FieldPtr |
47 field_create(char *fieldImg, char *colImg )// OBJECT *tex) | 47 field_create(char *fieldImg, char *colImg, int number ) |
48 { | 48 { |
49 FieldPtr self; | 49 FieldPtr self; |
50 OBJECT *obj; | 50 OBJECT *obj; |
51 void *free_addr; | 51 |
52 | 52 // PolygonInfo *xml; |
53 // xmlファイル内で名前を個別に付けました | 53 void *free_addr; |
54 // 初期化 | 54 |
55 droot->createFromXMLfile(fieldImg); | 55 FVECTOR location = {0, 0, 0, 1}; |
56 obj = droot->createSceneGraph("course_1_1"); | 56 FVECTOR direction = {0, 0, 0, 1}; |
57 | 57 |
58 droot->createFromXMLfile(colImg); | 58 obj = (OBJECT*)malloc(sizeof(OBJECT)); |
59 OBJECT *col_obj = droot->createSceneGraph("hoge"); | 59 |
60 // xmlから読み込み | |
61 call_createFromXMLfile(fieldImg); | |
62 | |
63 /*sStr から eStrまでの間の文字列を取得する */ | |
64 const char *sStr = "surface name=\""; | |
65 const char *eStr = "\" size="; | |
60 | 66 |
61 if (malloc_align16(&free_addr, &self, sizeof(Field)) == -1) { | 67 // xmlファイルから surface name と 数を取得する |
68 obj->partNum = getStrFromFile( obj->partName, fieldImg, sStr, eStr ); | |
69 | |
70 memcpy(obj->xyz, location, sizeof(FVECTOR)); | |
71 memcpy(obj->angle, direction, sizeof(FVECTOR)); | |
72 | |
73 ps2util_obj_Renew_transMatrix(obj); | |
74 | |
75 if (malloc_align16(&free_addr, &self, sizeof(Field)) == -1 ) { | |
62 fprintf(stderr, "field.c: malloc_align16 error\n"); | 76 fprintf(stderr, "field.c: malloc_align16 error\n"); |
63 fflush(stderr); | 77 fflush(stderr); |
64 exit(EXIT_FAILURE); | 78 exit(EXIT_FAILURE); |
65 } | 79 } |
66 | 80 |
70 self->free_addr = free_addr; | 84 self->free_addr = free_addr; |
71 #ifdef DEBUG | 85 #ifdef DEBUG |
72 fprintf(main_fp, "malloc fieldNode addr = %x(free), %x(obj)\n", (int)free_addr, (int)self); | 86 fprintf(main_fp, "malloc fieldNode addr = %x(free), %x(obj)\n", (int)free_addr, (int)self); |
73 #endif | 87 #endif |
74 | 88 |
75 printf("col_init()の直前!\n"); | 89 col_init(&self->colface, colImg); |
76 // ちょっと今だけコメント --- | |
77 col_init(&self->colface, col_obj); | |
78 | 90 |
79 #ifdef DEBUG | 91 #ifdef DEBUG |
80 fprintf(main_fp, " facenum = %d\n", self->colface.facenum); | 92 fprintf(main_fp, " facenum = %d\n", self->colface.facenum); |
81 fprintf(main_fp, " facenum = %x(free), ", (int)self->colface.free_addr); | 93 fprintf(main_fp, " facenum = %x(free), ", (int)self->colface.free_addr); |
82 fprintf(main_fp, "facenum = %x(obj)\n", (int)self->colface.colface); | 94 fprintf(main_fp, "facenum = %x(obj)\n", (int)self->colface.colface); |
84 | 96 |
85 return self; | 97 return self; |
86 } | 98 } |
87 | 99 |
88 | 100 |
89 | |
90 /* | |
91 static FieldPtr | |
92 field_create(char *fieldImg, char *colImg)//, TEXTURE* tex) | |
93 { | |
94 FieldPtr self; | |
95 OBJECT *obj; | |
96 PolygonInfo *xml; | |
97 void *free_addr; | |
98 | |
99 FVECTOR location = {0, 0, 0, 1}; | |
100 FVECTOR direction = {0, 0, 0, 1}; | |
101 | |
102 // 今はなにもしてない. | |
103 obj = ps2util_obj_Create_fromXML(fieldImg); | |
104 ps2util_obj_Set_effect(obj, DEFAULT_SET); | |
105 // ps2util_obj_Set_texture(obj, tex); | |
106 | |
107 obj = (OBJECT*)malloc(sizeof(OBJECT)); | |
108 | |
109 memcpy(obj->xyz, location, sizeof(FVECTOR)); | |
110 memcpy(obj->angle, direction, sizeof(FVECTOR)); | |
111 | |
112 ps2util_obj_Renew_transMatrix(obj); | |
113 | |
114 | |
115 // ここでxml->sizの数も数えてたんだろうね | |
116 xml = xml_read_file(colImg); // | |
117 | |
118 if (malloc_align16(&free_addr, &self, sizeof(Field)) == -1) { | |
119 fprintf(stderr, "field.c: malloc_align16 error\n"); | |
120 fflush(stderr); | |
121 exit(EXIT_FAILURE); | |
122 } | |
123 self->object = obj; | |
124 self->next = NULL; | |
125 self->prev = NULL; | |
126 self->free_addr = free_addr; | |
127 #ifdef DEBUG | |
128 fprintf(main_fp, "malloc fieldNode addr = %x(free), %x(obj)\n", (int)free_addr, (int)self); | |
129 #endif | |
130 | |
131 col_init(&self->colface, xml); | |
132 | |
133 #ifdef DEBUG | |
134 fprintf(main_fp, " facenum = %d\n", self->colface.facenum); | |
135 fprintf(main_fp, " facenum = %x(free), ", (int)self->colface.free_addr); | |
136 fprintf(main_fp, "facenum = %x(obj)\n", (int)self->colface.colface); | |
137 #endif | |
138 //xml_free(xml); | |
139 return self; | |
140 } | |
141 */ | |
142 | |
143 static void | 101 static void |
144 field_new_readCSV(FILE *fp, int id) | 102 field_new_readCSV(FILE *fp, int id) |
145 { | 103 { |
146 FieldPtr fieldHead = NULL; | 104 FieldPtr fieldHead = NULL; |
147 FieldPtr newField = NULL; | 105 FieldPtr newField = NULL; |
148 FieldPtr prevField = NULL; | 106 FieldPtr prevField = NULL; |
149 char buff[BUFSIZE], *bufp; | 107 char buff[BUFSIZE], *bufp; |
150 char fieldImg[BUFSIZE], colImg[BUFSIZE];//, texname[BUFSIZE]; | 108 char fieldImg[BUFSIZE], colImg[BUFSIZE];//, texname[BUFSIZE]; |
151 | 109 |
152 //TEXTURE *tex = NULL; | 110 //TEXTURE *tex = NULL; |
153 int course_id; | 111 int course_id; |
154 bool flag = false; | 112 bool flag = false; |
155 | 113 |
156 while ((bufp = fgets(buff, BUFSIZE, fp)) != NULL) { | 114 while ((bufp = fgets(buff, BUFSIZE, fp)) != NULL) { |
182 | 140 |
183 case 'c': // コースのロード | 141 case 'c': // コースのロード |
184 if (flag) { | 142 if (flag) { |
185 sscanf(bufp, " %s %s\n", fieldImg, colImg); | 143 sscanf(bufp, " %s %s\n", fieldImg, colImg); |
186 | 144 |
187 newField = field_create(fieldImg, colImg );//, tex); | 145 // field_num_max 番目のコース |
146 newField = field_create(fieldImg, colImg, field_num_max ); | |
188 | 147 |
189 if (!fieldHead) { | 148 if (!fieldHead) { |
190 fieldHead = prevField = newField; | 149 fieldHead = prevField = newField; |
191 } else { | 150 } else { |
192 prevField->next = newField; | 151 prevField->next = newField; |
203 | 162 |
204 } | 163 } |
205 } | 164 } |
206 | 165 |
207 | 166 |
208 FINISH_LOAD: | 167 FINISH_LOAD: |
209 // 先頭と最後尾のリンクを張る | 168 // 先頭と最後尾のリンクを張る |
210 newField->next = newField->init; | 169 newField->next = newField->init; |
211 newField->init->prev = newField; | 170 newField->init->prev = newField; |
212 | 171 |
213 field_list = field_actual = fieldHead; | 172 field_list = field_actual = fieldHead; |
238 } | 197 } |
239 | 198 |
240 static void | 199 static void |
241 field_draw(FieldPtr p) | 200 field_draw(FieldPtr p) |
242 { | 201 { |
243 // field_matrix | 202 ps2_vu0_unit_matrix(p->object->transfer); |
244 FMATRIX fm; | 203 |
245 | 204 // 並行移動の座標変換? |
246 changeMatrix( fm, p->object->matrix ); | |
247 | |
248 ps2_vu0_unit_matrix(fm); | |
249 | |
250 fm[3][0] = p->location[0]; | |
251 fm[3][1] = p->location[1]; | |
252 fm[3][2] = p->location[2]; | |
253 fm[3][3] = p->location[3]; | |
254 | |
255 returnMatrix( p->object->matrix, fm ); | |
256 | |
257 ps2util_obj_Draw(p->object); | |
258 | |
259 /* | |
260 p->object->transfer[3][0] = p->location[0]; | 205 p->object->transfer[3][0] = p->location[0]; |
261 p->object->transfer[3][1] = p->location[1]; | 206 p->object->transfer[3][1] = p->location[1]; |
262 p->object->transfer[3][2] = p->location[2]; | 207 p->object->transfer[3][2] = p->location[2]; |
263 p->object->transfer[3][3] = p->location[3]; | 208 p->object->transfer[3][3] = p->location[3]; |
264 */ | 209 |
265 | 210 // 下の行はしないで良いのか |
266 //ps2util_obj_Draw(p->object); | 211 // memcpy(p->object->xyz, p->location, sizeof(FVECTOR)); |
212 //memcpy(p->object->angle, p->direction, sizeof(FVECTOR)); | |
213 | |
214 gSprite_PutObject( COURSE1_1, p->object ); | |
215 | |
267 } | 216 } |
268 | 217 |
269 | 218 |
270 void field_update(CarPtr car) | 219 void field_update(CarPtr car) |
271 { | 220 { |
272 FieldPtr p; | 221 FieldPtr p; |
273 | 222 |
274 p = field_actual; | 223 p = field_actual; |
275 | 224 |
276 // current | 225 //current |
277 p->location[0] = -car->location[0]; | 226 p->location[0] = -car->location[0]; |
278 p->location[1] = -car->location[1]; | 227 p->location[1] = -car->location[1]; |
279 p->location[2] = -car->location[2]; | 228 p->location[2] = -car->location[2]; |
280 p->location[3] = 1; | 229 p->location[3] = 1; |
281 field_draw(p); | 230 field_draw(p); |
297 p->location[1] = -car->location[1]; | 246 p->location[1] = -car->location[1]; |
298 p->location[2] = -car->location[2]; | 247 p->location[2] = -car->location[2]; |
299 p->location[3] = 1; | 248 p->location[3] = 1; |
300 field_draw(p); | 249 field_draw(p); |
301 } | 250 } |
251 | |
302 } | 252 } |
303 | 253 |
304 void | 254 void |
305 field_destroy() | 255 field_destroy() |
306 { | 256 { |
307 /* | 257 /* |
308 FieldPtr p = field_list; | 258 FieldPtr p = field_list; |
309 FieldPtr d; | 259 FieldPtr d; |
310 | |
311 | 260 |
312 TEXTURE *t; | 261 TEXTURE *t; |
313 | 262 |
314 p->prev->next = NULL; | 263 p->prev->next = NULL; |
315 | 264 |