#pragma once #include "ScriptingEngine.h" #include #include struct WrenHandle; namespace Nuake { class File; class WrenScript { private: bool m_HasCompiledSuccesfully; bool m_IsEntityScript = false; std::vector m_Modules; Ref mFile; std::map methods; WrenHandle* m_Instance = nullptr; WrenHandle* m_OnInitHandle; WrenHandle* m_OnUpdateHandle; WrenHandle* m_OnFixedUpdateHandle; WrenHandle* m_OnExitHandle; WrenHandle* m_SetEntityIDHandle; public: WrenScript(Ref file, bool isEntityScript); void ParseModules(); void Build(unsigned int moduleId, bool isEntityScript = false); // Method calls void CallInit(); void CallUpdate(float timestep); void CallFixedUpdate(float timestep); void CallExit(); void RegisterMethod(const std::string& signature); void CallMethod(const std::string& signature); void SetScriptableEntityID(int id); bool HasCompiledSuccesfully() const { return m_HasCompiledSuccesfully; } std::vector GetModules() const; WrenHandle* GetWrenInstanceHandle() const { return m_Instance; } }; }