annotate car.cc @ 115:31dd5c07f7c1

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