Commit fe3a2554 authored by mercury233's avatar mercury233

Merge branch 'sound' into link

parents 952fb20f 1b49dd79
......@@ -1976,9 +1976,9 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
s32 id = event.GUIEvent.Caller->getID();
switch(event.GUIEvent.EventType) {
case irr::gui::EGET_BUTTON_CLICKED: {
mainGame->PlaySoundEffect(SOUND_BUTTON);
switch(id) {
case BUTTON_CLEAR_LOG: {
mainGame->PlaySoundEffect(SOUND_BUTTON);
mainGame->lstLog->clear();
mainGame->logParam.clear();
return true;
......
......@@ -44,6 +44,7 @@ bool Game::Initialize() {
ignore_chain = false;
chain_when_avail = false;
is_building = false;
bgm_scene = -1;
memset(&dInfo, 0, sizeof(DuelInfo));
memset(chatTiming, 0, sizeof(chatTiming));
deckManager.LoadLFList();
......@@ -685,15 +686,15 @@ void Game::MainLoop() {
gMutex.Lock();
if(dInfo.isStarted) {
if(mainGame->showcardcode == 1 || mainGame->showcardcode == 3)
PlayMusic("./sound/duelwin.mp3", true);
PlayBGM(BGM_WIN);
else if(mainGame->showcardcode == 2)
PlayMusic("./sound/duellose.mp3", true);
PlayBGM(BGM_LOSE);
else if(mainGame->dInfo.lp[0] > 0 && mainGame->dInfo.lp[LocalPlayer(0)] <= mainGame->dInfo.lp[LocalPlayer(1)] / 2)
PlayMusic("./sound/song-disadvantage.mp3", true);
PlayBGM(BGM_DISADVANTAGE);
else if(mainGame->dInfo.lp[0] > 0 && mainGame->dInfo.lp[LocalPlayer(0)] >= mainGame->dInfo.lp[LocalPlayer(1)] * 2)
PlayMusic("./sound/song-advantage.mp3", true);
PlayBGM(BGM_ADVANTAGE);
else
PlayBGM();
PlayBGM(BGM_DUEL);
DrawBackImage(imageManager.tBackGround);
DrawBackGround();
DrawCards();
......@@ -702,11 +703,11 @@ void Game::MainLoop() {
driver->setMaterial(irr::video::IdentityMaterial);
driver->clearZBuffer();
} else if(is_building) {
PlayMusic("./sound/deck.mp3", true);
PlayBGM(BGM_DECK);
DrawBackImage(imageManager.tBackGround_deck);
DrawDeckBd();
} else {
PlayMusic("./sound/menu.mp3", true);
PlayBGM(BGM_MENU);
DrawBackImage(imageManager.tBackGround_menu);
}
DrawGUI();
......@@ -952,14 +953,28 @@ void Game::RefreshSingleplay() {
#endif
}
void Game::RefreshBGMList() {
RefershBGMDir(L"", BGM_DUEL);
RefershBGMDir(L"duel/", BGM_DUEL);
RefershBGMDir(L"menu/", BGM_MENU);
RefershBGMDir(L"deck/", BGM_DECK);
RefershBGMDir(L"advantage/", BGM_ADVANTAGE);
RefershBGMDir(L"disadvantage/", BGM_DISADVANTAGE);
RefershBGMDir(L"win/", BGM_WIN);
RefershBGMDir(L"lose/", BGM_LOSE);
}
void Game::RefershBGMDir(std::wstring path, int scene) {
#ifdef _WIN32
WIN32_FIND_DATAW fdataw;
HANDLE fh = FindFirstFileW(L"./sound/BGM/*.mp3", &fdataw);
std::wstring search = L"./sound/BGM/" + path + L"*.mp3";
HANDLE fh = FindFirstFileW(search.c_str(), &fdataw);
if(fh == INVALID_HANDLE_VALUE)
return;
do {
if(!(fdataw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
BGMList.push_back(fdataw.cFileName);
if(!(fdataw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
std::wstring filename = path + (std::wstring)fdataw.cFileName;
BGMList[BGM_ALL].push_back(filename);
BGMList[scene].push_back(filename);
}
} while(FindNextFileW(fh, &fdataw));
FindClose(fh);
#else
......@@ -973,7 +988,7 @@ void Game::RefreshBGMList() {
continue;
wchar_t wname[256];
BufferIO::DecodeUTF8(dirp->d_name, wname);
BGMList.push_back(fdataw.cFileName);
BGMList[BGM_ALL].push_back(wname);
}
closedir(dir);
#endif
......@@ -1282,36 +1297,31 @@ void Game::PlaySoundEffect(int sound) {
engineSound->setSoundVolume(gameConf.sound_volume);
}
void Game::PlayMusic(char* song, bool loop) {
if(mainGame->chkEnableMusic->isChecked()) {
if(!mainGame->chkEnableMusic->isChecked())
return;
if(!engineMusic->isCurrentlyPlaying(song)) {
engineMusic->stopAllSounds();
engineMusic->play2D(song, loop);
soundBGM = engineMusic->play2D(song, loop, false, true);
engineMusic->setSoundVolume(gameConf.music_volume);
}
}
}
void Game::PlayBGM() {
if(mainGame->chkEnableMusic->isChecked()) {
static bool is_playing = false;
static char strBuffer[1024];
if(is_playing && !engineMusic->isCurrentlyPlaying(strBuffer))
is_playing = false;
if(!is_playing) {
int count = BGMList.size();
void Game::PlayBGM(int scene) {
if(!mainGame->chkEnableMusic->isChecked())
return;
if(!mainGame->chkMusicMode->isChecked())
scene = BGM_ALL;
char BGMName[1024];
if(scene != bgm_scene || (soundBGM && soundBGM->isFinished())) {
int count = BGMList[scene].size();
if(count <= 0)
return;
int bgm = (gameConf.music_mode >= 0) ? 0 : rand() % count;
auto name = BGMList[bgm].c_str();
wchar_t fname[256];
bgm_scene = scene;
int bgm = rand() % count;
auto name = BGMList[scene][bgm].c_str();
wchar_t fname[1024];
myswprintf(fname, L"./sound/BGM/%ls", name);
BufferIO::EncodeUTF8(fname, strBuffer);
}
if(!engineMusic->isCurrentlyPlaying(strBuffer)) {
engineMusic->stopAllSounds();
engineMusic->play2D(strBuffer, true);
engineMusic->setSoundVolume(gameConf.music_volume);
is_playing = true;
}
BufferIO::EncodeUTF8(fname, BGMName);
PlayMusic(BGMName, false);
}
}
void Game::ShowCardInfo(int code) {
......
......@@ -96,6 +96,7 @@ public:
void RefreshReplay();
void RefreshSingleplay();
void RefreshBGMList();
void RefershBGMDir(std::wstring path, int scene);
void DrawSelectionLine(irr::video::S3DVertex* vec, bool strip, int width, float* cv);
void DrawBackGround();
void DrawLinkedZones(ClientCard* pcard);
......@@ -122,7 +123,7 @@ public:
void CloseDuelWindow();
void PlaySoundEffect(int sound);
void PlayMusic(char* song, bool loop);
void PlayBGM();
void PlayBGM(int mode);
int LocalPlayer(int player);
const wchar_t* LocalName(int local_player);
......@@ -149,7 +150,7 @@ public:
std::list<FadingUnit> fadingList;
std::vector<int> logParam;
std::wstring chatMsg[8];
std::vector<std::wstring> BGMList;
std::vector<std::wstring> BGMList[8];
int hideChatTimer;
bool hideChat;
......@@ -181,6 +182,8 @@ public:
bool is_building;
bool is_siding;
int bgm_scene;
ClientField dField;
DeckBuilder deckBuilder;
MenuHandler menuHandler;
......@@ -440,6 +443,7 @@ public:
//soundEngine
irrklang::ISoundEngine* engineSound;
irrklang::ISoundEngine* engineMusic;
irrklang::ISound* soundBGM;
};
extern Game* mainGame;
......@@ -613,5 +617,14 @@ extern Game* mainGame;
#define SOUND_PLAYER_ENTER 307
#define SOUND_CHAT 308
#define BGM_ALL 0
#define BGM_DUEL 1
#define BGM_MENU 2
#define BGM_DECK 3
#define BGM_ADVANTAGE 4
#define BGM_DISADVANTAGE 5
#define BGM_WIN 6
#define BGM_LOSE 7
#define DEFAULT_DUEL_RULE 4
#endif // GAME_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment