9using namespace Tempest;
23 name = name.substr(0,name.size()-4);
25 std::lock_guard<std::recursive_mutex> guard(sync);
26 return implGet(name,relaxed);
30 if(base==
nullptr || key==
nullptr)
32 std::lock_guard<std::recursive_mutex> guard(sync);
33 return implGet(*base,*key);
36const ParticleFx* ParticlesDefinitions::implGet(std::string_view name,
bool relaxed) {
37 auto cname = std::string(name);
38 auto it = pfx.find(cname);
40 return it->second.get();
41 auto decl=implGetDirect(name, relaxed);
44 std::unique_ptr<ParticleFx> p{
new ParticleFx(*decl,name)};
45 auto elt = pfx.insert(std::make_pair(std::move(cname),std::move(p)));
47 return elt.first->second.get();
51 auto it = pfxKey.find(&key);
53 return it->second.get();
55 std::unique_ptr<ParticleFx> p{
new ParticleFx(base,key)};
56 auto elt = pfxKey.insert(std::make_pair(&key,std::move(p)));
58 return elt.first->second.get();
61std::shared_ptr<zenkit::IParticleEffect> ParticlesDefinitions::implGetDirect(std::string_view name,
bool relaxed) {
62 if(!vm || name.empty())
65 auto id = vm->find_symbol_by_name(name);
68 Log::e(
"invalid particle system: \"",name,
"\"");
72 auto ret = std::make_shared<zenkit::IParticleEffect>();
73 ret->vis_tex_is_quadpoly = 1;
74 vm->init_instance(ret,
id);
std::unique_ptr< zenkit::DaedalusVm > createPhoenixVm(std::string_view datFile, const ScriptLang lang=ScriptLang::NONE)
const ParticleFx * get(std::string_view name, bool relaxed)
bool hasExt(std::string_view s, const char *extIn)