From ec553ddfb80cc1f73ad87ed4f462feb12ea992e4 Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Sun, 29 Nov 2009 05:52:12 +0000 Subject: [PATCH] Erwan - Yeshua's patch for ingame music --- projects/mtg/include/GameStateDuel.h | 15 +++++++- projects/mtg/src/GameStateDuel.cpp | 51 ++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/projects/mtg/include/GameStateDuel.h b/projects/mtg/include/GameStateDuel.h index f12d4711a..5a2bc5179 100644 --- a/projects/mtg/include/GameStateDuel.h +++ b/projects/mtg/include/GameStateDuel.h @@ -31,7 +31,20 @@ class GameStateDuel: public GameState, public JGuiListener SimpleMenu * opponentMenu; SimpleMenu * menu; bool premadeDeck; - + int OpponentsDeckid; + string musictrack; + + bool MusicExist(string FileName){ + string filepath = RESPATH; + filepath = filepath + "/" + resources.musicFile(FileName); + std::ifstream file(filepath.c_str()); + if (file) { + file.close(); + return true; + } + else + return false; + } void loadPlayer(int playerId, int decknb = 0, int isAI = 0); void loadPlayerMomir(int playerId, int isAI); void loadPlayerRandom(int playerId, int isAI, int mode); diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index fc430404f..37576f9c1 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -43,7 +43,7 @@ enum ENUM_DUEL_MENUS GameStateDuel::GameStateDuel(GameApp* parent): GameState(parent) { - for (int i = 0; i<2; i ++){ + for (int i = 0; i<2; i ++){ deck[i]=NULL; mPlayers[i]=NULL; } @@ -67,7 +67,12 @@ void GameStateDuel::Start() { JRenderer * renderer = JRenderer::GetInstance(); renderer->EnableVSync(true); - + OpponentsDeckid=0; + //stop menu music + if (GameApp::music){ + JSoundSystem::GetInstance()->StopMusic(GameApp::music); + SAFE_DELETE(GameApp::music); + } #ifdef TESTSUITE SAFE_DELETE(testSuite); @@ -100,6 +105,7 @@ void GameStateDuel::Start() fillDeckMenu(deckmenu,RESPATH"/player/premade"); } //mGamePhase = DUEL_STATE_ERROR_NO_DECK; + } void GameStateDuel::loadPlayerRandom(int playerId, int isAI, int mode){ @@ -219,6 +225,11 @@ void GameStateDuel::End() OutputDebugString("Ending GamestateDuel\n"); #endif SAFE_DELETE(deckmenu); + //stop game music + if (GameApp::music){ + JSoundSystem::GetInstance()->StopMusic(GameApp::music); + SAFE_DELETE(GameApp::music); + } JRenderer::GetInstance()->EnableVSync(false); if (mPlayers[0] && mPlayers[1]) mPlayers[0]->End(); GameObserver::EndInstance(); @@ -322,16 +333,35 @@ void GameStateDuel::Update(float dt) } else { - if (opponentMenu->closed) mGamePhase = DUEL_STATE_PLAY; - else opponentMenu->Update(dt); + if (opponentMenu->closed) mGamePhase = DUEL_STATE_PLAY; + else opponentMenu->Update(dt); } break; - case DUEL_STATE_PLAY: - //Stop the music before starting the game - if (GameApp::music){ - JSoundSystem::GetInstance()->StopMusic(GameApp::music); - SAFE_DELETE(GameApp::music); - } + case DUEL_STATE_PLAY: + //start of in game music code + musictrack = ""; + //check opponent id and choose the music track based on it + if(OpponentsDeckid) { + char temp[4096]; + sprintf(temp,"ai_baka_music%i.mp3",OpponentsDeckid); + musictrack.assign(temp); + } + else if(mParent->gameType == GAME_TYPE_CLASSIC) + musictrack = "ai_baka_music.mp3"; + else if(mParent->gameType == GAME_TYPE_MOMIR) + musictrack = "ai_baka_music_momir.mp3"; + else if(mParent->gameType == GAME_TYPE_RANDOM1 || mParent->gameType == GAME_TYPE_RANDOM2) + musictrack = "ai_baka_music_random.mp3"; + + if(!MusicExist(musictrack)) + musictrack = "ai_baka_music.mp3"; + + //play the music + if (GameApp::HasMusic && !GameApp::music && options[Options::MUSICVOLUME].number > 0 && MusicExist(musictrack)){ + GameApp::music = resources.ssLoadMusic(musictrack.c_str()); + JSoundSystem::GetInstance()->PlayMusic(GameApp::music, true); + } + //end of music code if (!game){ GameObserver::Init(mPlayers, 2); game = GameObserver::GetInstance(); @@ -480,6 +510,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) break; default: loadPlayer(1,controlId,1); + OpponentsDeckid=controlId; opponentMenu->Close(); mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; break;