diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..fb61369 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,83 @@ +#include "Api.h" +#include "Level.h" +#include <SFML/Graphics.hpp> +#include <filesystem> +#include <iostream> +#include <lua.hpp> +#include <memory> + +const char* DEFAULT_PROC = "include/default_proc.lua"; +std::shared_ptr<Level> lvl = std::make_shared<Level>(); + +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->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; +}
\ No newline at end of file |