OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
visualfxdefinitions.cpp
Go to the documentation of this file.
2
3#include <Tempest/Log>
4
5#include "graphics/visualfx.h"
6#include "gothic.h"
7
8using namespace Tempest;
9
13
16
17const VisualFx* VisualFxDefinitions::get(std::string_view name) {
18 std::string cname = std::string(name);
19 auto it = vfx.find(cname);
20 if(it!=vfx.end())
21 return it->second.get();
22
23 auto def = implGet(cname);
24 if(def == nullptr)
25 return nullptr;
26
27 auto ret = vfx.insert(std::make_pair<std::string,std::unique_ptr<VisualFx>>(std::move(cname),nullptr));
28 ret.first->second.reset(new VisualFx(*def,*vm,name));
29
30 auto& vfx = *ret.first->second;
31 vfx.dbgName = name.data();
32
33 return &vfx;
34 }
35
36std::shared_ptr<zenkit::IEffectBase> VisualFxDefinitions::implGet(std::string_view name) {
37 if(!vm || name.empty())
38 return nullptr;
39
40 auto id = vm->find_symbol_by_name(name);
41 if(id==nullptr) {
42 Log::e("invalid visual effect: \"",name,"\"");
43 return nullptr;
44 }
45
46 try {
47 return vm->init_instance<zenkit::IEffectBase>(id);
48 }
49 catch (const zenkit::DaedalusScriptError&) {
50 return nullptr;
51 }
52 }
static Gothic & inst()
Definition gothic.cpp:249
std::unique_ptr< zenkit::DaedalusVm > createPhoenixVm(std::string_view datFile, const ScriptLang lang=ScriptLang::NONE)
Definition gothic.cpp:711
const VisualFx * get(std::string_view name)