1 #include <math.h>
2 
3 #include "globals.h"
4 #include "status.h"
5 #include "object.h"
6 #include "ship.h"
7 #include "screen.h"
8 #include "sizes.h"
9 
10 
11 void DrawRadarPoint(struct Point *Position, float Size,
12                     struct Color *DarkColor, struct Color *LightColor, int type);
13 
14 
DrawRadar()15 void DrawRadar()
16 {
17   int i;
18 
19   DrawText(ScreenWidth/2-12, ScreenHeight/3, (char *)"Radar", &Green);
20   DrawCircle(ScreenWidth/2, ScreenHeight/6, &Green, 64, 0.27, 0);
21 
22   for (i=0; i<MAX_PLAYERS; i++) {
23     if (Ships[i] && i!=myShip && Ships[i]->Alive) {
24       DrawRadarPoint(&Ships[i]->Position, Ships[i]->Size,
25                      &DarkRed, &Red, 0);
26     }
27   }
28 
29   for (i=0; i<MAX_OBJECTS; i++) {
30     if (Objects[i]) {
31       if (Objects[i]->Type==ASTEROID_TYPE) {
32         DrawRadarPoint(&Objects[i]->Position, Objects[i]->Size,
33                        &Gray, &LightGray, 1);
34       }
35     }
36   }
37 
38   DrawCircle(ScreenWidth/2, ScreenHeight/6, &Green, 64, 0.18, 3);
39   DrawCircle(ScreenWidth/2, ScreenHeight/6, &Green, 64, 0.09, -1);
40   DrawLine(ScreenWidth/2, ScreenHeight/6+5, ScreenWidth/2, ScreenHeight/6-5, &DarkRed);
41   DrawLine(ScreenWidth/2+5, ScreenHeight/6, ScreenWidth/2-5, ScreenHeight/6, &DarkRed);
42 }
43 
44 
DrawRadarPoint(struct Point * Position,float Size,struct Color * DarkColor,struct Color * LightColor,int type)45 void DrawRadarPoint(struct Point *Position, float Size,
46                     struct Color *DarkColor, struct Color *LightColor, int type)
47 {
48   struct Point newPosition;
49   struct Color *PointColor;
50   int xpoint, ypoint;
51   float Distance;
52 
53   CalcPosition(Position, &newPosition);
54   CalcPointWithRotation(&newPosition);
55   if (newPosition.z < 0.0) {
56     PointColor=LightColor;
57   } else {
58     PointColor=DarkColor;
59   }
60   Distance=sqrt(newPosition.x*newPosition.x+newPosition.y*newPosition.y+
61                 newPosition.z*newPosition.z);
62   xpoint=(int)(((newPosition.x/Distance)*0.26+1.0)*(float)(ScreenWidth/2));
63   ypoint=(int)(((newPosition.y/Distance)*0.26+0.333)*(float)(ScreenHeight/2));
64   Distance-=Size;
65 
66   if ((Distance < 6.0 && type==1) || (Distance < 10.0 && type==0)) {
67     if (Distance > 2.5) {
68       DrawPoint(xpoint, ypoint, PointColor);
69     } else if (Distance > 1.0) {
70       DrawPoint(xpoint, ypoint, PointColor);
71       DrawPoint(xpoint+1, ypoint, PointColor);
72       DrawPoint(xpoint, ypoint+1, PointColor);
73       DrawPoint(xpoint+1, ypoint+1, PointColor);
74     } else {
75       DrawPoint(xpoint, ypoint, PointColor);
76       DrawPoint(xpoint+1, ypoint, PointColor);
77       DrawPoint(xpoint, ypoint+1, PointColor);
78       DrawPoint(xpoint+1, ypoint+1, PointColor);
79       DrawPoint(xpoint+2, ypoint, PointColor);
80       DrawPoint(xpoint+2, ypoint+1, PointColor);
81       DrawPoint(xpoint+1, ypoint+2, PointColor);
82       DrawPoint(xpoint, ypoint+2, PointColor);
83       DrawPoint(xpoint+1, ypoint+1, PointColor);
84       DrawPoint(xpoint+2, ypoint+2, PointColor);
85     }
86   }
87 }
88