annotate car.cc @ 124:6ef3b0efdeaf

test
author e085768
date Thu, 30 Jun 2011 12:43:18 +0900
parents 5219bf3d5e71
children c62fec1dd2f8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
100
e5f2eb98b575 change cc
e085768
parents: 99
diff changeset
1 /* Car.c */
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
2
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
3 #include <stdio.h>
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
4 #include <stdlib.h>
90
8edae89a3877 compile on Mac OS X
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
5 #include <stdbool.h>
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
6 #include "libps2.h"
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
7 #include "ps2util.h"
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
8 #include "field.h"
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
9 #include "car.h"
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
10 #include "mytype.h"
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
11 #include "quotanion.h"
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
12 #include "game.h"
90
8edae89a3877 compile on Mac OS X
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
13 #include "stdbool.h"
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
14
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
15 #define DEFAULT_SET (EFFECT_TEXTURE_USE | EFFECT_ALPHABLEND_UNUSE | EFFECT_SHADING_FLAT)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
16 #define BUFSIZE 256
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
17
88
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
18 /* 初期位置と初期方向 */
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
19 static FVECTOR location = {0, 0, 0, 1};
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
20 static FVECTOR direction = {0, 0, 1, 1};
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
21
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
22 extern FILE* main_fp;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
23
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
24 static CarPtr
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
25 car_create(int car_id, char *filename, char *texname, float speed_accel,
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
26 float speed_max, float rot, float brake)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
27 {
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
28 CarPtr car;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
29 OBJECT *body;
115
31dd5c07f7c1 class OBJECT:SceanGraph
e085768
parents: 100
diff changeset
30 //TEXTURE* tex;
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
31 void *free_addr;
118
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
32
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
33 body = ps2util_obj_Create_fromXML(filename);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
34 ps2util_obj_Set_effect(body, DEFAULT_SET);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
35
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
36 if (malloc_align16(&free_addr, &car, sizeof(Car)) == -1) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
37 fprintf(main_fp, "car.c: malloc_align16 error\n");
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
38 exit(EXIT_FAILURE);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
39 }
122
5219bf3d5e71 title_draw
e085768
parents: 118
diff changeset
40
5219bf3d5e71 title_draw
e085768
parents: 118
diff changeset
41 // car->body = new OBJECT();
5219bf3d5e71 title_draw
e085768
parents: 118
diff changeset
42 car->body = (OBJECT*)malloc(sizeof(OBJECT));
5219bf3d5e71 title_draw
e085768
parents: 118
diff changeset
43
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
44 car->body = body;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
45 car->next = NULL;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
46 car->speed = 0.0;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
47 car->speed_accel = speed_accel;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
48 car->speed_max = speed_max;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
49 car->brake = brake;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
50 car->rotation_angle = rot;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
51 car->y_angle = 0.0;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
52 car->free_addr = free_addr;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
53
118
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
54 // car->body = new OBJECT();
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
55 // car->body = (OBJECT*)malloc(sizeof(OBJECT));
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
56
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
57 ps2_vu0_copy_vector(car->direction, direction);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
58 ps2_vu0_copy_vector(car->location, location);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
59 INIT_VECTOR(car->vertical, 0, -1, 0, 1);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
60 INIT_VECTOR(car->body->xyz, 0, 0, 0, 1);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
61 INIT_VECTOR(car->body->angle, 0, 0, 0, 1);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
62
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
63 ps2util_obj_Renew_transMatrix(car->body);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
64 ps2util_obj_Set_effect(car->body, DEFAULT_SET);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
65
115
31dd5c07f7c1 class OBJECT:SceanGraph
e085768
parents: 100
diff changeset
66 /*
118
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
67 if (*texname != 'n') {
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
68 tex = read_png_file(texname);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
69 ps2util_tex_Set(tex);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
70 ps2util_obj_Set_texture(car->body, tex);
118
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
71 }
115
31dd5c07f7c1 class OBJECT:SceanGraph
e085768
parents: 100
diff changeset
72 */
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
73
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
74 #ifdef DEBUG
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
75 fprintf(main_fp, "malloc car addr = %x\n", (int)free_addr);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
76 #endif
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
77
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
78 return car;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
79 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
80
122
5219bf3d5e71 title_draw
e085768
parents: 118
diff changeset
81 // idは 1 か 2 か 3 で引数取ってこないと落ちるよ
5219bf3d5e71 title_draw
e085768
parents: 118
diff changeset
82 // car/car.dat ファイル内に3つしか車のデータ無から
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
83 static CarPtr
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
84 car_new_readCSV(FILE *fp, int id)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
85 {
100
e5f2eb98b575 change cc
e085768
parents: 99
diff changeset
86 CarPtr newCar;
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
87 int car_id;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
88 float speed_accel, speed_max, brake, rot;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
89 char buff[BUFSIZE], *bufp;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
90 char carImg[BUFSIZE], texImg[BUFSIZE];
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
91 bool flag;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
92
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
93 flag = false;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
94
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
95 while ((bufp = fgets(buff, BUFSIZE, fp)) != NULL) {
116
ed702e49cc6c conpile
e085768
parents: 115
diff changeset
96
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
97 bufp++;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
98
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
99 switch (buff[0]) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
100 case 'n':
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
101 if (flag == false) {
122
5219bf3d5e71 title_draw
e085768
parents: 118
diff changeset
102 sscanf(bufp, " %d\n", &car_id); // car_id = nの後ろの数字一文字
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
103 if (id == car_id) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
104 flag = true;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
105 }
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
106 }
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
107 break;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
108 case 't':
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
109 if (flag == true) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
110 sscanf(bufp, " %s %s %f %f %f %f\n",
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
111 carImg, texImg, &speed_accel, &speed_max, &rot, &brake);
100
e5f2eb98b575 change cc
e085768
parents: 99
diff changeset
112 newCar = car_create(id, carImg, texImg,
115
31dd5c07f7c1 class OBJECT:SceanGraph
e085768
parents: 100
diff changeset
113 speed_accel, speed_max, rot, brake);
100
e5f2eb98b575 change cc
e085768
parents: 99
diff changeset
114 return newCar;
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
115 }
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
116 break;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
117 default:
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
118 break;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
119 }
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
120 }
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
121
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
122 /* ここまで辿り着いたら読み込み失敗 */
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
123 fprintf(main_fp, "error - car_new_readCSV\n");
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
124 exit(EXIT_FAILURE);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
125 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
126
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
127 CarPtr car_init(int id)
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
128 {
100
e5f2eb98b575 change cc
e085768
parents: 99
diff changeset
129 CarPtr newCar;
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
130 FILE *fp;
100
e5f2eb98b575 change cc
e085768
parents: 99
diff changeset
131 const char *filename = "car/car.dat";
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
132
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
133 if (!(fp = fopen(filename, "r"))) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
134 fprintf(main_fp, "error read file %s\n", filename);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
135 exit(EXIT_FAILURE);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
136 }
116
ed702e49cc6c conpile
e085768
parents: 115
diff changeset
137
100
e5f2eb98b575 change cc
e085768
parents: 99
diff changeset
138 newCar = car_new_readCSV(fp, id);
116
ed702e49cc6c conpile
e085768
parents: 115
diff changeset
139
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
140 fclose(fp);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
141
100
e5f2eb98b575 change cc
e085768
parents: 99
diff changeset
142 return newCar;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
143 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
144
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
145 /*---------------------------
88
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
146 carをY軸で回転させる
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
147 flg: 回転方向 1:右, -1:左
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
148 ---------------------------*/
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
149 void
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
150 car_swerve(CarPtr car, int flg)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
151 {
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
152 FMATRIX rot;
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
153 FVECTOR v;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
154
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
155 car->y_angle += (float)flg*car->rotation_angle;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
156 car->y_angle += (car->y_angle < 0) ? 360.0 : 0;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
157 car->y_angle += (car->y_angle > 360.0) ? -360.0 : 0;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
158
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
159 ps2_vu0_unit_matrix(rot);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
160 ps2_vu0_rot_matrix_y(rot, rot, degree2radian((float)flg*car->rotation_angle));
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
161 ps2_vu0_copy_vector(v, car->direction);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
162 ps2_vu0_apply_matrix(car->direction, rot, v);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
163 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
164
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
165 /*----------------------------
88
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
166 carを加速・減速する
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
167 (flg == 1) ? 加速 : 減速
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
168 ---------------------------*/
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
169 void
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
170 car_accelerate(CarPtr car, int flg)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
171 {
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
172 car->speed += (flg == 1) ? car->speed_accel : -car->brake;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
173 car->speed = (car->speed < 0) ? 0 : car->speed;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
174 car->speed = (car->speed > car->speed_max) ? car->speed_max : car->speed;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
175 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
176
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
177
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
178 /*---------------------------------
88
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
179 進行後のcarに対してコース面の内外判定を行い、
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
180 : 現在のコース
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
181 : 現在のコースの次のコース
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
182 : 現在のコースの前のコース
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
183 に存在すればTRUEを返す
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
184 どのコースにも居ない(壁に衝突した)場合は
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
185 FALSEを返す。
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
186 ---------------------------------*/
90
8edae89a3877 compile on Mac OS X
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
187 static bool
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
188 car_field_check(Game *game ,CarPtr car)
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
189 {
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
190 FieldPtr p;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
191 FieldPtr f = field_get_actual();
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
192
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
193 // 現在のコースで衝突・内外判定
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
194 p = f;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
195 if (col_detect(&p->colface, car->vertical, car->location) == true) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
196 goto FIELD_CHECK_OK;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
197 }
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
198
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
199 // 現在のコースの次に隣接するコースで衝突・内外判定
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
200 p = f->next;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
201 if (col_detect(&p->colface, car->vertical, car->location) == true) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
202 if (field_rap_increment(1)) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
203 game->rap++;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
204 }
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
205 goto FIELD_CHECK_OK;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
206 }
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
207
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
208 // 現在のコースの前に隣接するコースで衝突・内外判定
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
209 p = f->prev;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
210 if (col_detect(&p->colface, car->vertical, car->location) == true) {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
211 field_rap_increment(-1);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
212 goto FIELD_CHECK_OK;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
213 }
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
214
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
215 // どのコース上にも居ない(壁に衝突)
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
216 return false;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
217
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
218 FIELD_CHECK_OK:
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
219 field_set_actual(p);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
220 return true;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
221 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
222
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
223
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
224 /*------------------------------
88
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
225 速度speedと向きdirectionから
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
226 進行後の位置locationを求める。
ce9ef7dcf2f0 convert UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
227 また、進行後の衝突判定も行う。
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
228 ------------------------------*/
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
229 static void
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
230 car_move(Game *game,CarPtr car)
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
231 {
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
232 FVECTOR mov, prev_location;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
233
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
234 ps2_vu0_scale_vector(mov, car->direction, car->speed);
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
235 ps2_vu0_copy_vector(prev_location, car->location);
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
236 ps2_vu0_add_vector(car->location, car->location, mov);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
237
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
238 if (car_field_check(game,car) == false) {
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
239 ps2_vu0_copy_vector(car->location, prev_location);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
240 car->speed = car->speed*0.5;
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
241 }
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
242 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
243
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
244
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
245 static void
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
246 car_axis_rotation(CarPtr car)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
247 {
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
248 FMATRIX pose, yrot, yrotinv;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
249
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
250 ps2_vu0_unit_matrix(yrot);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
251 ps2_vu0_rot_matrix_y(yrot, yrot, -degree2radian(car->y_angle));
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
252 ps2_vu0_unit_matrix(yrotinv);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
253 ps2_vu0_rot_matrix_y(yrotinv, yrotinv, degree2radian(car->y_angle));
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
254
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
255 {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
256 FVECTOR yd = {0, -1, 0, 1};
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
257 FVECTOR rotaxis;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
258 FVECTOR q;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
259
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
260 ps2_vu0_outer_product(rotaxis, car->vertical, yd);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
261 {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
262 float scale=1/NORM(rotaxis);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
263 rotaxis[0] *= scale;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
264 rotaxis[1] *= scale;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
265 rotaxis[2] *= scale;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
266 }
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
267
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
268 quotanion(q, rotaxis, acos(ps2_vu0_inner_product(yd, car->vertical)/(NORM(yd)*NORM(car->vertical))));
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
269 quotanion_rotmatrix(pose, q);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
270 }
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
271
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
272 ps2_vu0_mul_matrix(pose, yrot, pose);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
273 ps2_vu0_mul_matrix(pose, pose, yrotinv);
118
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
274 // ps2_vu0_copy_matrix(car->body->transfer, pose);
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
275 ps2_vu0_copy_matrix((FMATRIX)(car->body->matrix), pose);
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
276 ps2_vu0_rot_matrix_y((FMATRIX)(car->body->matrix), (FMATRIX)(car->body->matrix) , degree2radian(car->y_angle));
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
277 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
278
118
b6dc70f6aa7e chenge OBJECT->transfer
e085768
parents: 116
diff changeset
279
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
280 void car_update( Game *game, CarPtr car )
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
281 {
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
282 // 移動
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
283 car_move(game,car);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
284
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
285 // 摩擦による速度減少
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
286 car->speed -= 0.005;
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
287 car->speed = (car->speed < 0) ? 0 : car->speed;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
288
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
289 // 傾き
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
290 car_axis_rotation(car);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
291 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
292
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
293
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
294 void
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
295 car_destroy(CarPtr p)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
296 {
115
31dd5c07f7c1 class OBJECT:SceanGraph
e085768
parents: 100
diff changeset
297 /*
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
298 TEXTURE *t;
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
299
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
300 if ((t = p->body->surfaces->texture)) {
115
31dd5c07f7c1 class OBJECT:SceanGraph
e085768
parents: 100
diff changeset
301 //ps2util_tex_Exclude(t);
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
302 free_texture(t);
91
cb6c6de125dc halfway
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
303 }
115
31dd5c07f7c1 class OBJECT:SceanGraph
e085768
parents: 100
diff changeset
304 */
31dd5c07f7c1 class OBJECT:SceanGraph
e085768
parents: 100
diff changeset
305
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
306 ps2util_obj_Free(p->body);
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
307 free(p->free_addr);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
308
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
309 #ifdef DEBUG
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
310 fprintf(main_fp, "free car addr = %x\n", (int)p->free_addr);
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
311 #endif
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
312 }
96
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
313
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
314 // 適当に自作
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
315 void car_id_update(Game *game, CarPtr jiki)
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
316 {
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
317 printf("car_id_update\n");
0b65ca27f113 compile on Mac OS X 2
Atuto SHIROMA <e095729@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
318 }