diff car.cc @ 128:d9e3137e70a0

xml name change
author e085768
date Thu, 07 Jul 2011 16:10:21 +0900
parents 030394675d8e
children 4f50f5a3b363
line wrap: on
line diff
--- a/car.cc	Wed Jul 06 21:46:37 2011 +0900
+++ b/car.cc	Thu Jul 07 16:10:21 2011 +0900
@@ -12,7 +12,7 @@
 #include "game.h"
 #include "stdbool.h"
 
-#include "Application.h"
+#include "gSprite.h"
 
 #define DEFAULT_SET (EFFECT_TEXTURE_USE | EFFECT_ALPHABLEND_UNUSE | EFFECT_SHADING_FLAT)
 #define BUFSIZE 256
@@ -23,8 +23,6 @@
 
 extern FILE* main_fp;
 
-extern Viewer	*droot;
-
 static CarPtr
 car_create(int car_id, char *filename, char *texname, float speed_accel,
 	   float speed_max, float rot, float brake)
@@ -38,19 +36,27 @@
   body = ps2util_obj_Create_fromXML(filename);
   ps2util_obj_Set_effect(body, DEFAULT_SET);
 
+  // xmlファイルから読み込み
+  call_createFromXMLfile(filename);
+
+  gSprite_DefSprite( CAR_BODY, "body", 0, 0, 0);
+  gSprite_DefSprite( CAR_TIRE_TOP_R, "top_r", 0, 0, 0);
+  gSprite_DefSprite( CAR_TIRE_TOP_L, "top_l", 0, 0, 0);
+  gSprite_DefSprite( CAR_TIRE_BTM_R, "btm_l", 0, 0, 0);
+  gSprite_DefSprite( CAR_TIRE_BTM_L, "top_l", 0, 0, 0);
+
+  // 初期化 
+  body = call_createSceneGraph();
+
   if (malloc_align16(&free_addr, &car, sizeof(Car)) == -1) {
     fprintf(main_fp, "car.c: malloc_align16 error\n");
     exit(EXIT_FAILURE);	
   }
 
-  // 初期化はこれが正解だった
-  body = droot->createSceneGraph();
+  car->body           = body;
 
-  //  car->body = new OBJECT();
-  //  car->body = (OBJECT*)malloc(sizeof(OBJECT));
+  car->next           = NULL;
   
-  car->body           = body;
-  car->next           = NULL;
   car->speed          = 0.0;
   car->speed_accel    = speed_accel;
   car->speed_max      = speed_max;
@@ -59,8 +65,6 @@
   car->y_angle        = 0.0;
   car->free_addr      = free_addr;
 
-  //  car->body = new OBJECT();
-  //  car->body = (OBJECT*)malloc(sizeof(OBJECT));
   
   ps2_vu0_copy_vector(car->direction, direction);
   ps2_vu0_copy_vector(car->location, location);
@@ -96,7 +100,8 @@
   float speed_accel, speed_max, brake, rot;
   char  buff[BUFSIZE], *bufp;
   char  carImg[BUFSIZE], texImg[BUFSIZE];
-  bool  flag;
+
+  bool  flag; // 探したい車が見つかったらture
 
   flag = false;
 
@@ -107,7 +112,9 @@
     switch (buff[0]) {
     case 'n':
       if (flag == false) {
-	sscanf(bufp, " %d\n", &car_id); // car_id = nの後ろの数字一文字
+	
+	// car_id = car/car.datファイルのnの後ろの数字一文字
+	sscanf(bufp, " %d\n", &car_id); 
 	if (id == car_id) {
 	  flag = true;
 	}
@@ -158,14 +165,16 @@
 car_swerve(CarPtr car, int flg)
 {
   FMATRIX rot;
-  FVECTOR v;
-
+    
   car->y_angle += (float)flg*car->rotation_angle;
   car->y_angle += (car->y_angle < 0) ? 360.0 : 0;
   car->y_angle += (car->y_angle > 360.0) ? -360.0 : 0;
 
+  // 下2行目でなんか2重に処理してる気がするけど別に良いのか
   ps2_vu0_unit_matrix(rot);
   ps2_vu0_rot_matrix_y(rot, rot, degree2radian((float)flg*car->rotation_angle));
+
+  FVECTOR v;
   ps2_vu0_copy_vector(v, car->direction);
   ps2_vu0_apply_matrix(car->direction, rot, v); 
 }
@@ -178,7 +187,11 @@
 car_accelerate(CarPtr car, int flg)
 {
   car->speed += (flg == 1) ? car->speed_accel : -car->brake;
+
+  // speedが0以下にならんように
   car->speed = (car->speed < 0) ? 0 : car->speed;
+
+  // speedがMax超えないように
   car->speed = (car->speed > car->speed_max) ? car->speed_max : car->speed;
 }
 
@@ -239,24 +252,38 @@
 {
   FVECTOR mov, prev_location;
 
+  // movは車の移動量を計算して入れるのかな。たぶん
   ps2_vu0_scale_vector(mov, car->direction, car->speed);
+
+  // 前フレームのcar->locationをprev_locationに保存
   ps2_vu0_copy_vector(prev_location, car->location);
+
+  // 車の現在地 = 車の位置 + 移動量 だと思う多分
   ps2_vu0_add_vector(car->location, car->location, mov);
 
+  // いまちょっとコメントアウト:miya
+
+  /*
+     // 壁にぶつかった時の処理
   if (car_field_check(game,car) == false) {
     ps2_vu0_copy_vector(car->location, prev_location);
     car->speed = car->speed*0.5;
   }
+  */
+
 }
 
 
 static void
 car_axis_rotation(CarPtr car)
 {
-  FMATRIX pose, yrot, yrotinv;
+  FMATRIX pose, // 最後にcar->transferにコピーしてる 
+    yrot,
+    yrotinv;
 
   ps2_vu0_unit_matrix(yrot);
   ps2_vu0_rot_matrix_y(yrot, yrot, -degree2radian(car->y_angle));
+  
   ps2_vu0_unit_matrix(yrotinv);
   ps2_vu0_rot_matrix_y(yrotinv, yrotinv, degree2radian(car->y_angle));
 
@@ -264,7 +291,7 @@
     FVECTOR yd = {0, -1, 0, 1};
     FVECTOR rotaxis;
     FVECTOR q;
-	
+
     ps2_vu0_outer_product(rotaxis, car->vertical, yd);
     {
       float scale=1/NORM(rotaxis);
@@ -272,22 +299,32 @@
       rotaxis[1] *= scale;
       rotaxis[2] *= scale;
     }
-	
+
     quotanion(q, rotaxis, acos(ps2_vu0_inner_product(yd, car->vertical)/(NORM(yd)*NORM(car->vertical))));
     quotanion_rotmatrix(pose, q);
   }
 
   ps2_vu0_mul_matrix(pose, yrot, pose);
   ps2_vu0_mul_matrix(pose, pose, yrotinv);
-  // ps2_vu0_copy_matrix(car->body->transfer, pose);
-  ps2_vu0_copy_matrix((FMATRIX)(car->body->matrix), pose);
-  ps2_vu0_rot_matrix_y((FMATRIX)(car->body->matrix), (FMATRIX)(car->body->matrix) , degree2radian(car->y_angle));
+
+
+  FMATRIX carMrix; // car->body->matrix をFMATRIX型に変換して計算したい
+
+  changeMatrix( carMrix, car->body->matrix );
+  
+  //ps2_vu0_copy_matrix(car->body->transfer, pose);  
+  ps2_vu0_copy_matrix( carMrix, pose);
+  
+  //  ps2_vu0_rot_matrix_y(car->body->transfer, car->body->transfer, degree2radian(car->y_angle));
+  ps2_vu0_rot_matrix_y(carMrix, carMrix, degree2radian(car->y_angle));
+
+  returnMatrix( car->body->matrix, carMrix );
 }
 
 
 void car_update( Game *game, CarPtr car )
 {
-  // 移動
+  // 移動 ここで壁との当たり判定もしとる
   car_move(game,car);
 
   // 摩擦による速度減少