diff --git a/ScuffedMinecraft/src/Application.cpp b/ScuffedMinecraft/src/Application.cpp index 13d247e..18f01d1 100644 --- a/ScuffedMinecraft/src/Application.cpp +++ b/ScuffedMinecraft/src/Application.cpp @@ -2,6 +2,13 @@ #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" +#ifdef LINUX +#include +#include +#include +#include +#endif + #include #include #define STB_IMAGE_IMPLEMENTATION @@ -59,8 +66,39 @@ float rectangleVertices[] = -1.0f, 1.0f, 0.0f, 1.0f }; -int main() -{ +int main (int argc, char *argv[]) { +#ifdef LINUX + char* resolved_path = realpath(argv[0],NULL); + if (resolved_path == NULL) { + printf("%s: Please do not place binary in PATH\n", argv[0]); + exit(1); + } + size_t resolved_length = strlen(resolved_path); + + // remove executable from path + for (size_t i = resolved_length; i > 0; i--) { + if (resolved_path[i] == '/' && resolved_path[i+1] != 0) { + resolved_path[i+1] = 0; + resolved_length = i; + break; + } + } + + char* assets_path = (char *)malloc(resolved_length + strlen("assets") + 2); + strcpy(assets_path, resolved_path); + strcpy(assets_path + resolved_length + 1, "assets"); + struct stat path_stat; + if(stat(assets_path, &path_stat) == -1 || !S_ISDIR(path_stat.st_mode)) { + printf("%s: Asset directory not found\n", argv[0]); + exit(1); + } + + free(assets_path); + + chdir(resolved_path); + free(resolved_path); +#endif + // Initialize GLFW glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); @@ -414,4 +452,4 @@ void mouse_callback(GLFWwindow* window, double xpos, double ypos) void scroll_callback(GLFWwindow* window, double xoffset, double yoffset) { camera.ProcessMouseScroll(yoffset); -} \ No newline at end of file +} diff --git a/ScuffedMinecraft/src/CMakeLists.txt b/ScuffedMinecraft/src/CMakeLists.txt index 0c4a1d8..c7683e3 100644 --- a/ScuffedMinecraft/src/CMakeLists.txt +++ b/ScuffedMinecraft/src/CMakeLists.txt @@ -4,7 +4,11 @@ add_executable(scuffed_mc Camera.cpp Planet.cpp WorldGen.cpp ../vendor/glad.c ) +if(LINUX) + add_compile_definitions(LINUX) +endif() + # make sure the program runs in the right place from visual studio set_target_properties(scuffed_mc PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin") -target_link_libraries(scuffed_mc imgui $,glfw3,glfw>) \ No newline at end of file +target_link_libraries(scuffed_mc imgui $,glfw3,glfw>)