diff options
author | rubidium <rubidium@openttd.org> | 2011-11-14 19:24:22 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2011-11-14 19:24:22 +0000 |
commit | 15f671279df2696aad13aca3d431ee4a988694f3 (patch) | |
tree | a5e7c7e76c564885310f30ef3372819d30e0b2a7 /src | |
parent | a06443774fb8cc21631a3e76bca4d1c03913303b (diff) | |
download | openttd-15f671279df2696aad13aca3d431ee4a988694f3.tar.xz |
(svn r23214) -Codechange: for base media sets pass the "search in tars" parameter to determine what to do
Diffstat (limited to 'src')
-rw-r--r-- | src/base_media_base.h | 19 | ||||
-rw-r--r-- | src/base_media_func.h | 12 | ||||
-rw-r--r-- | src/gfxinit.cpp | 6 | ||||
-rw-r--r-- | src/music.cpp | 6 | ||||
-rw-r--r-- | src/sound.cpp | 4 |
5 files changed, 23 insertions, 24 deletions
diff --git a/src/base_media_base.h b/src/base_media_base.h index c6c0fd13e..2cdedd672 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -40,17 +40,17 @@ struct MD5File { * Information about a single base set. * @tparam T the real class we're going to be * @tparam Tnum_files the number of files in the set - * @tparam Tsubdir the subdirectory where to find the files + * @tparam Tsearch_in_tars whether to search in the tars or not */ -template <class T, size_t Tnum_files, Subdirectory Tsubdir> +template <class T, size_t Tnum_files, bool Tsearch_in_tars> struct BaseSet { typedef SmallMap<const char *, const char *> TranslatedStrings; /** Number of files in this set */ static const size_t NUM_FILES = Tnum_files; - /** The sub directory to search for the files */ - static const Subdirectory SUBDIR = Tsubdir; + /** Whether to search in the tars or not. */ + static const bool SEARCH_IN_TARS = Tsearch_in_tars; /** Internal names of the files in this set. */ static const char * const *file_names; @@ -164,9 +164,8 @@ public: static uint FindSets() { BaseMedia<Tbase_set> fs; - /* GM_DIR == music set. Music sets don't support tars, - * so there is no need to search for tars in that case. */ - return fs.Scan(GetExtension(), Tbase_set::SUBDIR, Tbase_set::SUBDIR != GM_DIR); + /* Searching in tars is only done in the sound and graphics base sets. */ + return fs.Scan(GetExtension(), Tbase_set::SEARCH_IN_TARS ? BASESET_DIR : GM_DIR, Tbase_set::SEARCH_IN_TARS); } static bool SetSet(const char *name); @@ -204,7 +203,7 @@ enum BlitterType { }; /** All data of a graphics set. */ -struct GraphicsSet : BaseSet<GraphicsSet, MAX_GFT, BASESET_DIR> { +struct GraphicsSet : BaseSet<GraphicsSet, MAX_GFT, true> { PaletteType palette; ///< Palette of this graphics set BlitterType blitter; ///< Blitter of this graphics set @@ -217,7 +216,7 @@ public: }; /** All data of a sounds set. */ -struct SoundsSet : BaseSet<SoundsSet, 1, BASESET_DIR> { +struct SoundsSet : BaseSet<SoundsSet, 1, true> { }; /** All data/functions related with replacing the base sounds */ @@ -236,7 +235,7 @@ static const uint NUM_SONGS_AVAILABLE = 1 + NUM_SONG_CLASSES * NUM_SONGS_CLASS; static const uint NUM_SONGS_PLAYLIST = 32; /** All data of a music set. */ -struct MusicSet : BaseSet<MusicSet, NUM_SONGS_AVAILABLE, GM_DIR> { +struct MusicSet : BaseSet<MusicSet, NUM_SONGS_AVAILABLE, false> { /** The name of the different songs. */ char song_name[NUM_SONGS_AVAILABLE][32]; byte track_nr[NUM_SONGS_AVAILABLE]; diff --git a/src/base_media_func.h b/src/base_media_func.h index 8834c6d4f..c5b07fb4c 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -39,8 +39,8 @@ template <class Tbase_set> /* static */ Tbase_set *BaseMedia<Tbase_set>::duplica * @param allow_empty_filename empty filenames are valid * @return true if loading was successful. */ -template <class T, size_t Tnum_files, Subdirectory Tsubdir> -bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *path, const char *full_filename, bool allow_empty_filename) +template <class T, size_t Tnum_files, bool Tsearch_in_tars> +bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const char *path, const char *full_filename, bool allow_empty_filename) { memset(this, 0, sizeof(*this)); @@ -78,9 +78,9 @@ bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *p for (uint i = 0; i < Tnum_files; i++) { MD5File *file = &this->files[i]; /* Find the filename first. */ - item = files->GetItem(BaseSet<T, Tnum_files, Tsubdir>::file_names[i], false); + item = files->GetItem(BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], false); if (item == NULL || (item->value == NULL && !allow_empty_filename)) { - DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet<T, Tnum_files, Tsubdir>::file_names[i], full_filename); + DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], full_filename); return false; } @@ -131,7 +131,7 @@ bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *p file->missing_warning = strdup(item->value); } - switch (file->CheckMD5(Tsubdir)) { + switch (file->CheckMD5(Tsearch_in_tars ? BASESET_DIR : GM_DIR)) { case MD5File::CR_MATCH: this->valid_files++; /* FALL THROUGH */ @@ -155,7 +155,7 @@ bool BaseMedia<Tbase_set>::AddFile(const char *filename, size_t basepath_length, Tbase_set *set = new Tbase_set(); IniFile *ini = new IniFile(); - ini->LoadFromDisk(filename, Tbase_set::SUBDIR); + ini->LoadFromDisk(filename, Tbase_set::SEARCH_IN_TARS ? BASESET_DIR : GM_DIR); char *path = strdup(filename + basepath_length); char *psep = strrchr(path, PATHSEPCHAR); diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 9edaadc39..0e4e2e89f 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -248,7 +248,7 @@ void GfxLoadSprites() bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename) { - bool ret = this->BaseSet<GraphicsSet, MAX_GFT, BASESET_DIR>::FillSetDetails(ini, path, full_filename, false); + bool ret = this->BaseSet<GraphicsSet, MAX_GFT, true>::FillSetDetails(ini, path, full_filename, false); if (ret) { IniGroup *metadata = ini->GetGroup("metadata"); IniItem *item; @@ -299,8 +299,8 @@ MD5File::ChecksumResult MD5File::CheckMD5(Subdirectory subdir) const static const char * const _graphics_file_names[] = { "base", "logos", "arctic", "tropical", "toyland", "extra" }; /** Implementation */ -template <class T, size_t Tnum_files, Subdirectory Tsubdir> -/* static */ const char * const *BaseSet<T, Tnum_files, Tsubdir>::file_names = _graphics_file_names; +template <class T, size_t Tnum_files, bool Tsearch_in_tars> +/* static */ const char * const *BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names = _graphics_file_names; template <class Tbase_set> /* static */ bool BaseMedia<Tbase_set>::DetermineBestSet() diff --git a/src/music.cpp b/src/music.cpp index de642cc30..55599a947 100644 --- a/src/music.cpp +++ b/src/music.cpp @@ -27,8 +27,8 @@ static const char * const _music_file_names[] = { /** Make sure we aren't messing things up. */ assert_compile(lengthof(_music_file_names) == NUM_SONGS_AVAILABLE); -template <class T, size_t Tnum_files, Subdirectory Tsubdir> -/* static */ const char * const *BaseSet<T, Tnum_files, Tsubdir>::file_names = _music_file_names; +template <class T, size_t Tnum_files, bool Tsearch_in_tars> +/* static */ const char * const *BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names = _music_file_names; template <class Tbase_set> /* static */ const char *BaseMedia<Tbase_set>::GetExtension() @@ -60,7 +60,7 @@ template <class Tbase_set> bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename) { - bool ret = this->BaseSet<MusicSet, NUM_SONGS_AVAILABLE, GM_DIR>::FillSetDetails(ini, path, full_filename); + bool ret = this->BaseSet<MusicSet, NUM_SONGS_AVAILABLE, false>::FillSetDetails(ini, path, full_filename); if (ret) { this->num_available = 0; IniGroup *names = ini->GetGroup("names"); diff --git a/src/sound.cpp b/src/sound.cpp index 932ec8f5b..fe4ba0057 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -281,8 +281,8 @@ INSTANTIATE_BASE_MEDIA_METHODS(BaseMedia<SoundsSet>, SoundsSet) static const char * const _sound_file_names[] = { "samples" }; -template <class T, size_t Tnum_files, Subdirectory Tsubdir> -/* static */ const char * const *BaseSet<T, Tnum_files, Tsubdir>::file_names = _sound_file_names; +template <class T, size_t Tnum_files, bool Tsearch_in_tars> +/* static */ const char * const *BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names = _sound_file_names; template <class Tbase_set> /* static */ const char *BaseMedia<Tbase_set>::GetExtension() |