Rev 1655 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1655 | giacomo | 1 | #include <math.h> |
2 | #include "include/misc.h" |
||
3 | #include "include/simcity.h" |
||
4 | |||
5 | int my_rint(float num) { |
||
6 | return (int)floor(num+0.5); |
||
7 | } |
||
8 | |||
9 | void fill_table(void) { |
||
10 | int i; |
||
11 | for (i=0;i<360;i++) { |
||
12 | sine[i]=sin(DEG_TO_RAD(i)); |
||
13 | cosine[i]=cos(DEG_TO_RAD(i)); |
||
14 | } |
||
15 | } |
||
16 | |||
17 | void tl_init() { |
||
18 | //MAPX,MAPY |
||
19 | char col[2]; |
||
20 | short i; |
||
21 | |||
22 | col[0]='r'; |
||
23 | col[1]='g'; |
||
24 | for(i=0;i<MAX_TL;i++) { |
||
25 | tl_data_array[i].vpos=col[i%2]; |
||
26 | tl_data_array[i].period=(i+3)*SECOND; |
||
27 | tl_data_array[i].l.x+=MAPX; |
||
28 | tl_data_array[i].l.y+=MAPY; |
||
29 | tl_data_array[i].r.x+=MAPX; |
||
30 | tl_data_array[i].r.y+=MAPY; |
||
31 | tl_data_array[i].u.x+=MAPX; |
||
32 | tl_data_array[i].u.y+=MAPY; |
||
33 | tl_data_array[i].d.x+=MAPX; |
||
34 | tl_data_array[i].d.y+=MAPY; |
||
35 | } |
||
36 | } |
||
37 | |||
38 | void set_start_point() { |
||
39 | //MAPX,MAPY |
||
40 | starting_set_array[0].xpos=607+MAPX; |
||
41 | starting_set_array[0].ypos=20+MAPY; |
||
42 | starting_set_array[0].angles=180; |
||
43 | starting_set_array[1].xpos=12+MAPX; |
||
44 | starting_set_array[1].ypos=62+MAPY; |
||
45 | starting_set_array[1].angles=0; |
||
46 | starting_set_array[2].xpos=260+MAPX; |
||
47 | starting_set_array[2].ypos=460+MAPY; |
||
48 | starting_set_array[2].angles=90; |
||
49 | starting_set_array[3].xpos=605+MAPX; |
||
50 | starting_set_array[3].ypos=205+MAPY; |
||
51 | starting_set_array[3].angles=180; |
||
52 | } |
||
53 | |||
54 | int returnCarIndex(int a) { |
||
55 | int indice=-1; |
||
56 | int angle; |
||
57 | |||
58 | angle=normalize(a); |
||
59 | if (((angle>=0) && (angle<=8)) || ((angle>353) && (angle<360))) { // 0 (+8 ; -7) |
||
60 | indice=0; |
||
61 | } |
||
62 | if ((angle<=23) && (angle>8)) { // 15 |
||
63 | indice=1; |
||
64 | } |
||
65 | if ((angle<=38) && (angle>23)) { // 30 |
||
66 | indice=2; |
||
67 | } |
||
68 | if ((angle<=53) && (angle>38)) { // 45 |
||
69 | indice=3; |
||
70 | } |
||
71 | if ((angle<=68) && (angle>53)) { // 60 |
||
72 | indice=4; |
||
73 | } |
||
74 | if ((angle<=83) && (angle>68)) { // 75 |
||
75 | indice=5; |
||
76 | } |
||
77 | if ((angle<=98) && (angle>83)) { // 90 |
||
78 | indice=6; |
||
79 | } |
||
80 | if ((angle<=113) && (angle>98)) { // 105 |
||
81 | indice=7; |
||
82 | } |
||
83 | if ((angle<=128) && (angle>113)) { // 120 |
||
84 | indice=8; |
||
85 | } |
||
86 | if ((angle<=143) && (angle>128)) { // 135 |
||
87 | indice=9; |
||
88 | } |
||
89 | if ((angle<=158) && (angle>143)) { // 150 |
||
90 | indice=10; |
||
91 | } |
||
92 | if ((angle<=173) && (angle>158)) { // 165 |
||
93 | indice=11; |
||
94 | } |
||
95 | if ((angle<=188) && (angle>173)) { // 180 |
||
96 | indice=12; |
||
97 | } |
||
98 | if ((angle<=203) && (angle>188)) { // 195 |
||
99 | indice=13; |
||
100 | } |
||
101 | if ((angle<=218) && (angle>203)) { // 210 |
||
102 | indice=14; |
||
103 | } |
||
104 | if ((angle<=233) && (angle>218)) { // 225 |
||
105 | indice=15; |
||
106 | } |
||
107 | if ((angle<=248) && (angle>233)) { // 240 |
||
108 | indice=16; |
||
109 | } |
||
110 | if ((angle<=263) && (angle>248)) { // 255 |
||
111 | indice=17; |
||
112 | } |
||
113 | if ((angle<=278) && (angle>263)) { // 270 |
||
114 | indice=18; |
||
115 | } |
||
116 | if ((angle<=293) && (angle>278)) { // 285 |
||
117 | indice=19; |
||
118 | } |
||
119 | if ((angle<=308) && (angle>293)) { // 300 |
||
120 | indice=20; |
||
121 | } |
||
122 | if ((angle<=323) && (angle>308)) { // 315 |
||
123 | indice=21; |
||
124 | } |
||
125 | if ((angle<=338) && (angle>323)) { // 330 |
||
126 | indice=22; |
||
127 | } |
||
128 | if ((angle<=353) && (angle>338)) { // 345 |
||
129 | indice=23; |
||
130 | } |
||
131 | if (angle==360) { |
||
132 | indice=0; |
||
133 | } |
||
134 | return indice; |
||
135 | } |
||
136 | |||
137 | int normalize(int angle) { |
||
138 | if(angle<0) |
||
139 | return ((angle+360)); |
||
140 | if(angle>=360) |
||
141 | return ((angle-360)); |
||
142 | return angle; |
||
143 | } |
||
144 | |||
145 | int module(int x1,int x2,int y1,int y2) { |
||
146 | int x,y; |
||
147 | |||
148 | x=x1-x2; |
||
149 | y=y1-y2; |
||
150 | x*=x; |
||
151 | y*=y; |
||
152 | return x+y; |
||
153 | } |
||
154 | |||
155 | int allinea(int angle) { |
||
156 | int old_angle; |
||
157 | |||
158 | old_angle=normalize(angle); |
||
159 | if(old_angle<45) |
||
160 | old_angle=0; |
||
161 | else if(old_angle<135) |
||
162 | old_angle=90; |
||
163 | else if(old_angle<225) |
||
164 | old_angle=180; |
||
165 | else |
||
166 | old_angle=270; |
||
167 | return old_angle; |
||
168 | } |
||
169 | |||
170 | int find_tl(int angle,int xp,int yp) { |
||
171 | int a,min_tl,old_min,mins,i; |
||
172 | |||
173 | a=allinea(angle); |
||
174 | min_tl=old_min=10000; |
||
175 | for(mins=i=0;i<MAX_TL;i++) { |
||
176 | switch(a) { |
||
177 | case 0: |
||
178 | min_tl=module( xp,tl_data_array[i].l.x, yp,tl_data_array[i].l.y); |
||
179 | break; |
||
180 | case 90: |
||
181 | min_tl=module( xp,tl_data_array[i].d.x, yp,tl_data_array[i].d.y); |
||
182 | break; |
||
183 | case 180: |
||
184 | min_tl=module( xp,tl_data_array[i].r.x, yp,tl_data_array[i].r.y); |
||
185 | break; |
||
186 | case 270: |
||
187 | min_tl=module( xp,tl_data_array[i].u.x, yp,tl_data_array[i].u.y); |
||
188 | break; |
||
189 | default: |
||
190 | break; |
||
191 | } |
||
192 | if(min_tl<old_min) { |
||
193 | old_min=min_tl; |
||
194 | mins=i; |
||
195 | } |
||
196 | } |
||
197 | return mins; |
||
198 | } |
||
199 | |||
200 | int find_col(int angle,int tl) { |
||
201 | int min_tl=0,a; |
||
202 | |||
203 | a=allinea(angle); |
||
204 | switch(a) { |
||
205 | case 0: |
||
206 | case 180: |
||
207 | min_tl=tl_data_array[tl].hpos; |
||
208 | break; |
||
209 | case 90: |
||
210 | case 270: |
||
211 | min_tl=tl_data_array[tl].vpos; |
||
212 | break; |
||
213 | } |
||
214 | return min_tl; |
||
215 | } |