PGE Engine
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros Pages
lua_engine.h
1 #ifndef LUAENGINE_H
2 #define LUAENGINE_H
3 
4 #include <QObject>
5 #include <QString>
6 #include <QtDebug>
7 #include <QHash>
8 #include <QFile>
9 
10 #include <functional>
11 
12 #include <luabind/luabind.hpp>
13 #include <lua_inclues/lua.hpp>
14 
15 class Scene;
16 class LuaEvent;
17 #include "../common_features/util.h"
18 
27 class LuaEngine
28 {
29  friend class LuaEvent;
30 private:
31  Q_DISABLE_COPY(LuaEngine)
32 
33 public:
34  LuaEngine();
35  LuaEngine(Scene* scene);
36  virtual ~LuaEngine();
37 
41  void init();
42 
46  void shutdown();
47 
51  void forceShutdown();
52 
57  inline bool isValid() { return L != nullptr; }
58 
59  // /////// LOADING FUCS ///////////// //
60  luabind::object loadClassAPI(const QString& path);
61  void loadClassAPI(const QString& nameInGlobal, const QString& path);
62 
63  // /////// LOADING FUCS END ///////////// //
64 
65  QString coreFile() const;
66  void setCoreFile(const QString &coreFile);
67 
68  void dispatchEvent(LuaEvent& toDispatchEvent);
69  void setErrorReporterFunc(const std::function<void (const QString &, const QString&)> &func);
70 
71  Scene *getBaseScene() const;
72 
73  QString getLuaScriptPath() const;
74  void setLuaScriptPath(const QString &luaScriptPath);
75 
76  bool shouldShutdown() const;
77  void setLateShutdown(bool value);
78 
79  void postLateShutdownError(luabind::error& error);
80 
81  void runGarbageCollector();
82 
83  QString getUserFile() const;
84  void setUserFile(const QString &userFile);
85 
86 protected:
87  virtual void onBindAll() {}
88  void loadMultiRet(QFile *file);
89 
90  lua_State* getNativeState() {return L; }
91 
92 private:
93  void bindCore();
94  void error();
95  QHash<QString, luabind::object > loadedFiles;
96 
97  bool m_lateShutdown;
98  QString m_luaScriptPath;
99  std::function<void (const QString & /*error message*/, const QString& /*stack trace*/)> m_errorReporterFunc;
100  Scene* m_baseScene;
101  lua_State* L;
102  QString m_coreFile;
103  QString m_userFile;
104 };
105 
106 extern void push_pcall_handler(lua_State* L);
107 extern int pcall_handler(lua_State* L);
108 
109 #endif // LUAENGINE_H
void setErrorReporterFunc(const std::function< void(const QString &, const QString &)> &func)
The error reporter function.
Definition: lua_engine.cpp:356
void init()
Init a new lua engine. The lua engine must be in a invalid state.
Definition: lua_engine.cpp:53
luabind::object loadClassAPI(const QString &path)
Reads a lua class and returns the object.
Definition: lua_engine.cpp:174
Definition: scene.h:36
This class should have basic functions for interacting with lua To run the lua engine you have to con...
Definition: lua_engine.h:27
void forceShutdown()
Shutdowns the lua engine directly.
Definition: lua_engine.cpp:162
bool isValid()
isValid Checks if the lua engine is valid
Definition: lua_engine.h:57
void dispatchEvent(LuaEvent &toDispatchEvent)
Dispatches a lua event.
Definition: lua_engine.cpp:230
void shutdown()
Shutdowns the lua engine and post a cleanup event.
Definition: lua_engine.cpp:148
Definition: lua_event.h:13
void setCoreFile(const QString &coreFile)
The core lua filename.
Definition: lua_engine.cpp:221
Scene * getBaseScene() const
The base-scene for the lua engine (may need for interacting with current scene)
Definition: lua_engine.cpp:351
QString coreFile() const
The core lua filename.
Definition: lua_engine.cpp:216