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