diff 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
line wrap: on
line diff
--- a/field.cc	Thu Jul 07 17:47:47 2011 +0900
+++ b/field.cc	Fri Jul 22 18:20:17 2011 +0900
@@ -10,7 +10,9 @@
 #include "quotanion.h"
 #include <stdbool.h>
 
-#include "Application.h"
+#include "gSprite.h"
+#include "getStrFromFile.h"
+
 
 #define BUFSIZE 256
 
@@ -30,7 +32,6 @@
 // 現在走ってるfield
 static FieldPtr field_actual;
 
-extern Viewer	*droot;
 
 // 適当に自作:miya
 PolygonInfo* xml_read_file(char *colImg)
@@ -42,23 +43,36 @@
 }
 
 
-
 static FieldPtr
-field_create(char *fieldImg, char *colImg )// OBJECT *tex)
+field_create(char *fieldImg, char *colImg, int number )
 {
-  FieldPtr	self;
-  OBJECT	*obj;
-  void		*free_addr;
+  FieldPtr    self;
+  OBJECT      *obj;
+
+  //  PolygonInfo *xml;
+  void *free_addr;
+
+  FVECTOR location  = {0, 0, 0, 1};
+  FVECTOR direction = {0, 0, 0, 1};
 
-  // xmlファイル内で名前を個別に付けました
-  // 初期化
-  droot->createFromXMLfile(fieldImg);
-  obj = droot->createSceneGraph("course_1_1");
+  obj = (OBJECT*)malloc(sizeof(OBJECT));
+    
+  // xmlから読み込み
+  call_createFromXMLfile(fieldImg);
 
-  droot->createFromXMLfile(colImg);
-  OBJECT *col_obj = droot->createSceneGraph("hoge");
+  /*sStr から eStrまでの間の文字列を取得する */
+  const char    *sStr = "surface name=\"";
+  const char    *eStr = "\" size=";
   
-  if (malloc_align16(&free_addr, &self, sizeof(Field)) == -1) {
+  // xmlファイルから surface name と 数を取得する
+  obj->partNum = getStrFromFile( obj->partName, fieldImg, sStr, eStr );
+
+  memcpy(obj->xyz,    location, sizeof(FVECTOR));
+  memcpy(obj->angle, direction, sizeof(FVECTOR));
+
+  ps2util_obj_Renew_transMatrix(obj);
+
+  if (malloc_align16(&free_addr, &self, sizeof(Field)) == -1 ) {
     fprintf(stderr, "field.c: malloc_align16 error\n");
     fflush(stderr);
     exit(EXIT_FAILURE);
@@ -72,9 +86,7 @@
   fprintf(main_fp, "malloc fieldNode addr = %x(free), %x(obj)\n", (int)free_addr, (int)self);
 #endif
 
-  printf("col_init()の直前!\n");
-  // ちょっと今だけコメント ---
-  col_init(&self->colface, col_obj);
+  col_init(&self->colface, colImg);
 
 #ifdef DEBUG
   fprintf(main_fp, "       facenum = %d\n", self->colface.facenum);
@@ -86,60 +98,6 @@
 }
 
 
-
-/*
-static FieldPtr
-field_create(char *fieldImg, char *colImg)//, TEXTURE* tex)
-{
-  FieldPtr    self;
-  OBJECT      *obj;
-  PolygonInfo *xml;
-  void *free_addr;
-
-  FVECTOR location  = {0, 0, 0, 1};
-  FVECTOR direction = {0, 0, 0, 1};
-
-  // 今はなにもしてない. 
-  obj = ps2util_obj_Create_fromXML(fieldImg);
-  ps2util_obj_Set_effect(obj, DEFAULT_SET);
-  //  ps2util_obj_Set_texture(obj, tex);
-
-  obj = (OBJECT*)malloc(sizeof(OBJECT));
-
-  memcpy(obj->xyz,    location, sizeof(FVECTOR));
-  memcpy(obj->angle, direction, sizeof(FVECTOR));
-
-  ps2util_obj_Renew_transMatrix(obj);
-
-  
-  // ここでxml->sizの数も数えてたんだろうね
-  xml = xml_read_file(colImg);    //
-
-  if (malloc_align16(&free_addr, &self, sizeof(Field)) == -1) {
-    fprintf(stderr, "field.c: malloc_align16 error\n");
-    fflush(stderr);
-    exit(EXIT_FAILURE);
-  }
-  self->object = obj;
-  self->next   = NULL;
-  self->prev   = NULL;
-  self->free_addr = free_addr;
-#ifdef DEBUG
-  fprintf(main_fp, "malloc fieldNode addr = %x(free), %x(obj)\n", (int)free_addr, (int)self);
-#endif
-
-  col_init(&self->colface, xml);
- 
-#ifdef DEBUG
-  fprintf(main_fp, "       facenum = %d\n", self->colface.facenum);
-  fprintf(main_fp, "       facenum = %x(free), ", (int)self->colface.free_addr);
-  fprintf(main_fp, "facenum = %x(obj)\n", (int)self->colface.colface);
-#endif
-  //xml_free(xml);
-  return self;
-}
-*/
-
 static void
 field_new_readCSV(FILE *fp, int id)
 {
@@ -148,7 +106,7 @@
   FieldPtr prevField = NULL;
   char buff[BUFSIZE], *bufp;
   char fieldImg[BUFSIZE], colImg[BUFSIZE];//, texname[BUFSIZE];
-
+ 
   //TEXTURE *tex = NULL;
   int course_id;
   bool flag = false;
@@ -184,7 +142,8 @@
       if (flag) {
 	sscanf(bufp, " %s %s\n", fieldImg, colImg);
 
-	newField = field_create(fieldImg, colImg );//, tex);
+	// field_num_max 番目のコース
+	newField = field_create(fieldImg, colImg, field_num_max );
 	
 	if (!fieldHead) {
 	  fieldHead = prevField = newField;
@@ -205,7 +164,7 @@
   }
 
 
- FINISH_LOAD:
+  FINISH_LOAD:
   // 先頭と最後尾のリンクを張る
   newField->next = newField->init;
   newField->init->prev = newField;
@@ -240,40 +199,30 @@
 static void
 field_draw(FieldPtr p)
 {
-  // field_matrix
-  FMATRIX fm;
-
-  changeMatrix( fm, p->object->matrix );
-  
-  ps2_vu0_unit_matrix(fm);
+  ps2_vu0_unit_matrix(p->object->transfer);
 
-  fm[3][0] = p->location[0];
-  fm[3][1] = p->location[1];
-  fm[3][2] = p->location[2];
-  fm[3][3] = p->location[3];
-
-  returnMatrix( p->object->matrix, fm );
-
-  ps2util_obj_Draw(p->object);
-    
-  /*
+  // 並行移動の座標変換?
   p->object->transfer[3][0] = p->location[0];
   p->object->transfer[3][1] = p->location[1];
   p->object->transfer[3][2] = p->location[2];
   p->object->transfer[3][3] = p->location[3];
-  */
 
-  //ps2util_obj_Draw(p->object);
+  // 下の行はしないで良いのか
+  //  memcpy(p->object->xyz,   p->location,  sizeof(FVECTOR));
+  //memcpy(p->object->angle, p->direction, sizeof(FVECTOR));
+
+  gSprite_PutObject( COURSE1_1, p->object );
+
 }
 
 
 void field_update(CarPtr car)
 {
   FieldPtr p;
-
+  
   p = field_actual;
  
-  // current
+  //current
   p->location[0] = -car->location[0];
   p->location[1] = -car->location[1];
   p->location[2] = -car->location[2];
@@ -299,6 +248,7 @@
     p->location[3] = 1;
     field_draw(p);
   }
+
 }
 
 void
@@ -307,7 +257,6 @@
   /*
   FieldPtr p = field_list;
   FieldPtr d;
-
   
   TEXTURE *t;