diff options
author | rubidium <rubidium@openttd.org> | 2009-08-09 19:50:44 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-08-09 19:50:44 +0000 |
commit | 9ee2a66c8620d2f47c0d7792847c90146dfc4f8e (patch) | |
tree | dae5e6c7eac84bc443fc16ebb012bb7697923649 /src/sound.cpp | |
parent | 35d5a197d6f93e05eb358ed0a30db9ab2645911b (diff) | |
download | openttd-9ee2a66c8620d2f47c0d7792847c90146dfc4f8e.tar.xz |
(svn r17139) -Change: add the concept of sound sets
Diffstat (limited to 'src/sound.cpp')
-rw-r--r-- | src/sound.cpp | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/src/sound.cpp b/src/sound.cpp index 0e4b705fb..99799002d 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -13,6 +13,10 @@ #include "vehicle_base.h" #include "debug.h" +/* The type of set we're replacing */ +#define SET_TYPE "sounds" +#include "base_media_func.h" + static SoundEntry _original_sounds[ORIGINAL_SAMPLE_COUNT]; MusicFileSettings msf; @@ -116,10 +120,10 @@ static bool SetBankSource(MixerChannel *mc, const SoundEntry *sound) return true; } -bool SoundInitialize(const char *filename) +void InitializeSound() { - OpenBankFile(filename); - return true; + DEBUG(misc, 1, "Loading sound effects..."); + OpenBankFile(BaseSounds::GetUsedSet()->files->filename); } /* Low level sound player */ @@ -242,3 +246,34 @@ void SndPlayFx(SoundID sound) { StartSound(sound, 0, msf.effect_vol); } + +INSTANTIATE_BASE_MEDIA_METHODS(BaseMedia<SoundsSet>, SoundsSet) + +/** Names corresponding to the sound set's files */ +template <class T, size_t Tnum_files> +/* static */ const char *BaseSet<T, Tnum_files>::file_names[Tnum_files] = { "samples" }; + +template <class Tbase_set> +/* static */ const char *BaseMedia<Tbase_set>::GetExtension() +{ + return ".obs"; // OpenTTD Base Sounds +} + +template <class Tbase_set> +/* static */ bool BaseMedia<Tbase_set>::DetermineBestSet() +{ + if (BaseMedia<Tbase_set>::used_set != NULL) return true; + + const Tbase_set *best = BaseMedia<Tbase_set>::available_sets; + for (const Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != NULL; c = c->next) { + if (best->found_files < c->found_files || + (best->found_files == c->found_files && + (best->shortname == c->shortname && best->version < c->version))) { + best = c; + } + } + + BaseMedia<Tbase_set>::used_set = best; + return BaseMedia<Tbase_set>::used_set != NULL; +} + |