]> git.jsancho.org Git - lugaru.git/blob - Source/Game.cpp
major refactor of texture system
[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 int numdialogues;
8 int numdialogueboxes[max_dialogues];
9 int dialoguetype[max_dialogues];
10 int dialogueboxlocation[max_dialogues][max_dialoguelength];
11 float dialogueboxcolor[max_dialogues][max_dialoguelength][3];
12 int dialogueboxsound[max_dialogues][max_dialoguelength];
13 char dialoguetext[max_dialogues][max_dialoguelength][128];
14 char dialoguename[max_dialogues][max_dialoguelength][64];
15 XYZ dialoguecamera[max_dialogues][max_dialoguelength];
16 XYZ participantlocation[max_dialogues][10];
17 int participantfocus[max_dialogues][max_dialoguelength];
18 int participantaction[max_dialogues][max_dialoguelength];
19 float participantyaw[max_dialogues][10];
20 XYZ participantfacing[max_dialogues][max_dialoguelength][10];
21 float dialoguecamerayaw[max_dialogues][max_dialoguelength];
22 float dialoguecamerapitch[max_dialogues][max_dialoguelength];
23 int indialogue;
24 int whichdialogue;
25 int directing;
26 float dialoguetime;
27 int dialoguegonethrough[20];
28
29 namespace Game{
30     Texture terraintexture;
31     Texture terraintexture2;
32     Texture loadscreentexture;
33     Texture Maparrowtexture;
34     Texture Mapboxtexture;
35     Texture Mapcircletexture;
36     Texture cursortexture;
37     GLuint screentexture = 0;
38     GLuint screentexture2 = 0;
39     Texture Mainmenuitems[10];
40
41     int selected = 0;
42     int keyselect = 0;
43
44     int newdetail = 0;
45     int newscreenwidth = 0;
46     int newscreenheight = 0;
47
48     bool gameon = 0;
49     float deltah = 0;
50     float deltav = 0;
51     int mousecoordh = 0;
52     int mousecoordv = 0;
53     int oldmousecoordh = 0;
54     int oldmousecoordv = 0;
55     float yaw = 0;
56     float pitch = 0;
57     SkyBox *skybox = NULL;
58     bool cameramode = 0;
59     bool firstload = 0;
60
61         Texture hawktexture;
62         float hawkyaw = 0;
63         float hawkcalldelay = 0;
64     float leveltime = 0;
65     float loadtime = 0;
66
67     Model hawk;
68     XYZ hawkcoords;
69     XYZ realhawkcoords;
70
71     Model eye;
72     Model iris;
73     Model cornea;
74
75     bool stealthloading = 0;
76
77     int musictype = 0;
78
79     XYZ mapcenter;
80     float mapradius = 0;
81
82     Text *text = NULL;
83     float fps = 0;
84
85     bool editorenabled = 0;
86     int editortype = 0;
87     float editorsize = 0;
88     float editoryaw = 0;
89     float editorpitch = 0;
90
91     int tryquit = 0;
92
93     XYZ pathpoint[30];
94     int numpathpoints = 0;
95     int numpathpointconnect[30] = {};
96     int pathpointconnect[30][30] = {};
97     int pathpointselected = 0;
98
99     int endgame = 0;
100     bool scoreadded = 0;
101     int numchallengelevels = 0;
102
103     bool console = false;
104     char consoletext[15][256] = {};
105     int consolechars[15] = {};
106     bool chatting = 0;
107     char displaytext[15][256] = {};
108     int displaychars[15] = {};
109     float displaytime[15] = {};
110     float displayblinkdelay = 0;
111     bool displayblink = 0;
112     int displayselected = 0;
113     float consoleblinkdelay = 0;
114     bool consoleblink = 0;
115     int consoleselected = 0;
116
117     unsigned short crouchkey=0,jumpkey=0,forwardkey=0,chatkey=0,backkey=0,leftkey=0,rightkey=0,drawkey=0,throwkey=0,attackkey=0;
118     unsigned short consolekey=0;
119
120     int loading = 0;
121     
122     int oldenvironment = 0;
123     int targetlevel = 0;
124     float changedelay = 0;
125
126     bool waiting = false;
127     Account* accountactive = NULL;
128 }
129
130 void Game::fireSound(int sound) {
131         emit_sound_at(sound);
132 }
133
134 void Game::inputText(char* str, int* charselected, int* nb_chars) {
135         SDL_Event evenement;
136         
137         if(!waiting) {
138                 waiting=true;
139                 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL);
140                 SDL_EnableUNICODE(true);
141         }
142
143         while(SDL_PollEvent(&evenement)) {
144         
145                 switch(evenement.type) {
146                         case SDL_KEYDOWN:
147                                 if(evenement.key.keysym.sym == SDLK_ESCAPE) {
148                                         for(int i=0;i<255;i++)
149                                                 str[i]=0;
150                                         *nb_chars=0;
151                                         *charselected=0;
152                                         waiting=false;
153                                 } else if(evenement.key.keysym.sym==SDLK_BACKSPACE){
154                                         if((*charselected)!=0) {
155                                                 for(int i=(*charselected)-1;i<255;i++)
156                                                         str[i]=str[i+1];
157                                                 str[255]=0;
158                                                 (*charselected)--;
159                                                 (*nb_chars)--;
160                                         }
161                                 } else if(evenement.key.keysym.sym==SDLK_DELETE){
162                                         if((*charselected)<(*nb_chars)){
163                                                 for(int i=(*charselected);i<255;i++)
164                                                         str[i]=str[i+1];
165                                                 str[255]=0;
166                                                 (*nb_chars)--;
167                                         }
168                                 } else if(evenement.key.keysym.sym==SDLK_HOME){
169                                         (*charselected)=0;
170                                 } else if(evenement.key.keysym.sym==SDLK_END){
171                                         (*charselected)=(*nb_chars);
172                                 } else if(evenement.key.keysym.sym==SDLK_LEFT){
173                                         if((*charselected)!=0)
174                                                 (*charselected)--;
175                                 } else if(evenement.key.keysym.sym==SDLK_RIGHT){
176                                         if((*charselected)<(*nb_chars))
177                                                 (*charselected)++;
178                                 } else if(evenement.key.keysym.sym==SDLK_RETURN) {
179                                         waiting=false;
180                                 } else if(evenement.key.keysym.unicode>=32&&evenement.key.keysym.unicode<127&&(*nb_chars)<60){
181                                         for(int i=255;i>=(*charselected)+1;i--)
182                                                 str[i]=str[i-1];
183                                         str[*charselected]=evenement.key.keysym.unicode;
184                                         (*charselected)++;
185                                         (*nb_chars)++;
186                                 }
187                         break;
188                 }
189         }
190         
191         if(!waiting) {
192                 SDL_EnableKeyRepeat(0,0); // disable key repeat
193                 SDL_EnableUNICODE(false);
194         }
195 }
196
197 int setKeySelected_thread(void* data) {
198     using namespace Game;
199         int keycode=-1;
200         SDL_Event evenement;
201         while(keycode==-1) {
202                 SDL_WaitEvent(&evenement);
203                 switch(evenement.type) {
204                         case SDL_KEYDOWN:
205                                 keycode = evenement.key.keysym.sym;
206                         break;
207                         case SDL_MOUSEBUTTONDOWN:
208                                 keycode = SDLK_LAST+evenement.button.button;
209                         break;
210                         default:
211                         break;
212                 }
213         }
214         if(keycode != SDLK_ESCAPE) {
215                 fireSound();
216                 switch(keyselect) {
217                         case 0: forwardkey=keycode;
218                         break;
219                         case 1: backkey=keycode;
220                         break;
221                         case 2: leftkey=keycode;
222                         break;
223                         case 3: rightkey=keycode;
224                         break;
225                         case 4: crouchkey=keycode;
226                         break;
227                         case 5: jumpkey=keycode;
228                         break;
229                         case 6: drawkey=keycode;
230                         break;
231                         case 7: throwkey=keycode;
232                         break;
233                         case 8: attackkey=keycode;
234                         break;
235                         case 9: consolekey=keycode;
236                         break;
237                         default:
238                         break;
239                 }
240         }
241         keyselect=-1;
242         waiting=false;
243     LoadMenu();
244     return 0;
245 }
246
247 void Game::setKeySelected() {
248         waiting=true;
249     printf("launch thread\n");
250         SDL_Thread* thread = SDL_CreateThread(setKeySelected_thread,NULL);
251     if ( thread == NULL ) {
252         fprintf(stderr, "Unable to create thread: %s\n", SDL_GetError());
253                 waiting=false;
254         return;
255     }
256 }