Go to most recent revision |
Blame |
Last modification |
View Log
| RSS feed
#include <math.h>
#include "include/misc.h"
#include "include/simcity.h"
int my_rint
(float num
) {
return (int)floor(num
+0.5);
}
void fill_table
(void) {
int i
;
for (i
=0;i
<360;i
++) {
sine
[i
]=sin(DEG_TO_RAD
(i
));
cosine
[i
]=cos(DEG_TO_RAD
(i
));
}
}
void tl_init
() {
//MAPX,MAPY
char col
[2];
short i
;
col
[0]='r';
col
[1]='g';
for(i
=0;i
<MAX_TL
;i
++) {
tl_data_array
[i
].
vpos=col
[i
%2];
tl_data_array
[i
].
period=(i
+3)*SECOND
;
tl_data_array
[i
].
l.
x+=MAPX
;
tl_data_array
[i
].
l.
y+=MAPY
;
tl_data_array
[i
].
r.
x+=MAPX
;
tl_data_array
[i
].
r.
y+=MAPY
;
tl_data_array
[i
].
u.
x+=MAPX
;
tl_data_array
[i
].
u.
y+=MAPY
;
tl_data_array
[i
].
d.
x+=MAPX
;
tl_data_array
[i
].
d.
y+=MAPY
;
}
}
void set_start_point
() {
//MAPX,MAPY
starting_set_array
[0].
xpos=607+MAPX
;
starting_set_array
[0].
ypos=20+MAPY
;
starting_set_array
[0].
angles=180;
starting_set_array
[1].
xpos=12+MAPX
;
starting_set_array
[1].
ypos=62+MAPY
;
starting_set_array
[1].
angles=0;
starting_set_array
[2].
xpos=260+MAPX
;
starting_set_array
[2].
ypos=460+MAPY
;
starting_set_array
[2].
angles=90;
starting_set_array
[3].
xpos=605+MAPX
;
starting_set_array
[3].
ypos=205+MAPY
;
starting_set_array
[3].
angles=180;
}
int returnCarIndex
(int a
) {
int indice
=-1;
int angle
;
angle
=normalize
(a
);
if (((angle
>=0) && (angle
<=8)) || ((angle
>353) && (angle
<360))) { // 0 (+8 ; -7)
indice
=0;
}
if ((angle
<=23) && (angle
>8)) { // 15
indice
=1;
}
if ((angle
<=38) && (angle
>23)) { // 30
indice
=2;
}
if ((angle
<=53) && (angle
>38)) { // 45
indice
=3;
}
if ((angle
<=68) && (angle
>53)) { // 60
indice
=4;
}
if ((angle
<=83) && (angle
>68)) { // 75
indice
=5;
}
if ((angle
<=98) && (angle
>83)) { // 90
indice
=6;
}
if ((angle
<=113) && (angle
>98)) { // 105
indice
=7;
}
if ((angle
<=128) && (angle
>113)) { // 120
indice
=8;
}
if ((angle
<=143) && (angle
>128)) { // 135
indice
=9;
}
if ((angle
<=158) && (angle
>143)) { // 150
indice
=10;
}
if ((angle
<=173) && (angle
>158)) { // 165
indice
=11;
}
if ((angle
<=188) && (angle
>173)) { // 180
indice
=12;
}
if ((angle
<=203) && (angle
>188)) { // 195
indice
=13;
}
if ((angle
<=218) && (angle
>203)) { // 210
indice
=14;
}
if ((angle
<=233) && (angle
>218)) { // 225
indice
=15;
}
if ((angle
<=248) && (angle
>233)) { // 240
indice
=16;
}
if ((angle
<=263) && (angle
>248)) { // 255
indice
=17;
}
if ((angle
<=278) && (angle
>263)) { // 270
indice
=18;
}
if ((angle
<=293) && (angle
>278)) { // 285
indice
=19;
}
if ((angle
<=308) && (angle
>293)) { // 300
indice
=20;
}
if ((angle
<=323) && (angle
>308)) { // 315
indice
=21;
}
if ((angle
<=338) && (angle
>323)) { // 330
indice
=22;
}
if ((angle
<=353) && (angle
>338)) { // 345
indice
=23;
}
if (angle
==360) {
indice
=0;
}
return indice
;
}
int normalize
(int angle
) {
if(angle
<0)
return ((angle
+360));
if(angle
>=360)
return ((angle
-360));
return angle
;
}
int module
(int x1
,int x2
,int y1
,int y2
) {
int x
,y
;
x
=x1
-x2
;
y
=y1
-y2
;
x
*=x
;
y
*=y
;
return x
+y
;
}
int allinea
(int angle
) {
int old_angle
;
old_angle
=normalize
(angle
);
if(old_angle
<45)
old_angle
=0;
else if(old_angle
<135)
old_angle
=90;
else if(old_angle
<225)
old_angle
=180;
else
old_angle
=270;
return old_angle
;
}
int find_tl
(int angle
,int xp
,int yp
) {
int a
,min_tl
,old_min
,mins
,i
;
a
=allinea
(angle
);
min_tl
=old_min
=10000;
for(mins
=i
=0;i
<MAX_TL
;i
++) {
switch(a
) {
case 0:
min_tl
=module
( xp
,tl_data_array
[i
].
l.
x, yp
,tl_data_array
[i
].
l.
y);
break;
case 90:
min_tl
=module
( xp
,tl_data_array
[i
].
d.
x, yp
,tl_data_array
[i
].
d.
y);
break;
case 180:
min_tl
=module
( xp
,tl_data_array
[i
].
r.
x, yp
,tl_data_array
[i
].
r.
y);
break;
case 270:
min_tl
=module
( xp
,tl_data_array
[i
].
u.
x, yp
,tl_data_array
[i
].
u.
y);
break;
default:
break;
}
if(min_tl
<old_min
) {
old_min
=min_tl
;
mins
=i
;
}
}
return mins
;
}
int find_col
(int angle
,int tl
) {
int min_tl
=0,a
;
a
=allinea
(angle
);
switch(a
) {
case 0:
case 180:
min_tl
=tl_data_array
[tl
].
hpos;
break;
case 90:
case 270:
min_tl
=tl_data_array
[tl
].
vpos;
break;
}
return min_tl
;
}