1 #ifdef _WIN32
2 #include "windows.h"
3 #endif
4
5 #include "stdio.h"
6 #include "string.h"
7
8 #include "GL/gl.h"
9 #include "GL/glu.h"
10 #include "SDL/SDL.h"
11 #include "SDL/SDL_mixer.h"
12
13 #include "list.h"
14 #include "vector.h"
15 #include "cmc.h"
16 #include "3dobject.h"
17 #include "shadow3dobject.h"
18 #include "piece3dobject.h"
19 #include "nether.h"
20
newmenu(int menu)21 void NETHER::newmenu(int menu)
22 {
23 switch(menu) {
24 case GENERAL_MENU:
25 if (getbutton(TIME_BUTTON)==0) {
26 newbutton(TIME_BUTTON,70,455,130,40,"Day: 0","Time: 00:00",0.8f,0,0);
27 } /* if */
28 newbuttondelayed(STATUS_BUTTON,70,400,130,50,"STATUS","INSG HUMN",0.0,0,0);
29 newbuttondelayed(RESOURCE_BUTTON,70,200,130,30,"RESOURCES",0,0.0,0,0);
30 act_menu=GENERAL_MENU;
31 break;
32
33 case ROBOT_MENU:
34 newbuttondelayed(ROBOT1_BUTTON,70,350,130,40,"DIRECT "," CONTROL",0,0,0.8f);
35 newbuttondelayed(ROBOT2_BUTTON,70,300,130,40,"GIVE "," ORDERS",0,0,0.8f);
36 newbuttondelayed(ROBOT3_BUTTON,70,250,130,40,"COMBAT "," MODE",0,0,0.8f);
37 newbuttondelayed(ROBOT4_BUTTON,70,200,130,40,"LEAVE "," ROBOT",0,0,0.8f);
38 act_menu=ROBOT_MENU;
39 break;
40
41 case COMBATMODE_MENU:
42 newbuttondelayed(COMBAT1_BUTTON,70,350,130,40,"NUCLEAR "," BOMB",0,0,0.8f);
43 newbuttondelayed(COMBAT2_BUTTON,70,300,130,40,"FIRE "," PHASERS",0,0,0.8f);
44 newbuttondelayed(COMBAT3_BUTTON,70,250,130,40,"FIRE "," MISSILES",0,0,0.8f);
45 newbuttondelayed(COMBAT4_BUTTON,70,200,130,40,"FIRE "," CANNON",0,0,0.8f);
46 newbuttondelayed(COMBAT5_BUTTON,70,150,130,40,"MOVE "," ROBOT",0,0,0.8f);
47 newbuttondelayed(COMBAT6_BUTTON,70,100,130,40,"STOP "," COMBAT",0,0,0.8f);
48 act_menu=COMBATMODE_MENU;
49 break;
50
51 case ORDERS_MENU:
52 newbuttondelayed(ORDERS1_BUTTON,70,350,130,40,"STOP AND "," DEFEND",0,0,0.8f);
53 newbuttondelayed(ORDERS2_BUTTON,70,300,130,40,"ADVANCE "," ?? MILES",0,0,0.8f);
54 newbuttondelayed(ORDERS3_BUTTON,70,250,130,40,"RETREAT "," ?? MILES",0,0,0.8f);
55 newbuttondelayed(ORDERS4_BUTTON,70,200,130,40,"SEARCH & "," DESTROY",0,0,0.8f);
56 newbuttondelayed(ORDERS5_BUTTON,70,150,130,40,"SEARCH & "," CAPTURE",0,0,0.8f);
57 act_menu=ORDERS_MENU;
58 break;
59
60 case SELECTDISTANCE_MENU:
61 if (controlled->program==PROGRAM_ADVANCE)
62 newbuttondelayed(ORDERS_BUTTON,70,400,130,40,"ADVANCE "," ?? MILES",0,0,0.8f);
63 if (controlled->program==PROGRAM_RETREAT)
64 newbuttondelayed(ORDERS_BUTTON,70,400,130,40,"RETREAT "," ?? MILES",0,0,0.8f);
65 act_menu=SELECTDISTANCE_MENU;
66 break;
67
68 case TARGETD_MENU:
69 newbuttondelayed(ORDERS_BUTTON,70,400,130,40,"SEARCH & "," DESTROY",0,0,0.8f);
70
71 newbuttondelayed(TARGET1_BUTTON,70,300,130,40,"ENEMY "," ROBOTS",0,0,0.8f);
72 newbuttondelayed(TARGET2_BUTTON,70,250,130,40,"ENEMY ","FACTORIES",0,0,0.8f);
73 newbuttondelayed(TARGET3_BUTTON,70,200,130,40,"ENEMY "," WARBASES",0,0,0.8f);
74 act_menu=TARGETD_MENU;
75 break;
76
77 case TARGETC_MENU:
78 newbuttondelayed(ORDERS_BUTTON,70,400,130,40,"SEARCH & "," CAPTURE",0,0,0.8f);
79
80 newbuttondelayed(TARGET1_BUTTON,70,300,130,40,"NEUTRAL ","FACTORIES",0,0,0.8f);
81 newbuttondelayed(TARGET2_BUTTON,70,250,130,40,"ENEMY ","FACTORIES",0,0,0.8f);
82 newbuttondelayed(TARGET3_BUTTON,70,200,130,40,"ENEMY "," WARBASES",0,0,0.8f);
83 act_menu=TARGETC_MENU;
84 break;
85
86 } /* switch */
87 redrawmenu=true;
88 } /* NETHER::newmenu */
89
90
killmenu(int menu)91 void NETHER::killmenu(int menu)
92 {
93 switch(menu) {
94 case GENERAL_MENU:
95 killbutton(STATUS_BUTTON);
96 killbutton(RESOURCE_BUTTON);
97 break;
98
99 case ROBOT_MENU:
100 killbutton(ROBOT1_BUTTON);
101 killbutton(ROBOT2_BUTTON);
102 killbutton(ROBOT3_BUTTON);
103 killbutton(ROBOT4_BUTTON);
104 break;
105
106 case COMBATMODE_MENU:
107 killbutton(COMBAT1_BUTTON);
108 killbutton(COMBAT2_BUTTON);
109 killbutton(COMBAT3_BUTTON);
110 killbutton(COMBAT4_BUTTON);
111 killbutton(COMBAT5_BUTTON);
112 killbutton(COMBAT6_BUTTON);
113 break;
114
115 case ORDERS_MENU:
116 killbutton(ORDERS1_BUTTON);
117 killbutton(ORDERS2_BUTTON);
118 killbutton(ORDERS3_BUTTON);
119 killbutton(ORDERS4_BUTTON);
120 killbutton(ORDERS5_BUTTON);
121 break;
122
123 case SELECTDISTANCE_MENU:
124 killbutton(ORDERS_BUTTON);
125 break;
126
127 case TARGETD_MENU:
128 case TARGETC_MENU:
129 killbutton(ORDERS_BUTTON);
130 killbutton(TARGET1_BUTTON);
131 killbutton(TARGET2_BUTTON);
132 killbutton(TARGET3_BUTTON);
133 break;
134
135 case ALL_MENUS:
136 killbutton(STATUS_BUTTON);
137 killbutton(RESOURCE_BUTTON);
138 killbutton(ROBOT1_BUTTON);
139 killbutton(ROBOT2_BUTTON);
140 killbutton(ROBOT3_BUTTON);
141 killbutton(ROBOT4_BUTTON);
142 killbutton(COMBAT1_BUTTON);
143 killbutton(COMBAT2_BUTTON);
144 killbutton(COMBAT3_BUTTON);
145 killbutton(COMBAT4_BUTTON);
146 killbutton(COMBAT5_BUTTON);
147 killbutton(COMBAT6_BUTTON);
148 killbutton(ORDERS1_BUTTON);
149 killbutton(ORDERS2_BUTTON);
150 killbutton(ORDERS3_BUTTON);
151 killbutton(ORDERS4_BUTTON);
152 killbutton(ORDERS5_BUTTON);
153 killbutton(ORDERS_BUTTON);
154 killbutton(ORDERS_BUTTON);
155 killbutton(TARGET1_BUTTON);
156 killbutton(TARGET2_BUTTON);
157 killbutton(TARGET3_BUTTON);
158 break;
159 } /* switch */
160 redrawmenu=true;
161 } /* killmenu */
162
163
newbutton(int ID,int x,int y,int sx,int sy,char * t1,char * t2,float r,float g,float b)164 void NETHER::newbutton(int ID,int x,int y,int sx,int sy,char *t1,char *t2,float r,float g,float b)
165 {
166 STATUSBUTTON *but;
167
168 but=new STATUSBUTTON();
169
170 but->ID=ID;
171 but->x=x;
172 but->y=y;
173 but->sx=sx;
174 but->sy=sy;
175 if (t1!=0) strcpy(but->text1,t1);
176 else but->text1[0]=0;
177 if (t2!=0) strcpy(but->text2,t2);
178 else but->text2[0]=0;
179 but->r=r;
180 but->g=g;
181 but->b=b;
182 but->status=-16;
183
184 buttons.Add(but);
185 redrawmenu=true;
186 } /* NETHER::newbutton */
187
188
newbuttondelayed(int ID,int x,int y,int sx,int sy,char * t1,char * t2,float r,float g,float b)189 void NETHER::newbuttondelayed(int ID,int x,int y,int sx,int sy,char *t1,char *t2,float r,float g,float b)
190 {
191 STATUSBUTTON *but;
192
193 but=new STATUSBUTTON();
194
195 but->ID=ID;
196 but->x=x;
197 but->y=y;
198 but->sx=sx;
199 but->sy=sy;
200 if (t1!=0) strcpy(but->text1,t1);
201 else but->text1[0]=0;
202 if (t2!=0) strcpy(but->text2,t2);
203 else but->text2[0]=0;
204 but->r=r;
205 but->g=g;
206 but->b=b;
207 but->status=-32;
208
209 buttons.Add(but);
210 redrawmenu=true;
211 } /* NETHER::newbuttondelayed */
212
213
killbutton(int ID)214 void NETHER::killbutton(int ID)
215 {
216 List<STATUSBUTTON> l;
217 STATUSBUTTON *b;
218
219 l.Instance(buttons);
220 l.Rewind();
221 while(l.Iterate(b)) {
222 if (b->ID==ID) b->status=1;
223 } /* while */
224 redrawmenu=true;
225 } /* killbutton */
226
227
getbutton(int ID)228 STATUSBUTTON *NETHER::getbutton(int ID)
229 {
230 List<STATUSBUTTON> l;
231 STATUSBUTTON *b;
232
233 l.Instance(buttons);
234 l.Rewind();
235 while(l.Iterate(b)) {
236 if (b->ID==ID) return b;
237 } /* while */
238
239 return 0;
240 } /* getbutton */
241