Allow custom particle effects to be found in the same directory as the current track

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@7570 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2011-01-31 02:46:18 +00:00
parent 995f9d224d
commit 0e58903fa8
3 changed files with 50 additions and 2 deletions

View File

@ -19,6 +19,8 @@
#include "graphics/particle_kind_manager.hpp"
#include "io/file_manager.hpp"
#include "tracks/track.hpp"
#include "tracks/track_manager.hpp"
#include <stdexcept>
// ----------------------------------------------------------------------------
@ -41,14 +43,54 @@ ParticleKindManager::ParticleKindManager()
ParticleKindManager::~ParticleKindManager()
{
// TODO: free items in map
cleanUpTrackSpecificGfx();
std::map<std::string, ParticleKind*>::iterator it;
for (it = m_kinds.begin(); it != m_kinds.end(); it++)
{
delete it->second;
}
m_kinds.clear();
}
// ----------------------------------------------------------------------------
void ParticleKindManager::cleanUpTrackSpecificGfx()
{
std::map<std::string, ParticleKind*>::iterator it;
for (it = m_per_track_kinds.begin(); it != m_per_track_kinds.end(); it++)
{
delete it->second;
}
m_per_track_kinds.clear();
}
// ----------------------------------------------------------------------------
ParticleKind* ParticleKindManager::getParticles(const char* name)
{
std::map<std::string, ParticleKind*>::iterator i = m_kinds.find(name);
Track* t = track_manager->getTrack(race_manager->getTrackName());
std::map<std::string, ParticleKind*>::iterator i;
i = m_per_track_kinds.find(name);
if (i != m_per_track_kinds.end())
{
return i->second;
}
else
{
try
{
ParticleKind* newkind = new ParticleKind(t->getTrackFile(name));
m_per_track_kinds[name] = newkind;
return newkind;
}
catch (std::runtime_error& e)
{
// not found in track directory, let's try globally...
}
}
i = m_kinds.find(name);
if (i == m_kinds.end())
{
try

View File

@ -33,6 +33,8 @@ class ParticleKindManager : public NoCopy
{
private:
std::map<std::string, ParticleKind*> m_per_track_kinds;
std::map<std::string, ParticleKind*> m_kinds;
static ParticleKindManager* singleton;
@ -44,6 +46,8 @@ public:
ParticleKind* getParticles(const char* name);
void cleanUpTrackSpecificGfx();
static ParticleKindManager* get();
};
#endif

View File

@ -120,6 +120,8 @@ void Track::cleanup()
m_quad_graph = NULL;
}
ParticleKindManager::get()->cleanUpTrackSpecificGfx();
item_manager->cleanup();
for(unsigned int i=0; i<m_animated_textures.size(); i++)
{