X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGame.cpp;h=44c4e649526c530a4160ae2f93542b91a2f140bb;hb=cfdbe0ad0521045b27a60dbb1c963ea6dfdcda5a;hp=776a0e77899ecda9854457c6684d098d2b157d7b;hpb=e31b70325214fa5bdd433c1fd2aa96a1eb6c6684;p=lugaru.git diff --git a/Source/Game.cpp b/Source/Game.cpp index 776a0e7..44c4e64 100644 --- a/Source/Game.cpp +++ b/Source/Game.cpp @@ -3,14 +3,178 @@ #include "SDL_thread.h" extern int mainmenu; -extern OPENAL_SAMPLE *samp[100]; -extern int channels[100]; -extern "C" void PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused); - +int numdialogues; +int numdialogueboxes[max_dialogues]; +int dialoguetype[max_dialogues]; +int dialogueboxlocation[max_dialogues][max_dialoguelength]; +float dialogueboxcolor[max_dialogues][max_dialoguelength][3]; +int dialogueboxsound[max_dialogues][max_dialoguelength]; +char dialoguetext[max_dialogues][max_dialoguelength][128]; +char dialoguename[max_dialogues][max_dialoguelength][64]; +XYZ dialoguecamera[max_dialogues][max_dialoguelength]; +XYZ participantlocation[max_dialogues][10]; +int participantfocus[max_dialogues][max_dialoguelength]; +int participantaction[max_dialogues][max_dialoguelength]; +float participantrotation[max_dialogues][10]; +XYZ participantfacing[max_dialogues][max_dialoguelength][10]; +float dialoguecamerarotation[max_dialogues][max_dialoguelength]; +float dialoguecamerarotation2[max_dialogues][max_dialoguelength]; +int indialogue; +int whichdialogue; +int directing; +float dialoguetime; +int dialoguegonethrough[20]; + +namespace Game{ + GLuint terraintexture; + GLuint terraintexture2; + GLuint terraintexture3; + GLuint screentexture; + GLuint screentexture2; + GLuint logotexture; + GLuint loadscreentexture; + GLuint Maparrowtexture; + GLuint Mapboxtexture; + GLuint Mapcircletexture; + GLuint cursortexture; + GLuint Mainmenuitems[10]; + + int selected; + int keyselect; + int indemo; + + bool won; + + bool entername; + + char registrationname[256]; + float registrationnumber; + + int newdetail; + int newscreenwidth; + int newscreenheight; + + bool gameon; + float deltah,deltav; + int mousecoordh,mousecoordv; + int oldmousecoordh,oldmousecoordv; + float rotation,rotation2; + SkyBox skybox; + bool cameramode; + int olddrawmode; + int drawmode; + bool firstload; + bool oldbutton; + + float leveltime; + float loadtime; + + Model hawk; + XYZ hawkcoords; + XYZ realhawkcoords; + GLuint hawktexture; + float hawkrotation; + float hawkcalldelay; + + Model eye; + Model iris; + Model cornea; + + bool stealthloading; + + std::vector campaignlevels; + int whichchoice; + int actuallevel; + bool winhotspot; + bool windialogue; + + bool minimap; + + int musictype,oldmusictype,oldoldmusictype; + bool realthreat; + + Model rabbit; + XYZ rabbitcoords; + + XYZ mapcenter; + float mapradius; + + Text* text; + float fps; + + XYZ cameraloc; + float cameradist; + + int drawtoggle; + + bool editorenabled; + int editortype; + float editorsize; + float editorrotation; + float editorrotation2; + + float brightness; + + int quit; + int tryquit; + + XYZ pathpoint[30]; + int numpathpoints; + int numpathpointconnect[30]; + int pathpointconnect[30][30]; + int pathpointselected; + + int endgame; + bool scoreadded; + int numchallengelevels; + + bool console; + int archiveselected; + char consoletext[15][256]; + int consolechars[15]; + bool chatting; + char displaytext[15][256]; + int displaychars[15]; + float displaytime[15]; + float displayblinkdelay; + bool displayblink; + int displayselected; + bool consolekeydown; + float consoleblinkdelay; + bool consoleblink; + int consoleselected; + bool autocam; + + unsigned short crouchkey,jumpkey,forwardkey,chatkey,backkey,leftkey,rightkey,drawkey,throwkey,attackkey; + unsigned short consolekey; + bool oldattackkey; + + int loading; + float talkdelay; + + int numboundaries; + XYZ boundary[360]; + + int whichlevel; + int oldenvironment; + int targetlevel; + float changedelay; + + float musicvolume[4]; + float oldmusicvolume[4]; + int musicselected; + int change; + + bool waiting; + Account* accountactive; +} -Game::Game() +void Game::newGame() { + text=NULL; + text=new Text(); + terraintexture = 0; terraintexture2 = 0; terraintexture3 = 0; @@ -25,24 +189,7 @@ Game::Game() memset(Mainmenuitems, 0, sizeof(Mainmenuitems)); - nummenuitems = 0; - - memset(startx, 0, sizeof(startx)); - memset(starty, 0, sizeof(starty)); - memset(endx, 0, sizeof(endx)); - memset(endy, 0, sizeof(endy)); - - memset(selectedlong, 0, sizeof(selectedlong)); - memset(offsetx, 0, sizeof(offsetx)); - memset(offsety, 0, sizeof(offsety)); - memset(movex, 0, sizeof(movex)); - memset(movey, 0, sizeof(movey)); - memset(endy, 0, sizeof(endy)); - - transition = 0; - anim = 0; selected = 0; - loaddistrib = 0; keyselect = 0; indemo = 0; @@ -50,7 +197,6 @@ Game::Game() entername = 0; - memset(menustring, 0, sizeof(menustring)); memset(registrationname, 0, sizeof(registrationname)); registrationnumber = 0; @@ -67,13 +213,8 @@ Game::Game() // SkyBox skybox; cameramode = 0; - cameratogglekeydown = 0; - chattogglekeydown = 0; olddrawmode = 0; drawmode = 0; - drawmodetogglekeydown = 0; - explodetogglekeydown = 0; - detailtogglekeydown = 0; firstload = 0; oldbutton = 0; @@ -95,30 +236,10 @@ Game::Game() */ stealthloading = 0; - campaignnumlevels = 0; - - memset(campaignmapname, 0, sizeof(campaignmapname)); - memset(campaigndescription, 0, sizeof(campaigndescription)); - memset(campaignchoosenext, 0, sizeof(campaignchoosenext)); - memset(campaignnumnext, 0, sizeof(campaignnumnext)); - memset(campaignnextlevel, 0, sizeof(campaignnextlevel)); - int campaignchoicesmade; - memset(campaignchoices, 0, sizeof(campaignchoices)); - memset(campaignlocationx, 0, sizeof(campaignlocationx)); - memset(campaignlocationy, 0, sizeof(campaignlocationy)); - memset(campaignlocationy, 0, sizeof(campaignlocationy)); - - campaignchoicenum = 0; - - memset(campaignchoicewhich, 0, sizeof(campaignchoicewhich)); - whichchoice = 0; - - numlevelspassed = 0; - - memset(levelorder, 0, sizeof(levelorder)); - memset(levelvisible, 0, sizeof(levelvisible)); - memset(levelhighlight, 0, sizeof(levelhighlight)); + actuallevel = 0; + winhotspot = false; + windialogue = false; minimap = 0; @@ -137,10 +258,6 @@ Game::Game() // XYZ cameraloc; cameradist = 0; - envtogglekeydown = 0; - slomotogglekeydown = 0; - texturesizetogglekeydown = 0; - freezetogglekeydown = 0; drawtoggle = 0; editorenabled = 0; @@ -164,7 +281,7 @@ Game::Game() scoreadded = 0; numchallengelevels = 0; - console = 0; + console = false; archiveselected = 0; memset(consoletext, 0, sizeof(consoletext)); @@ -177,16 +294,13 @@ Game::Game() displayblink = 0; displayselected = 0; consolekeydown = 0; - consoletogglekeydown = 0; consoleblinkdelay = 0; consoleblink = 0; consoleselected = 0; - memset(togglekey, 0, sizeof(togglekey)); - memset(togglekeydelay, 0, sizeof(togglekeydelay)); - registernow = 0; autocam = 0; crouchkey = 0,jumpkey = 0,forwardkey = 0,chatkey = 0,backkey = 0,leftkey = 0,rightkey = 0,drawkey = 0,throwkey = 0,attackkey = 0; + consolekey = 0; oldattackkey = 0; loading = 0; @@ -213,113 +327,98 @@ Game::Game() accountactive = NULL; } -typedef struct { - Game* game; - void (Game::*method)(); -} params_thread; - -void Game::fireSound(int sound) { - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[sound], 9999.0f, 99999.0f); - PlaySoundEx( sound, samp[sound], NULL, true); - OPENAL_3D_SetAttributes(channels[sound], gLoc, vel); - OPENAL_SetVolume(channels[sound], 256); - OPENAL_SetPaused(channels[sound], false); - OPENAL_Sample_SetMinMaxDistance(samp[sound], 8.0f, 2000.0f); +void Game::deleteGame(){ + if(text) + delete text; + for(int i=0;i<10;i++){ + if(Mainmenuitems[i])glDeleteTextures( 1, &Mainmenuitems[i] ); + } + glDeleteTextures( 1, &cursortexture ); + glDeleteTextures( 1, &Maparrowtexture ); + glDeleteTextures( 1, &Mapboxtexture ); + glDeleteTextures( 1, &Mapcircletexture ); + glDeleteTextures( 1, &terraintexture ); + glDeleteTextures( 1, &terraintexture2 ); + if(screentexture>0)glDeleteTextures( 1, &screentexture ); + if(screentexture2>0)glDeleteTextures( 1, &screentexture2 ); + glDeleteTextures( 1, &hawktexture ); + glDeleteTextures( 1, &logotexture ); + glDeleteTextures( 1, &loadscreentexture ); + + Dispose(); } -void Game::inputText() { - waiting=true; - params_thread* data = new params_thread; - data->game = this; - data->method = &Game::inputText_thread; - SDL_Thread* thread = SDL_CreateThread(Game::thread, data); - if ( thread == NULL ) { - fprintf(stderr, "Unable to create thread: %s\n", SDL_GetError()); - waiting=false; - return; - } +void Game::fireSound(int sound) { + emit_sound_at(sound); } -void Game::inputText_thread() { +void Game::inputText(char* str, int* charselected, int* nb_chars) { SDL_Event evenement; - SDL_EnableKeyRepeat(400, 40); - SDL_EnableUNICODE(true); + + if(!waiting) { + waiting=true; + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableUNICODE(true); + } - while(waiting) { - int i; - SDL_WaitEvent(&evenement); - + while(SDL_PollEvent(&evenement)) { + switch(evenement.type) { case SDL_KEYDOWN: if(evenement.key.keysym.sym == SDLK_ESCAPE) { - for(i=0;i<255;i++){ - displaytext[0][i]=' '; - } - displaychars[0]=0; - displayselected=0; - mainmenutogglekeydown=1; + for(int i=0;i<255;i++) + str[i]=0; + *nb_chars=0; + *charselected=0; waiting=false; - } else if(evenement.key.keysym.sym==SDLK_BACKSPACE&&displayselected!=0){ - for(i=displayselected-1;i<255;i++){ - displaytext[0][i]=displaytext[0][i+1]; + } else if(evenement.key.keysym.sym==SDLK_BACKSPACE){ + if((*charselected)!=0) { + for(int i=(*charselected)-1;i<255;i++) + str[i]=str[i+1]; + str[255]=0; + (*charselected)--; + (*nb_chars)--; } - displaytext[0][255]=' '; - displayselected--; - displaychars[0]--; - } else if(evenement.key.keysym.sym==SDLK_DELETE&&displayselected!=0){ - for(i=displayselected;i<255;i++){ - displaytext[0][i]=displaytext[0][i+1]; + } else if(evenement.key.keysym.sym==SDLK_DELETE){ + if((*charselected)<(*nb_chars)){ + for(int i=(*charselected);i<255;i++) + str[i]=str[i+1]; + str[255]=0; + (*nb_chars)--; } - displaytext[0][255]=' '; - displaychars[0]--; - } else if(evenement.key.keysym.sym==SDLK_LEFT&&displayselected!=0){ - displayselected--; - } else if(evenement.key.keysym.sym==SDLK_RIGHT&&displayselected=displayselected+1;i--){ - displaytext[0][i]=displaytext[0][i-1]; - } - displaytext[0][displayselected]=evenement.key.keysym.unicode; - displayselected++; - displaychars[0]++; - printf("%c\n",evenement.key.keysym.unicode); + } else if(evenement.key.keysym.unicode>=32&&evenement.key.keysym.unicode<127&&(*nb_chars)<60){ + for(int i=255;i>=(*charselected)+1;i--) + str[i]=str[i-1]; + str[*charselected]=evenement.key.keysym.unicode; + (*charselected)++; + (*nb_chars)++; } break; } } - entername=0; - SDL_EnableKeyRepeat(0,0); // disable key repeat - SDL_EnableUNICODE(false); + + if(!waiting) { + SDL_EnableKeyRepeat(0,0); // disable key repeat + SDL_EnableUNICODE(false); + } } void Game::setKeySelected() { waiting=true; - params_thread* data = new params_thread; - data->game = this; - data->method = &Game::setKeySelected_thread; printf("launch thread\n"); - SDL_Thread* thread = SDL_CreateThread(Game::thread, data); + SDL_Thread* thread = SDL_CreateThread(Game::setKeySelected_thread,NULL); if ( thread == NULL ) { fprintf(stderr, "Unable to create thread: %s\n", SDL_GetError()); waiting=false; @@ -327,7 +426,7 @@ void Game::setKeySelected() { } } -void Game::setKeySelected_thread() { +int Game::setKeySelected_thread(void* data) { int keycode=-1; SDL_Event evenement; while(keycode==-1) { @@ -346,23 +445,25 @@ void Game::setKeySelected_thread() { if(keycode != SDLK_ESCAPE) { fireSound(); switch(keyselect) { - case 0:forwardkey=keycode; + case 0: forwardkey=keycode; + break; + case 1: backkey=keycode; break; - case 1:backkey=keycode; + case 2: leftkey=keycode; break; - case 2:leftkey=keycode; + case 3: rightkey=keycode; break; - case 3:rightkey=keycode; + case 4: crouchkey=keycode; break; - case 4:crouchkey=keycode; + case 5: jumpkey=keycode; break; - case 5:jumpkey=keycode; + case 6: drawkey=keycode; break; - case 6:drawkey=keycode; + case 7: throwkey=keycode; break; - case 7:throwkey=keycode; + case 8: attackkey=keycode; break; - case 8:attackkey=keycode; + case 9: consolekey=keycode; break; default: break; @@ -370,11 +471,15 @@ void Game::setKeySelected_thread() { } keyselect=-1; waiting=false; + LoadMenu(); + return 0; } -int Game::thread(void *data) { - params_thread* pt = (params_thread*)data; - if(pt) { - (pt->game->*(pt->method))(); - } +void Game::DrawGL() { + if ( stereomode == stereoNone ) { + DrawGLScene(stereoCenter); + } else { + DrawGLScene(stereoLeft); + DrawGLScene(stereoRight); + } }