changeset 18378:5f7e81a74fef draft

(svn r23214) -Codechange: for base media sets pass the "search in tars" parameter to determine what to do
author rubidium <rubidium@openttd.org>
date Mon, 14 Nov 2011 19:24:22 +0000
parents 1fbc96028362
children 1e02b7afbe01
files src/base_media_base.h src/base_media_func.h src/gfxinit.cpp src/music.cpp src/sound.cpp
diffstat 5 files changed, 23 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/base_media_base.h
+++ b/src/base_media_base.h
@@ -40,17 +40,17 @@
  * 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 @@
 	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 @@
 };
 
 /** 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 @@
 };
 
 /** 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_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];
--- a/src/base_media_func.h
+++ b/src/base_media_func.h
@@ -39,8 +39,8 @@
  * @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 @@
 	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 @@
 			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 @@
 
 	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);
--- a/src/gfxinit.cpp
+++ b/src/gfxinit.cpp
@@ -248,7 +248,7 @@
 
 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 @@
 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()
--- a/src/music.cpp
+++ b/src/music.cpp
@@ -27,8 +27,8 @@
 /** 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 @@
 
 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");
--- a/src/sound.cpp
+++ b/src/sound.cpp
@@ -281,8 +281,8 @@
 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()