Subversion Repositories shark

Rev

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
}