Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ScriptEngine.hxx
Go to the documentation of this file.
1 #ifndef SCRIPTENGINE_HXX_
2 #define SCRIPTENGINE_HXX_
3 
4 #ifdef USE_ANGELSCRIPT
5 
6 #include <angelscript.h>
7 #include <string>
8 #include <vector>
9 
10 #include "../util/Singleton.hxx"
11 
12 enum class ScriptCategory
13 {
14  INVALID,
15  BUILD_IN,
16  ADDON,
17  CUSTOM
18 };
19 
21 struct ScriptUnit
22 {
23  ScriptCategory scriptCategory = ScriptCategory::INVALID;
24  unsigned int eventMask = 0;
25  asIScriptModule *scriptModule = nullptr;
26  asIScriptFunction *frameStepFunctionPtr = nullptr;
27  asIScriptFunction *eventCallbackFunctionPtr = nullptr;
28  asIScriptFunction *defaultEventCallbackFunctionPtr = nullptr;
29  std::string scriptName;
30  std::string scriptHash;
31 };
32 
33 typedef std::vector<ScriptUnit> ScriptUnitVec;
34 
35 class ScriptEngine : public Singleton<ScriptEngine>
36 {
37 public:
39 
40  ScriptEngine() = default;
41  ~ScriptEngine();
42 
47  void init();
48 
54  int loadScript(const std::string &scriptname, ScriptCategory category = ScriptCategory::ADDON);
55 
60  void unloadScript(const std::string &scriptname, ScriptCategory category);
61 
67  int framestep(float dt);
68 
69 protected:
74  void messageCallback(const asSMessageInfo *msg);
75 
76  std::string composeModuleName(std::string const &scriptName, ScriptCategory origin);
77 
78  int setupScriptUnit(int unit_id);
79 
80  asIScriptEngine *engine{};
81  asIScriptContext *context{};
82 
83  ScriptUnitVec m_addon_scrips;
84 };
85 
86 void registerImVec2(asIScriptEngine *engine);
87 void registerImGuiBindings(asIScriptEngine *engine);
88 
89 #endif
90 #endif
registerImVec2
void registerImVec2(asIScriptEngine *engine)
Definition: ImGuiAngelscript.cxx:24
Singleton
Abstract Singleton implementation.
Definition: Singleton.hxx:8
registerImGuiBindings
void registerImGuiBindings(asIScriptEngine *engine)
Definition: ImGuiAngelscript.cxx:61
string
std::string string
Definition: AudioConfig.hxx:14