ezEngine  Milestone 7
LuaWrapper.h
1 #pragma once
2 
3 #include <CoreUtils/Basics.h>
4 #include <Foundation/Strings/String.h>
5 #include <Foundation/Logging/Log.h>
6 
7 extern "C"
8 {
9  #include <ThirdParty/Lua/lua.h>
10  #include <ThirdParty/Lua/lualib.h>
11  #include <ThirdParty/Lua/lauxlib.h>
12 }
13 
26 class EZ_COREUTILS_DLL ezLuaWrapper
27 {
28 public:
29 
32 
34  ezLuaWrapper(); // [tested]
35 
37  ezLuaWrapper(lua_State* s);
38 
40  ~ezLuaWrapper(); // [tested]
41 
43  void Clear(); // [tested]
44 
50  lua_State* GetLuaState();
51 
60  ezResult ExecuteString(const char* szString, const char* szDebugChunkName = "chunk", ezLogInterface* pLogInterface = nullptr) const; // [tested]
61 
63 
64 
67 
72  ezResult OpenTable(const char* szTable); // [tested]
73 
75  ezResult OpenTableFromParameter(ezUInt32 iFunctionParameter); // [tested]
76 
78  void CloseTable(); // [tested]
79 
81  void CloseAllTables(); // [tested]
82 
84  void PushTable(const char* szTableName, bool bGlobalTable); // [tested]
85 
87 
90 
92  bool IsVariableAvailable(const char* szVariable) const; // [tested]
93 
95  bool IsFunctionAvailable(const char* szFunction) const; // [tested]
96 
98 
101 
103  int GetIntVariable(const char* szName, ezInt32 iDefault = 0) const; // [tested]
104 
106  bool GetBoolVariable(const char* szName, bool bDefault = false) const; // [tested]
107 
109  float GetFloatVariable(const char* szName, float fDefault = 0.0f) const; // [tested]
110 
112  const char* GetStringVariable(const char* szName, const char* szDefault="") const; // [tested]
113 
115 
118 
120  void SetVariableNil(const char* szName) const; // [tested]
121 
123  void SetVariable(const char* szName, ezInt32 iValue) const; // [tested]
124 
126  void SetVariable(const char* szName, bool bValue) const; // [tested]
127 
129  void SetVariable(const char* szName, float fValue) const; // [tested]
130 
132  void SetVariable(const char* szName, const char* szValue) const; // [tested]
133 
135  void SetVariable(const char* szName, const char* szValue, ezUInt32 len) const; // [tested]
136 
138 
141 
143  void RegisterCFunction(const char* szFunctionName, lua_CFunction pFunction, void* pLightUserData = nullptr) const; // [tested]
144 
146  bool PrepareFunctionCall(const char* szFunctionName); // [tested]
147 
154  ezResult CallPreparedFunction(ezUInt32 iExpectedReturnValues = 0, ezLogInterface* pLogInterface = nullptr); // [tested]
155 
157  void DiscardReturnValues(); // [tested]
158 
170  ezInt32 ReturnToScript() const; // [tested]
171 
173 
176 
179  void PushParameter (ezInt32 iParam); // [tested]
180 
183  void PushParameter (bool bParam); // [tested]
184 
187  void PushParameter (float fParam); // [tested]
188 
191  void PushParameter (const char* szParam); // [tested]
192 
195  void PushParameter (const char* szParam, ezUInt32 length); // [tested]
196 
199  void PushParameterNil(); // [tested]
200 
202 
205 
207  void* GetFunctionLightUserData() const;
208 
210  ezUInt32 GetNumberOfFunctionParameters() const; // [tested]
211 
213  bool IsParameterInt(ezUInt32 iParameter) const; // [tested]
214 
216  bool IsParameterBool(ezUInt32 iParameter) const; // [tested]
217 
219  bool IsParameterFloat(ezUInt32 iParameter) const; // [tested]
220 
222  bool IsParameterTable(ezUInt32 iParameter) const; // [tested]
223 
225  bool IsParameterString(ezUInt32 iParameter) const; // [tested]
226 
228  bool IsParameterNil(ezUInt32 iParameter) const; // [tested]
229 
231  int GetIntParameter (ezUInt32 iParameter) const; // [tested]
232 
234  bool GetBoolParameter (ezUInt32 iParameter) const; // [tested]
235 
237  float GetFloatParameter (ezUInt32 iParameter) const; // [tested]
238 
240  const char* GetStringParameter (ezUInt32 iParameter) const; // [tested]
241 
243 
246 
248  void PushReturnValue(ezInt32 iParam); // [tested]
249 
251  void PushReturnValue(bool bParam); // [tested]
252 
254  void PushReturnValue(float fParam); // [tested]
255 
257  void PushReturnValue(const char* szParam); // [tested]
258 
260  void PushReturnValue(const char* szParam, ezUInt32 length); // [tested]
261 
263  void PushReturnValueNil(); // [tested]
264 
265 
267  bool IsReturnValueInt(ezUInt32 iReturnValue) const; // [tested]
268 
270  bool IsReturnValueBool(ezUInt32 iReturnValue) const; // [tested]
271 
273  bool IsReturnValueFloat(ezUInt32 iReturnValue) const; // [tested]
274 
276  bool IsReturnValueString(ezUInt32 iReturnValue) const; // [tested]
277 
279  bool IsReturnValueNil(ezUInt32 iReturnValue) const; // [tested]
280 
281 
283  int GetIntReturnValue(ezUInt32 iReturnValue) const; // [tested]
284 
286  bool GetBoolReturnValue(ezUInt32 iReturnValue) const; // [tested]
287 
289  float GetFloatReturnValue(ezUInt32 iReturnValue) const; // [tested]
290 
292  const char* GetStringReturnValue(ezUInt32 iReturnValue) const; // [tested]
293 
295 
296 
297 private:
299  static void* lua_allocator(void* ud, void* ptr, size_t osize, size_t nsize);
300 
302  lua_State* m_pState;
303 
306 
308  {
309  ezScriptStates() : m_iParametersPushed (0), m_iOpenTables (0), m_iLuaReturnValues (0) {}
310 
313 
315  ezInt32 m_iOpenTables;
316 
319  };
320 
321  ezScriptStates m_States;
322 
323  static const ezInt32 s_ParamOffset = 1; // should be one, to start counting at 0, instead of 1
324 };
325 
326 #include <CoreUtils/Scripting/LuaWrapper/LuaWrapper.inl>
327 
328 
329