X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGame.cpp;h=c3c846d8bce2a8fd6e878c2f22f4c15062cc271a;hb=7602f0f320a55597c79cdbee252658d601ca1853;hp=776a0e77899ecda9854457c6684d098d2b157d7b;hpb=e31b70325214fa5bdd433c1fd2aa96a1eb6c6684;p=lugaru.git diff --git a/Source/Game.cpp b/Source/Game.cpp index 776a0e7..c3c846d 100644 --- a/Source/Game.cpp +++ b/Source/Game.cpp @@ -3,11 +3,28 @@ #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]; Game::Game() { @@ -181,9 +198,8 @@ Game::Game() consoleblinkdelay = 0; consoleblink = 0; consoleselected = 0; - memset(togglekey, 0, sizeof(togglekey)); - memset(togglekeydelay, 0, sizeof(togglekeydelay)); - registernow = 0; +// memset(togglekey, 0, sizeof(togglekey)); +// memset(togglekeydelay, 0, sizeof(togglekeydelay)); autocam = 0; crouchkey = 0,jumpkey = 0,forwardkey = 0,chatkey = 0,backkey = 0,leftkey = 0,rightkey = 0,drawkey = 0,throwkey = 0,attackkey = 0; @@ -219,98 +235,68 @@ 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); - - 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]; + SDL_PollEvent(&evenement); + + switch(evenement.type) { + case SDL_KEYDOWN: + if(evenement.key.keysym.sym == SDLK_ESCAPE) { + for(i=0;i<255;i++){ + str[i]=' '; + } + *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]; } - displaytext[0][displayselected]=evenement.key.keysym.unicode; - displayselected++; - displaychars[0]++; - printf("%c\n",evenement.key.keysym.unicode); + str[255]=' '; + (*charselected)--; + (*nb_chars)--; } - break; - } + } else if(evenement.key.keysym.sym==SDLK_DELETE){ + for(i=(*charselected);i<255;i++){ + str[i]=str[i+1]; + } + str[255]=' '; + (*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<127)&&((*nb_chars)<60)&&(evenement.key.keysym.sym!=SDLK_LSHIFT)&&(evenement.key.keysym.sym!=SDLK_RSHIFT)) { + 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 +332,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 +364,12 @@ int Game::thread(void *data) { (pt->game->*(pt->method))(); } } + +void Game::DrawGL() { + if ( stereomode == stereoNone ) { + DrawGLScene(stereoCenter); + } else { + DrawGLScene(stereoLeft); + DrawGLScene(stereoRight); + } +}