]> git.jsancho.org Git - lugaru.git/blob - Source/Game.cpp
Remove some extra declarations of "channels"
[lugaru.git] / Source / Game.cpp
1 #include "Game.h"
2 #include "openal_wrapper.h"
3 #include "SDL_thread.h"
4
5 extern int mainmenu;
6
7 Game::Game()
8 {
9         terraintexture = 0;
10         terraintexture2 = 0;
11         terraintexture3 = 0;
12         screentexture = 0;
13         screentexture2 = 0;
14         logotexture = 0;
15         loadscreentexture = 0;
16         Maparrowtexture = 0;
17         Mapboxtexture = 0;
18         Mapcircletexture = 0;
19         cursortexture = 0;
20
21         memset(Mainmenuitems, 0, sizeof(Mainmenuitems));
22
23         nummenuitems = 0;
24
25         memset(startx, 0, sizeof(startx));
26         memset(starty, 0, sizeof(starty));
27         memset(endx, 0, sizeof(endx));
28         memset(endy, 0, sizeof(endy));
29
30         memset(selectedlong, 0, sizeof(selectedlong));
31         memset(offsetx, 0, sizeof(offsetx));
32         memset(offsety, 0, sizeof(offsety));
33         memset(movex, 0, sizeof(movex));
34         memset(movey, 0, sizeof(movey));
35         memset(endy, 0, sizeof(endy));
36
37         transition = 0;
38         anim = 0;
39         selected = 0;
40         loaddistrib = 0;
41         keyselect = 0;
42         indemo = 0;
43
44         won = 0;
45
46         entername = 0;
47
48         memset(menustring, 0, sizeof(menustring));
49         memset(registrationname, 0, sizeof(registrationname));
50         registrationnumber = 0;
51
52         newdetail = 0;
53         newscreenwidth = 0;
54         newscreenheight = 0;
55
56         gameon = 0;
57         deltah = 0,deltav = 0;
58         mousecoordh = 0,mousecoordv = 0;
59         oldmousecoordh = 0,oldmousecoordv = 0;
60         rotation = 0,rotation2 = 0;
61
62 //      SkyBox skybox;
63
64         cameramode = 0;
65         cameratogglekeydown = 0;
66         chattogglekeydown = 0;
67         olddrawmode = 0;
68         drawmode = 0;
69         drawmodetogglekeydown = 0;
70         explodetogglekeydown = 0;
71         detailtogglekeydown = 0;
72         firstload = 0;
73         oldbutton = 0;
74
75         leveltime = 0;
76         loadtime = 0;
77
78 //      Model hawk;
79
80 //      XYZ hawkcoords;
81 //      XYZ realhawkcoords;
82
83         hawktexture = 0;
84         hawkrotation = 0;
85         hawkcalldelay = 0;
86 /*
87         Model eye;
88         Model iris;
89         Model cornea;
90 */
91         stealthloading = 0;
92
93         campaignnumlevels = 0;
94
95         memset(campaignmapname, 0, sizeof(campaignmapname));
96         memset(campaigndescription, 0, sizeof(campaigndescription));
97         memset(campaignchoosenext, 0, sizeof(campaignchoosenext));
98         memset(campaignnumnext, 0, sizeof(campaignnumnext));
99         memset(campaignnextlevel, 0, sizeof(campaignnextlevel));
100         int campaignchoicesmade;
101         memset(campaignchoices, 0, sizeof(campaignchoices));
102         memset(campaignlocationx, 0, sizeof(campaignlocationx));
103         memset(campaignlocationy, 0, sizeof(campaignlocationy));
104         memset(campaignlocationy, 0, sizeof(campaignlocationy));
105
106         campaignchoicenum = 0;
107
108         memset(campaignchoicewhich, 0, sizeof(campaignchoicewhich));
109
110         whichchoice = 0;
111
112         numlevelspassed = 0;
113
114         memset(levelorder, 0, sizeof(levelorder));
115         memset(levelvisible, 0, sizeof(levelvisible));
116         memset(levelhighlight, 0, sizeof(levelhighlight));
117
118         minimap = 0;
119
120         musictype = 0,oldmusictype = 0,oldoldmusictype = 0;
121         realthreat = 0;
122
123 //      Model rabbit;
124 //      XYZ rabbitcoords;
125
126 //      XYZ mapcenter;
127         mapradius = 0;
128
129 //      Text text;
130         fps = 0;
131
132 //      XYZ cameraloc;
133         cameradist = 0;
134
135         envtogglekeydown = 0;
136         slomotogglekeydown = 0;
137         texturesizetogglekeydown = 0;
138         freezetogglekeydown = 0;
139         drawtoggle = 0;
140
141         editorenabled = 0;
142         editortype = 0;
143         editorsize = 0;
144         editorrotation = 0;
145         editorrotation2 = 0;
146
147         brightness = 0;
148
149         quit = 0;
150         tryquit = 0;
151
152 //      XYZ pathpoint[30];
153         numpathpoints = 0;
154         memset(numpathpointconnect, 0, sizeof(numpathpointconnect));
155         memset(pathpointconnect, 0, sizeof(pathpointconnect));
156         pathpointselected = 0;
157
158         endgame = 0;
159         scoreadded = 0;
160         numchallengelevels = 0;
161
162         console = 0;
163         archiveselected = 0;
164
165         memset(consoletext, 0, sizeof(consoletext));
166         memset(consolechars, 0, sizeof(consolechars));
167         chatting = 0;
168         memset(displaytext, 0, sizeof(displaytext));
169         memset(displaychars, 0, sizeof(displaychars));
170         memset(displaytime, 0, sizeof(displaytime));
171         displayblinkdelay = 0;
172         displayblink = 0;
173         displayselected = 0;
174         consolekeydown = 0;
175         consoletogglekeydown = 0;
176         consoleblinkdelay = 0;
177         consoleblink = 0;
178         consoleselected = 0;
179 //      memset(togglekey, 0, sizeof(togglekey));
180 //      memset(togglekeydelay, 0, sizeof(togglekeydelay));
181         registernow = 0;
182         autocam = 0;
183
184         crouchkey = 0,jumpkey = 0,forwardkey = 0,chatkey = 0,backkey = 0,leftkey = 0,rightkey = 0,drawkey = 0,throwkey = 0,attackkey = 0;
185         oldattackkey = 0;
186
187         loading = 0;
188         talkdelay = 0;
189
190         numboundaries = 0;
191 //      XYZ boundary[360];
192
193         whichlevel = 0;
194         oldenvironment = 0;
195         targetlevel = 0;
196         changedelay = 0;
197
198         memset(musicvolume, 0, sizeof(musicvolume));
199         memset(oldmusicvolume, 0, sizeof(oldmusicvolume));
200         musicselected = 0;
201         change = 0;
202         
203 //------------
204
205         waiting = false;
206         mainmenu = 0;
207         
208         accountactive = NULL;
209 }
210
211 typedef struct {
212         Game* game;
213         void (Game::*method)();
214 } params_thread;
215
216 void Game::fireSound(int sound) {
217         emit_sound_at(sound);
218 }
219
220 void Game::inputText(char* str, int* charselected, int* nb_chars) {
221         SDL_Event evenement;
222         int i;
223         
224         if(!waiting) {
225                 waiting=true;
226                 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL);
227                 SDL_EnableUNICODE(true);
228         }
229
230         SDL_PollEvent(&evenement);
231         
232         switch(evenement.type) {
233                 case SDL_KEYDOWN:
234                         if(evenement.key.keysym.sym == SDLK_ESCAPE) {
235                                 for(i=0;i<255;i++){
236                                         str[i]=' ';
237                                 }
238                                 *nb_chars=0;
239                                 *charselected=0;
240                                 waiting=false;
241                         } else if(evenement.key.keysym.sym==SDLK_BACKSPACE){
242                                 if((*charselected)!=0) {
243                                         for(i=(*charselected)-1;i<255;i++){
244                                                 str[i]=str[i+1];
245                                         }
246                                         str[255]=' ';
247                                         (*charselected)--;
248                                         (*nb_chars)--;
249                                 }
250                         } else if(evenement.key.keysym.sym==SDLK_DELETE){
251                                 for(i=(*charselected);i<255;i++){
252                                         str[i]=str[i+1];
253                                 }
254                                 str[255]=' ';
255                                 (*nb_chars)--;
256                         } else if(evenement.key.keysym.sym==SDLK_LEFT){
257                                 if((*charselected)!=0)
258                                         (*charselected)--;
259                         } else if(evenement.key.keysym.sym==SDLK_RIGHT){
260                                 if((*charselected)<(*nb_chars))
261                                         (*charselected)++;
262                         } else if(evenement.key.keysym.sym==SDLK_RETURN) {
263                                 waiting=false;
264                         } else if((evenement.key.keysym.unicode<127)&&((*nb_chars)<60)&&(evenement.key.keysym.sym!=SDLK_LSHIFT)&&(evenement.key.keysym.sym!=SDLK_RSHIFT)) {
265                                 for(i=255;i>=(*charselected)+1;i--){
266                                         str[i]=str[i-1];
267                                 }
268                                 str[*charselected]=evenement.key.keysym.unicode;
269                                 (*charselected)++;
270                                 (*nb_chars)++;
271                         }
272                 break;
273         }
274         
275         if(!waiting) {
276                 SDL_EnableKeyRepeat(0,0); // disable key repeat
277                 SDL_EnableUNICODE(false);
278         }
279 }
280
281 void Game::setKeySelected() {
282         waiting=true;
283         params_thread* data = new params_thread;
284     data->game = this;
285     data->method = &Game::setKeySelected_thread;
286     printf("launch thread\n");
287         SDL_Thread* thread = SDL_CreateThread(Game::thread, data);
288     if ( thread == NULL ) {
289         fprintf(stderr, "Unable to create thread: %s\n", SDL_GetError());
290                 waiting=false;
291         return;
292     }
293 }
294
295 void Game::setKeySelected_thread() {
296         int keycode=-1;
297         SDL_Event evenement;
298         while(keycode==-1) {
299                 SDL_WaitEvent(&evenement);
300                 switch(evenement.type) {
301                         case SDL_KEYDOWN:
302                                 keycode = evenement.key.keysym.sym;
303                         break;
304                         case SDL_MOUSEBUTTONDOWN:
305                                 keycode = SDLK_LAST+evenement.button.button;
306                         break;
307                         default:
308                         break;
309                 }
310         }
311         if(keycode != SDLK_ESCAPE) {
312                 fireSound();
313                 switch(keyselect) {
314                         case 0: forwardkey=keycode;
315                         break;
316                         case 1: backkey=keycode;
317                         break;
318                         case 2: leftkey=keycode;
319                         break;
320                         case 3: rightkey=keycode;
321                         break;
322                         case 4: crouchkey=keycode;
323                         break;
324                         case 5: jumpkey=keycode;
325                         break;
326                         case 6: drawkey=keycode;
327                         break;
328                         case 7: throwkey=keycode;
329                         break;
330                         case 8: attackkey=keycode;
331                         break;
332                         default:
333                         break;
334                 }
335         }
336         keyselect=-1;
337         waiting=false;
338 }
339
340 int Game::thread(void *data) {
341         params_thread* pt = (params_thread*)data;
342     if(pt) {
343         (pt->game->*(pt->method))();
344     }
345 }
346
347 void Game::DrawGL() {
348         if ( stereomode == stereoNone ) {
349                 DrawGLScene(stereoCenter);
350         } else {
351                 DrawGLScene(stereoLeft);
352                 DrawGLScene(stereoRight);
353         }
354 }