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