ScriptEnvironment.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Script/LuaBinder.h>
  7. namespace anki {
  8. /// @addtogroup script
  9. /// @{
  10. /// A sandboxed LUA environment.
  11. class ScriptEnvironment
  12. {
  13. public:
  14. ScriptEnvironment()
  15. {
  16. }
  17. ~ScriptEnvironment()
  18. {
  19. }
  20. Error init(ScriptManager* manager);
  21. Bool isInitialized() const
  22. {
  23. return m_manager != nullptr;
  24. }
  25. /// Expose a variable to the scripting engine.
  26. template<typename T>
  27. void exposeVariable(const char* name, T* y)
  28. {
  29. ANKI_ASSERT(isInitialized());
  30. LuaBinder::exposeVariable<T>(m_thread.getLuaState(), name, y);
  31. }
  32. /// Evaluate a string
  33. ANKI_USE_RESULT Error evalString(const CString& str)
  34. {
  35. ANKI_ASSERT(isInitialized());
  36. return LuaBinder::evalString(m_thread.getLuaState(), str);
  37. }
  38. void serializeGlobals(LuaBinderSerializeGlobalsCallback& callback)
  39. {
  40. ANKI_ASSERT(isInitialized());
  41. LuaBinder::serializeGlobals(m_thread.getLuaState(), callback);
  42. }
  43. void deserializeGlobals(const void* data, PtrSize dataSize)
  44. {
  45. ANKI_ASSERT(isInitialized());
  46. LuaBinder::deserializeGlobals(m_thread.getLuaState(), data, dataSize);
  47. }
  48. lua_State& getLuaState()
  49. {
  50. ANKI_ASSERT(isInitialized());
  51. return *m_thread.getLuaState();
  52. }
  53. private:
  54. ScriptManager* m_manager = nullptr;
  55. LuaBinder m_thread;
  56. };
  57. /// @}
  58. } // end namespace anki