/****************************************************************************** * File - coreAPI.h * Author - Joey Pollack * Date - 2021/09/23 (y/m/d) * Mod Date - 2021/09/23 (y/m/d) * Description - class with all static methods that expose core functionality to LUA * Need an init function that takes a reference to a LUA state so that it * can expose the static functions to LUA. ******************************************************************************/ #ifndef CORE_API_H_ #define CORE_API_H_ #include #include "wren_script.h" #include #include #include struct WrenVM; namespace lunarium { class WrenState; class CoreAPI { public: static CoreAPI& GetInstance(); static void FreeInstance(); OpRes Initialize(WrenState& state); private: static CoreAPI* mpInstance; static WrenScript mScript; u32 mCat; typedef void (*ForeignMethod)(WrenVM*); struct ForeignMethodID { std::string Module; std::string Class; bool IsStatic; std::string Signature; ForeignMethod FM; bool operator==(const ForeignMethodID& rhs) { return (Module == rhs.Module && Class == rhs.Class && IsStatic == rhs.IsStatic && Signature == rhs.Signature); } }; static std::vector mForeignMethods; private: // Helper methods std::string GenerateWrenKeyCodes(); private: // Callbacks static ForeignMethod ForeignMethodBinder(WrenVM* vm, const char* module, const char* className, bool isStatic, const char* signature); public: // API static void SetWindowSize(int w, int h); static void Log(int level, const char* msg); static bool IsKeyDown(WrenVM* vm); }; } #endif // CORE_API_H_