diff --git a/CMakeLists.txt b/CMakeLists.txt index 71f0661..58373c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,7 @@ add_executable(mikemon src/log.cpp src/smol-atlas.cpp src/math_graphics.cpp + src/change_directory.c src/shaders/shaders.c src/main.cpp ) diff --git a/src/change_directory.c b/src/change_directory.c new file mode 100644 index 0000000..ea3a009 --- /dev/null +++ b/src/change_directory.c @@ -0,0 +1,16 @@ +#include "change_directory.h" +#include + +#if SDL_PLATFORM_LINUX +#include +#elif SDL_PLATFORM_WINDOWS +#include +#endif + +void change_directory(const char *path) { + #if SDL_PLATFORM_LINUX + chdir(path); + #elif SDL_PLATFORM_WINDOWS + _chdir(path); + #endif +} diff --git a/src/change_directory.h b/src/change_directory.h new file mode 100644 index 0000000..47717e8 --- /dev/null +++ b/src/change_directory.h @@ -0,0 +1,14 @@ +#ifndef INCLUDE_CHANGE_DIRECTORY_H +#define INCLUDE_CHANGE_DIRECTORY_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +void change_directory(const char *path); + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // INCLUDE_CHANGE_DIRECTORY_H diff --git a/src/main.cpp b/src/main.cpp index 428d749..8ef00b7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,12 +15,13 @@ #include "log.h" #include "math_graphics.h" #include "stb_image.h" +#include "change_directory.h" #include "shaders/shaders.h" using namespace M; -#define ASSETS_PATH "../assets/" +#define ASSETS_PATH "./assets/" #define NEAR_PLANE (0.01f) #define TILE_SIZE (32) @@ -1365,8 +1366,23 @@ WGPUSurface create_wgpu_surface_for_SDL_window(SDL_Window *window) { return NULL; } +void setup_working_directory() { + if (SDL_GetPathInfo(ASSETS_PATH, NULL)) return; + + const char *current_directory = SDL_GetCurrentDirectory(); + + change_directory(SDL_GetBasePath()); + if (SDL_GetPathInfo(ASSETS_PATH, NULL)) return; + + change_directory(".."); + if (SDL_GetPathInfo(ASSETS_PATH, NULL)) return; + + change_directory(current_directory); +} + int main(int argc, char **argv) { setup_memory_functions(); + setup_working_directory(); #ifdef SDL_PLATFORM_LINUX if (getenv("ENABLE_VULKAN_RENDERDOC_CAPTURE"))