summaryrefslogtreecommitdiff
path: root/src/LuaApi.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/LuaApi.h')
-rw-r--r--src/LuaApi.h89
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