mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
fixed extremely slow musicHandler compilation. Removed usage of boost bimap.
This commit is contained in:
parent
856c7feeba
commit
e8c35bdb24
@ -1,5 +1,4 @@
|
|||||||
#include "StdInc.h"
|
#include "StdInc.h"
|
||||||
#include <boost/bimap.hpp>
|
|
||||||
#include <SDL_mixer.h>
|
#include <SDL_mixer.h>
|
||||||
|
|
||||||
#include "CMusicHandler.h"
|
#include "CMusicHandler.h"
|
||||||
@ -22,7 +21,17 @@
|
|||||||
|
|
||||||
using namespace boost::assign;
|
using namespace boost::assign;
|
||||||
|
|
||||||
static boost::bimap<soundBase::soundID, std::string> sounds;
|
#define VCMI_SOUND_NAME(x)
|
||||||
|
#define VCMI_SOUND_FILE(y) #y,
|
||||||
|
|
||||||
|
// sounds mapped to soundBase enum
|
||||||
|
static std::string sounds[] = {
|
||||||
|
"", // invalid
|
||||||
|
"", // todo
|
||||||
|
VCMI_SOUND_LIST
|
||||||
|
};
|
||||||
|
#undef VCMI_SOUND_NAME
|
||||||
|
#undef VCMI_SOUND_FILE
|
||||||
|
|
||||||
// Not pretty, but there's only one music handler object in the game.
|
// Not pretty, but there's only one music handler object in the game.
|
||||||
static void soundFinishedCallbackC(int channel)
|
static void soundFinishedCallbackC(int channel)
|
||||||
@ -75,13 +84,6 @@ CSoundHandler::CSoundHandler():
|
|||||||
listener(settings.listen["general"]["sound"])
|
listener(settings.listen["general"]["sound"])
|
||||||
{
|
{
|
||||||
listener(boost::bind(&CSoundHandler::onVolumeChange, this, _1));
|
listener(boost::bind(&CSoundHandler::onVolumeChange, this, _1));
|
||||||
// Map sound names
|
|
||||||
#define VCMI_SOUND_NAME(x) ( soundBase::x,
|
|
||||||
#define VCMI_SOUND_FILE(y) #y )
|
|
||||||
sounds = boost::assign::list_of<boost::bimap<soundBase::soundID, std::string>::relation>
|
|
||||||
VCMI_SOUND_LIST;
|
|
||||||
#undef VCMI_SOUND_NAME
|
|
||||||
#undef VCMI_SOUND_FILE
|
|
||||||
|
|
||||||
// Vectors for helper(s)
|
// Vectors for helper(s)
|
||||||
pickupSounds += soundBase::pickup01, soundBase::pickup02, soundBase::pickup03,
|
pickupSounds += soundBase::pickup01, soundBase::pickup02, soundBase::pickup03,
|
||||||
@ -130,15 +132,14 @@ void CSoundHandler::release()
|
|||||||
Mix_Chunk *CSoundHandler::GetSoundChunk(soundBase::soundID soundID)
|
Mix_Chunk *CSoundHandler::GetSoundChunk(soundBase::soundID soundID)
|
||||||
{
|
{
|
||||||
// Find its name
|
// Find its name
|
||||||
boost::bimap<soundBase::soundID, std::string>::left_iterator it;
|
auto fname = sounds[soundID];
|
||||||
it = sounds.left.find(soundID);
|
if (fname.empty())
|
||||||
if (it == sounds.left.end())
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
// Load and insert
|
// Load and insert
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
auto data = CResourceHandler::get()->loadData(ResourceID(std::string("SOUNDS/") + it->second, EResType::SOUND));
|
auto data = CResourceHandler::get()->loadData(ResourceID(std::string("SOUNDS/") + fname, EResType::SOUND));
|
||||||
|
|
||||||
SDL_RWops *ops = SDL_RWFromMem(data.first.release(), data.second);
|
SDL_RWops *ops = SDL_RWFromMem(data.first.release(), data.second);
|
||||||
Mix_Chunk *chunk;
|
Mix_Chunk *chunk;
|
||||||
@ -175,18 +176,6 @@ Mix_Chunk *CSoundHandler::GetSoundChunk(std::string &sound)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a soundID given a filename
|
|
||||||
soundBase::soundID CSoundHandler::getSoundID(const std::string &fileName)
|
|
||||||
{
|
|
||||||
boost::bimap<soundBase::soundID, std::string>::right_iterator it;
|
|
||||||
|
|
||||||
it = sounds.right.find(fileName);
|
|
||||||
if (it == sounds.right.end())
|
|
||||||
return soundBase::invalid;
|
|
||||||
else
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSoundHandler::initSpellsSounds(const std::vector< ConstTransitivePtr<CSpell> > &spells)
|
void CSoundHandler::initSpellsSounds(const std::vector< ConstTransitivePtr<CSpell> > &spells)
|
||||||
{
|
{
|
||||||
const JsonNode config(ResourceID("config/sp_sounds.json"));
|
const JsonNode config(ResourceID("config/sp_sounds.json"));
|
||||||
@ -201,8 +190,8 @@ void CSoundHandler::initSpellsSounds(const std::vector< ConstTransitivePtr<CSpel
|
|||||||
if (vstd::contains(spellSounds, s))
|
if (vstd::contains(spellSounds, s))
|
||||||
tlog1 << "Spell << " << spellid << " already has a sound" << std::endl;
|
tlog1 << "Spell << " << spellid << " already has a sound" << std::endl;
|
||||||
|
|
||||||
soundBase::soundID sound = getSoundID(node["soundfile"].String());
|
std::string sound = node["soundfile"].String();
|
||||||
if (sound == soundBase::invalid)
|
if (sound.empty())
|
||||||
tlog0 << "Error: invalid sound for id "<< spellid << "\n";
|
tlog0 << "Error: invalid sound for id "<< spellid << "\n";
|
||||||
spellSounds[s] = sound;
|
spellSounds[s] = sound;
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ public:
|
|||||||
class CSoundHandler: public CAudioBase
|
class CSoundHandler: public CAudioBase
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
soundBase::soundID getSoundID(const std::string &fileName);
|
//soundBase::soundID getSoundID(const std::string &fileName);
|
||||||
//update volume on configuration change
|
//update volume on configuration change
|
||||||
SettingsListener listener;
|
SettingsListener listener;
|
||||||
void onVolumeChange(const JsonNode &volumeNode);
|
void onVolumeChange(const JsonNode &volumeNode);
|
||||||
@ -68,7 +68,7 @@ public:
|
|||||||
void setCallback(int channel, boost::function<void()> function);
|
void setCallback(int channel, boost::function<void()> function);
|
||||||
void soundFinishedCallback(int channel);
|
void soundFinishedCallback(int channel);
|
||||||
|
|
||||||
std::map<const CSpell*, soundBase::soundID> spellSounds;
|
std::map<const CSpell*, std::string> spellSounds;
|
||||||
|
|
||||||
// Sets
|
// Sets
|
||||||
std::vector<soundBase::soundID> pickupSounds;
|
std::vector<soundBase::soundID> pickupSounds;
|
||||||
|
Loading…
Reference in New Issue
Block a user