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:
parent
995f9d224d
commit
0e58903fa8
@ -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
|
||||
|
@ -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
|
||||
|
@ -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++)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user