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