X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGame.cpp;h=9cdf9eb1ca3a5164dd904b29c2a4b7cc6c6c3c20;hb=bbf8873b80baf3cb468ac12b3f62b0938320fef1;hp=776a0e77899ecda9854457c6684d098d2b157d7b;hpb=e31b70325214fa5bdd433c1fd2aa96a1eb6c6684;p=lugaru.git diff --git a/Source/Game.cpp b/Source/Game.cpp index 776a0e7..9cdf9eb 100644 --- a/Source/Game.cpp +++ b/Source/Game.cpp @@ -3,11 +3,30 @@ #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]; + +std::vector Game::textures; Game::Game() { @@ -67,13 +86,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; @@ -137,10 +151,6 @@ Game::Game() // XYZ cameraloc; cameradist = 0; - envtogglekeydown = 0; - slomotogglekeydown = 0; - texturesizetogglekeydown = 0; - freezetogglekeydown = 0; drawtoggle = 0; editorenabled = 0; @@ -177,13 +187,9 @@ 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; @@ -219,98 +225,70 @@ typedef struct { } 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); + emit_sound_at(sound); } -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::inputText_thread() { +void Game::inputText(char* str, int* charselected, int* nb_chars) { SDL_Event evenement; - SDL_EnableKeyRepeat(400, 40); - SDL_EnableUNICODE(true); + int i; + + if(!waiting) { + waiting=true; + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableUNICODE(true); + } - while(waiting) { - int i; - SDL_WaitEvent(&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; - 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]; - } - 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]; - } - 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); + SDL_PollEvent(&evenement); + + switch(evenement.type) { + case SDL_KEYDOWN: + if(evenement.key.keysym.sym == SDLK_ESCAPE) { + for(i=0;i<255;i++) + str[i]=0; + *nb_chars=0; + *charselected=0; + waiting=false; + } else if(evenement.key.keysym.sym==SDLK_BACKSPACE){ + if((*charselected)!=0) { + for(i=(*charselected)-1;i<255;i++) + str[i]=str[i+1]; + str[255]=0; + (*charselected)--; + (*nb_chars)--; } - break; - } + } else if(evenement.key.keysym.sym==SDLK_DELETE){ + if((*charselected)<(*nb_chars)){ + for(i=(*charselected);i<255;i++) + str[i]=str[i+1]; + str[255]=0; + (*nb_chars)--; + } + } else if(evenement.key.keysym.sym==SDLK_HOME){ + (*charselected)=0; + } else if(evenement.key.keysym.sym==SDLK_END){ + (*charselected)=(*nb_chars); + } else if(evenement.key.keysym.sym==SDLK_LEFT){ + if((*charselected)!=0) + (*charselected)--; + } else if(evenement.key.keysym.sym==SDLK_RIGHT){ + if((*charselected)<(*nb_chars)) + (*charselected)++; + } else if(evenement.key.keysym.sym==SDLK_RETURN) { + waiting=false; + } else if(evenement.key.keysym.unicode>=32&&evenement.key.keysym.unicode<127&&(*nb_chars)<60){ + for(i=255;i>=(*charselected)+1;i--) + str[i]=str[i-1]; + str[*charselected]=evenement.key.keysym.unicode; + (*charselected)++; + (*nb_chars)++; + } + break; + } + + if(!waiting) { + SDL_EnableKeyRepeat(0,0); // disable key repeat + SDL_EnableUNICODE(false); } - entername=0; - SDL_EnableKeyRepeat(0,0); // disable key repeat - SDL_EnableUNICODE(false); } void Game::setKeySelected() { @@ -346,23 +324,23 @@ void Game::setKeySelected_thread() { if(keycode != SDLK_ESCAPE) { fireSound(); switch(keyselect) { - case 0:forwardkey=keycode; + case 0: forwardkey=keycode; break; - case 1:backkey=keycode; + case 1: backkey=keycode; break; - case 2:leftkey=keycode; + case 2: leftkey=keycode; break; - case 3:rightkey=keycode; + case 3: rightkey=keycode; break; - case 4:crouchkey=keycode; + case 4: crouchkey=keycode; break; - case 5:jumpkey=keycode; + case 5: jumpkey=keycode; break; - case 6:drawkey=keycode; + case 6: drawkey=keycode; break; - case 7:throwkey=keycode; + case 7: throwkey=keycode; break; - case 8:attackkey=keycode; + case 8: attackkey=keycode; break; default: break; @@ -378,3 +356,12 @@ int Game::thread(void *data) { (pt->game->*(pt->method))(); } } + +void Game::DrawGL() { + if ( stereomode == stereoNone ) { + DrawGLScene(stereoCenter); + } else { + DrawGLScene(stereoLeft); + DrawGLScene(stereoRight); + } +}