diff options
author | Steph Enders <smenders@gmail.com> | 2022-06-17 11:19:51 -0400 |
---|---|---|
committer | Steph Enders <smenders@gmail.com> | 2022-06-17 11:19:51 -0400 |
commit | 87a53f2a09a204ca9bcdde9c73db414c79075326 (patch) | |
tree | 5dbb78e554d01a8f9dd1e3cdf11d4077f0d15676 /src/LuaApi.h | |
parent | 49bb775d4cf9935b0f0d54daa358423ac786c9be (diff) |
Add scene controls and win/loss scenarios
Setup ability to check collisions and transition game scene
Diffstat (limited to 'src/LuaApi.h')
-rw-r--r-- | src/LuaApi.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/LuaApi.h b/src/LuaApi.h new file mode 100644 index 0000000..cb68e36 --- /dev/null +++ b/src/LuaApi.h @@ -0,0 +1,89 @@ +#ifndef DNG_LUA_API_H +#define DNG_LUA_API_H + +#include <iostream> +#include <lua.hpp> + +struct LState { + lua_State *onkeypress; + lua_State *onupdate; + lua_State *onintro; + lua_State *onwin; + lua_State *onloss; +} typedef LState; + +const char *ON_KEYPRESS = "onKeypress"; +const char *ON_UPDATE = "onUpdate"; +const char *ON_INTRO = "onIntro"; +const char *ON_WIN = "onWin"; +const char *ON_LOSS = "onLoss"; + +LState *init_default(lua_State *L) { + auto *state = static_cast<LState *>(malloc(sizeof(LState))); + + state->onkeypress = L; + state->onupdate = L; + state->onintro = L; + state->onwin = L; + state->onloss = L; + + return state; +} + +bool check_fn(lua_State *L, const char *fn) { + lua_getglobal(L, fn); + return lua_isfunction(L, -1); +} + +void override_file_fns(lua_State *L, LState *state) { + if (check_fn(L, ON_KEYPRESS)) { + state->onkeypress = L; + } + if (check_fn(L, ON_UPDATE)) { + state->onupdate = L; + } + if (check_fn(L, ON_INTRO)) { + state->onintro = L; + } + if (check_fn(L, ON_WIN)) { + state->onwin = L; + } + if (check_fn(L, ON_LOSS)) { + state->onloss = L; + } +} + +bool lua_dofn(lua_State *L, const char *fn) { + lua_getglobal(L, fn); + if (!lua_isfunction(L, -1)) { + std::cout << "[C] Error " << fn << " not function | not found" << std::endl; + return false; + } + lua_pcall(L, 0, 1, 0); + return true; +} + +bool lua_dofn_with_key(lua_State *L, const char *fn, char pressedKey) { + lua_getglobal(L, fn); + if (!lua_isfunction(L, -1)) { + std::cout << "[C] Error " << fn << " not function | not found" << std::endl; + return false; + } + lua_pushinteger(L, pressedKey); + lua_pcall(L, 1, 1, 0); + return true; +} + +bool lua_onkeypress(lua_State *L, char pressedKey) { + return lua_dofn_with_key(L, "onKeyPress", pressedKey); +} + +bool lua_onupdate(lua_State *L) { return lua_dofn(L, "onUpdate"); } + +bool lua_onintro(lua_State *L) { return lua_dofn(L, "onIntro"); } + +bool lua_onwin(lua_State *L) { return lua_dofn(L, "onWin"); } + +bool lua_onloss(lua_State *L) { return lua_dofn(L, "onLoss"); } + +#endif // DNG_LUA_API_H
\ No newline at end of file |