ScriptManager.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright (C) 2009-present, 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. /// The scripting manager.
  11. class ScriptManager : public MakeSingleton<ScriptManager>
  12. {
  13. template<typename>
  14. friend class MakeSingleton;
  15. public:
  16. /// Expose a variable to the scripting engine.
  17. template<typename T>
  18. void exposeVariable(const char* name, T* y)
  19. {
  20. LockGuard<Mutex> lock(n_luaMtx);
  21. LuaBinder::exposeVariable<T>(m_lua.getLuaState(), name, y);
  22. }
  23. /// Evaluate a string
  24. Error evalString(const CString& str)
  25. {
  26. LockGuard<Mutex> lock(n_luaMtx);
  27. return LuaBinder::evalString(m_lua.getLuaState(), str);
  28. }
  29. ANKI_INTERNAL LuaBinder& getLuaBinder()
  30. {
  31. return m_lua;
  32. }
  33. private:
  34. class PoolInit
  35. {
  36. public:
  37. PoolInit(AllocAlignedCallback allocCb, void* allocCbData);
  38. ~PoolInit();
  39. };
  40. PoolInit m_poolInit;
  41. LuaBinder m_lua;
  42. Mutex n_luaMtx;
  43. ScriptManager(AllocAlignedCallback allocCb, void* allocCbData);
  44. ~ScriptManager();
  45. };
  46. /// @}
  47. } // end namespace anki