#include "Api.h" #include "Level.h" #include #include #include #include const char* DEFAULT_PROC = "include/default_proc.lua"; std::shared_ptr lvl; bool call_onkeypress(lua_State* L, char pressedKey); int main(int argc, char** argv) { if (argc <= 1) { return -1; } std::string lvl_pfx = argv[1]; std::filesystem::path mapFile{ lvl_pfx + "/dng.map" }; std::filesystem::path luaFile{ lvl_pfx + "/proc.lua" }; lvl = std::make_shared(); lvl->loadLevelFromFile(mapFile.c_str()); lua_State* L_lvl = luaL_newstate(); luaL_openlibs(L_lvl); init_c_api(L_lvl); lua_State* L_default = luaL_newstate(); luaL_openlibs(L_default); init_c_api(L_default); if (std::filesystem::exists(luaFile) && luaL_dofile(L_default, DEFAULT_PROC) != LUA_OK) { std::cout << "Failed to load default proc" << std::endl; luaL_error(L_default, "Error: %s", lua_tostring(L_default, -1)); return EXIT_FAILURE; } if (std::filesystem::exists(luaFile) && luaL_dofile(L_lvl, luaFile.c_str()) != LUA_OK) { std::cout << "[C] No Good" << std::endl; luaL_error(L_lvl, "Error: %s\n", lua_tostring(L_lvl, -1)); return EXIT_FAILURE; } bool quit = false; char in; do { lvl->print(); std::cin >> in; if (!call_onkeypress(L_default, in)) { quit = true; } if (!quit && in == 'q') { quit = true; } } while (!quit); std::cout << "[C] Quit" << std::endl; return EXIT_SUCCESS; } bool call_onkeypress(lua_State* L, char pressedKey) { lua_getglobal(L, "onKeyPress"); if (!lua_isfunction(L, -1)) { std::cout << "[C] Error onKeyPress not function | not found" << std::endl; return false; } lua_pushinteger(L, pressedKey); lua_pcall(L, 1, 1, 0); return true; }