#pragma once #include "src/Core/Core.h" #include "src/Core/Timestep.h" #include #include #include #include "src/Vendors/wren/src/include/wren.hpp" namespace Nuake { class WrenScript; class ScriptModule; class ScriptingEngine { private: static WrenVM* m_WrenVM; static std::vector m_LoadedScripts; static std::map> m_Scripts; static std::map> Modules; public: static void Init(); static void RunCode(const std::string& code); static void Close(); static Ref RegisterScript(const std::string& path, const std::string& mod); static bool IsScriptImported(const std::string& path); static void ImportScript(const std::string& path); static void RegisterModule(Ref module); static void InitScript(Ref script); static void UpdateScript(Ref script, Timestep timestep); static void ExitScript(Ref script); static WrenForeignMethodFn bindForeignMethod( WrenVM* vm, const char* module, const char* className, bool isStatic, const char* signature); static WrenVM* GetWrenVM(); }; }