From 49f22d6f41d46635502d9e2e492ee36a1197a4de Mon Sep 17 00:00:00 2001
From: danenders <danenders@gmail.com>
Date: Sun, 26 Jun 2022 21:26:23 -0400
Subject: adding macos support in progress

---
 CMakeLists.txt                       |  4 ++-
 src/main.cpp                         |  9 +++++-
 src/resources/Resources.h            |  6 ++++
 src/resources/macos/MacResources.cpp | 53 ++++++++++++++++++++++++++++++++++++
 src/resources/macos/MacResources.h   | 47 ++++++++++++++++++++++++++++++++
 5 files changed, 117 insertions(+), 2 deletions(-)
 create mode 100644 src/resources/macos/MacResources.cpp
 create mode 100644 src/resources/macos/MacResources.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2984c8f..acf9809 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,10 +57,12 @@ set(LUA_LIBRARIES lua lualib lauxlib)
 include_directories(${PROJECT_SOURCE_DIR}/thirdparty/lua)
 
 # System specific includes
-if (UNIX)
+if (UNIX AND NOT APPLE) 
     set(RES_LIB src/resources/Resources.cpp src/resources/Resources.h src/resources/linux/LinuxResources.cpp src/resources/linux/LinuxResources.h)
 elseif (WIN32)
     set(RES_LIB src/resources/Resources.cpp src/resources/Resources.h src/resources/windows/WindowsResources.cpp src/resources/windows/WindowsResources.h)
+elseif (APPLE)
+    set(RES_LIB src/resources/Resources.cpp src/resources/Resources.h src/resources/macos/MacResources.cpp src/resources/macos/MacResources.h)
 endif ()
 
 add_executable(${PROJECT_NAME} src/main.cpp src/Level.cpp src/Level.h src/CApi.h src/Scene.h src/LuaApi.h src/MessageBox.h ${RES_LIB})
diff --git a/src/main.cpp b/src/main.cpp
index 4ebb8e6..51722dd 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2,6 +2,7 @@
 // dng
 //------------------------------------------------------------------------
 // Copyright (c) 2022 Steph Enders <steph@senders.io>
+// Copyright (c) 2022 Dan Enders
 //
 // This software is provided 'as-is', without any express or implied
 // warranty. In no event will the authors be held liable for any damages
@@ -33,13 +34,19 @@
 #include "resources/Resources.h"
 #ifdef __linux__
 #include "resources/linux/LinuxResources.h"
+#include <filesystem>
 #endif // __linux__
 #ifdef _WIN32
 #include "resources/windows/WindowsResources.h"
+#include <filesystem>
 #endif // _WIN32
+#ifdef __APPLE__
+#include "resources/macos/MacResources.h"
+#include <experimental/filesystem>
+namespace std::filesystem = std::experimental::filesystem;
+#endif // __APPLE__
 #include <SFML/Graphics.hpp>
 #include <cmath>
-#include <filesystem>
 #include <iostream>
 
 std::shared_ptr<Level> lvl;
diff --git a/src/resources/Resources.h b/src/resources/Resources.h
index 6e1a95f..21bf8a7 100644
--- a/src/resources/Resources.h
+++ b/src/resources/Resources.h
@@ -2,6 +2,7 @@
 // dng
 //------------------------------------------------------------------------
 // Copyright (c) 2022 Steph Enders <steph@senders.io>
+// Copyright (c) 2022 Dan Enders
 //
 // This software is provided 'as-is', without any express or implied
 // warranty. In no event will the authors be held liable for any damages
@@ -27,7 +28,12 @@
 #ifndef DNG_RESOURCES_H
 #define DNG_RESOURCES_H
 
+#ifdef __APPLE__
+#include <experimental/filesystem>
+namespace std::filesystem = std::experimental::filesystem;
+#else
 #include <filesystem>
+#endif
 #include <optional>
 #include <vector>
 
diff --git a/src/resources/macos/MacResources.cpp b/src/resources/macos/MacResources.cpp
new file mode 100644
index 0000000..90f43c8
--- /dev/null
+++ b/src/resources/macos/MacResources.cpp
@@ -0,0 +1,53 @@
+//========================================================================
+// dng
+//------------------------------------------------------------------------
+// Copyright (c) 2022 Steph Enders <steph@senders.io>
+// Copyright (c) 2022 Dan Enders
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+//    claim that you wrote the original software. If you use this software
+//    in a product, an acknowledgment in the product documentation would
+//    be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not
+//    be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+//    distribution.
+//
+//========================================================================
+
+#include "MacResources.h"
+namespace std::filesystem = std::experimental::filesystem;
+
+MacResources::MacResources() : Resources() {
+  this->workingDir = std::filesystem::current_path();
+  this->exeDir = std::filesystem::canonical("/proc/self/exe").remove_filename();
+  // set an initial value - will get hardset in load if found
+  std::filesystem::path f =
+      workingDir / "res" / DEFAULT_FONT; // default as fallback
+  this->font = std::make_shared<std::filesystem::path>(f);
+  this->defaultsLua = std::make_shared<std::filesystem::path>();
+}
+
+std::vector<std::filesystem::path> MacResources::levelSearchDirs() {
+  return {workingDir / "maps", exeDir / "maps"};
+}
+std::vector<std::filesystem::path> MacResources::defaultsSearchDirs() {
+  return {workingDir / "dnglib", exeDir / "dnglib"};
+}
+std::vector<std::filesystem::path> MacResources::fontSearchDirs() {
+  return {workingDir / "res", exeDir / "res"};
+}
+
+const char *MacResources::convert_to_str(std::filesystem::path &path) {
+  return path.c_str();
+}
diff --git a/src/resources/macos/MacResources.h b/src/resources/macos/MacResources.h
new file mode 100644
index 0000000..7af24b6
--- /dev/null
+++ b/src/resources/macos/MacResources.h
@@ -0,0 +1,47 @@
+//========================================================================
+// dng
+//------------------------------------------------------------------------
+// Copyright (c) 2022 Steph Enders <steph@senders.io>
+// Copyright (c) 2022 Dan Enders
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+//    claim that you wrote the original software. If you use this software
+//    in a product, an acknowledgment in the product documentation would
+//    be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not
+//    be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+//    distribution.
+//
+//========================================================================
+
+#ifndef DNG_MACRESOURCES_H
+#define DNG_MACRESOURCES_H
+#include "../Resources.h"
+namespace std::filesystem = std::experimental::filesystem;
+class MacResources : public Resources {
+public:
+  MacResources();
+
+protected:
+public:
+  const char *convert_to_str(std::filesystem::path &path) override;
+
+protected:
+  std::filesystem::path exeDir;
+  std::filesystem::path workingDir;
+  std::vector<std::filesystem::path> levelSearchDirs() override;
+  std::vector<std::filesystem::path> defaultsSearchDirs() override;
+  std::vector<std::filesystem::path> fontSearchDirs() override;
+};
+#endif // DNG_MACRESOURCES_H
-- 
cgit v1.2.3-54-g00ecf