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