[planetblupi] 03/29: Look music for user dir, fallback to the game dir
Didier Raboud
odyx at moszumanska.debian.org
Tue Jan 2 08:38:40 UTC 2018
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch debian/master
in repository planetblupi.
commit 67ea4d0c2ef566a615600c77ed32dcd621319261
Author: Mathieu Schroeter <mathieu at schroetersa.ch>
Date: Mon Dec 11 18:42:49 2017 +0100
Look music for user dir, fallback to the game dir
Then it's possible to overload the original musicis by providing yours in
the user directory (in music subdir).
---
src/event.cxx | 28 ++++++++++++++++++++--------
src/misc.cxx | 24 ++++++++++++++++++++----
src/misc.h | 6 +++++-
src/sound.cxx | 9 ++++-----
4 files changed, 49 insertions(+), 18 deletions(-)
diff --git a/src/event.cxx b/src/event.cxx
index 22ff6f4..315a1ab 100644
--- a/src/event.cxx
+++ b/src/event.cxx
@@ -3362,18 +3362,29 @@ CEvent::ChangePhase (Uint32 phase)
music = m_pDecor->GetMusic ();
if (music > 0)
{
- const std::string exts[] = {"ogg", "mid"};
+ static const std::string exts[] = {"ogg", "mid"};
+ static const Location locs[] = {LOCATION_USER, LOCATION_BASE};
+ std::string absolute;
- filename = string_format (
- "music/music%.3d.%s", music - 1,
- exts[g_restoreMidi ? 1 : 0].c_str ());
- if (!FileExists (filename))
+ // Look for music in the user directory, then in the game directory.
+ for (size_t i = 0; i < countof (locs); ++i)
+ {
filename = string_format (
"music/music%.3d.%s", music - 1,
- exts[g_restoreMidi ? 0 : 1].c_str ());
+ exts[g_restoreMidi ? 1 : 0].c_str ());
+ if (!FileExists (filename, absolute, locs[i]))
+ filename = string_format (
+ "music/music%.3d.%s", music - 1,
+ exts[g_restoreMidi ? 0 : 1].c_str ());
+
+ if (FileExists (filename, absolute, locs[i]))
+ break;
+
+ absolute = "";
+ }
m_pSound->StopMusic ();
- m_pSound->PlayMusic (filename);
+ m_pSound->PlayMusic (absolute);
}
}
}
@@ -4403,7 +4414,8 @@ CEvent::StartMovie (const std::string & pFilename)
if (!m_bMovie)
return false;
- if (!FileExists (pFilename))
+ std::string absolute;
+ if (!FileExists (pFilename, absolute))
return false;
HideMouse (true);
diff --git a/src/misc.cxx b/src/misc.cxx
index de244e9..3884ec7 100644
--- a/src/misc.cxx
+++ b/src/misc.cxx
@@ -157,12 +157,28 @@ AddUserPath (std::string & pFilename)
}
bool
-FileExists (const std::string & filename)
+FileExists (
+ const std::string & filename, std::string & absolute, enum Location location)
{
- const auto path = GetBaseDir () + filename;
- FILE * file;
+ absolute = filename;
+ FILE * file;
- file = fopen (path.c_str (), "rb");
+ switch (location)
+ {
+ case LOCATION_BASE:
+ absolute = GetBaseDir () + filename;
+ break;
+
+ case LOCATION_USER:
+ AddUserPath (absolute);
+ break;
+
+ default:
+ case LOCATION_ABSOLUTE:
+ break;
+ }
+
+ file = fopen (absolute.c_str (), "rb");
if (file == nullptr)
return false;
diff --git a/src/misc.h b/src/misc.h
index db50f86..d1a5c98 100644
--- a/src/misc.h
+++ b/src/misc.h
@@ -37,7 +37,11 @@ std::string GetBaseDir ();
std::string GetShareDir ();
std::string GetLocale ();
extern void AddUserPath (std::string & pFilename);
-bool FileExists (const std::string & filename);
+
+enum Location { LOCATION_ABSOLUTE, LOCATION_BASE, LOCATION_USER };
+bool FileExists (
+ const std::string & filename, std::string & absolute,
+ Location location = LOCATION_BASE);
template <typename... Args>
std::string
diff --git a/src/sound.cxx b/src/sound.cxx
index 6e0790b..2969914 100644
--- a/src/sound.cxx
+++ b/src/sound.cxx
@@ -326,20 +326,19 @@ CSound::PlayImage (Sounds channel, Point pos, Sint32 rank)
bool
CSound::PlayMusic (const std::string & lpszMIDIFilename)
{
- std::string path = GetBaseDir ();
-
if (m_midiVolume == 0)
return true;
+ if (lpszMIDIFilename.empty ())
+ return false;
+
Mix_VolumeMusic (MIX_MAX_VOLUME * 100 * m_midiVolume / 20 / 100);
m_lastMidiVolume = m_midiVolume;
- path += lpszMIDIFilename;
-
if (m_pMusic)
Mix_FreeMusic (m_pMusic);
- m_pMusic = Mix_LoadMUS (path.c_str ());
+ m_pMusic = Mix_LoadMUS (lpszMIDIFilename.c_str ());
if (!m_pMusic)
{
printf ("%s\n", Mix_GetError ());
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/planetblupi.git
More information about the Pkg-games-commits
mailing list