From f46542a05f14b15b9e16d6f025bbcf3b6af59c85 Mon Sep 17 00:00:00 2001 From: Tim Sarbin Date: Thu, 21 Feb 2019 21:21:51 -0500 Subject: [PATCH] Added stormlib and command line parser. Added initial mpq file check on startup. --- .gitignore | 4 +- .gitmodules | 6 +++ 3rdparty/CMakeLists.txt | 4 ++ 3rdparty/cli11 | 1 + 3rdparty/stormlib | 1 + CMakeLists.txt | 7 ++-- OpenDiablo2.Game/src/main.cpp | 19 --------- OpenDiablo2.Graphics/CMakeLists.txt | 23 ---------- .../OpenDiablo2.Game}/CMakeLists.txt | 23 ++++++---- .../include/OpenDiablo2.Game/D2Engine.h | 0 .../OpenDiablo2.Game}/src/D2Engine.cpp | 0 src/OpenDiablo2.Game/src/main.cpp | 42 +++++++++++++++++++ src/OpenDiablo2.Graphics/CMakeLists.txt | 28 +++++++++++++ .../include/OpenDiablo2.Graphics/D2Graphics.h | 0 .../OpenDiablo2.Graphics}/src/D2Graphics.cpp | 0 .../OpenDiablo2.OS}/CMakeLists.txt | 20 +++++---- .../include/OpenDiablo2.OS/D2Window.h | 0 .../OpenDiablo2.OS}/src/D2Window.cpp | 2 +- 18 files changed, 118 insertions(+), 62 deletions(-) create mode 160000 3rdparty/cli11 create mode 160000 3rdparty/stormlib delete mode 100644 OpenDiablo2.Game/src/main.cpp delete mode 100644 OpenDiablo2.Graphics/CMakeLists.txt rename {OpenDiablo2.Game => src/OpenDiablo2.Game}/CMakeLists.txt (51%) rename {OpenDiablo2.Game => src/OpenDiablo2.Game}/include/OpenDiablo2.Game/D2Engine.h (100%) rename {OpenDiablo2.Game => src/OpenDiablo2.Game}/src/D2Engine.cpp (100%) create mode 100644 src/OpenDiablo2.Game/src/main.cpp create mode 100644 src/OpenDiablo2.Graphics/CMakeLists.txt rename {OpenDiablo2.Graphics => src/OpenDiablo2.Graphics}/include/OpenDiablo2.Graphics/D2Graphics.h (100%) rename {OpenDiablo2.Graphics => src/OpenDiablo2.Graphics}/src/D2Graphics.cpp (100%) rename {OpenDiablo2.OS => src/OpenDiablo2.OS}/CMakeLists.txt (55%) rename {OpenDiablo2.OS => src/OpenDiablo2.OS}/include/OpenDiablo2.OS/D2Window.h (100%) rename {OpenDiablo2.OS => src/OpenDiablo2.OS}/src/D2Window.cpp (95%) diff --git a/.gitignore b/.gitignore index 102b9387..49fb29be 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ cmake-build-* -.idea \ No newline at end of file +.idea +.vscode +build/ diff --git a/.gitmodules b/.gitmodules index 07e02ee9..b3d6a7a3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,9 @@ [submodule "3rdparty/spdlog"] path = 3rdparty/spdlog url = git@github.com:gabime/spdlog.git +[submodule "3rdparty/stormlib"] + path = 3rdparty/stormlib + url = git@github.com:ladislav-zezula/StormLib.git +[submodule "3rdparty/cli11"] + path = 3rdparty/cli11 + url = git@github.com:CLIUtils/CLI11.git diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index acd38c97..a605de49 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -2,3 +2,7 @@ set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) add_subdirectory(glfw) + +add_subdirectory(stormlib) + +add_subdirectory(cli11) diff --git a/3rdparty/cli11 b/3rdparty/cli11 new file mode 160000 index 00000000..1a1cde98 --- /dev/null +++ b/3rdparty/cli11 @@ -0,0 +1 @@ +Subproject commit 1a1cde98f5e8868ca2f17707ab84dcae5718110e diff --git a/3rdparty/stormlib b/3rdparty/stormlib new file mode 160000 index 00000000..f2c8d249 --- /dev/null +++ b/3rdparty/stormlib @@ -0,0 +1 @@ +Subproject commit f2c8d249607009a282904a43a4c4ba60922a92bb diff --git a/CMakeLists.txt b/CMakeLists.txt index 27b4edf0..3f7436a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,12 +10,13 @@ include(CTest) include(CMakeDependentOption) set(CMAKE_CXX_STANDARD 17) +set(CXX_STANDARD 17) set(OpenGL_GL_PREFERENCE "GLVND") set_property(GLOBAL PROPERTY USE_FOLDERS ON) add_subdirectory(3rdparty) -add_subdirectory(OpenDiablo2.OS) -add_subdirectory(OpenDiablo2.Graphics) -add_subdirectory(OpenDiablo2.Game) +add_subdirectory(src/OpenDiablo2.OS) +add_subdirectory(src/OpenDiablo2.Graphics) +add_subdirectory(src/OpenDiablo2.Game) diff --git a/OpenDiablo2.Game/src/main.cpp b/OpenDiablo2.Game/src/main.cpp deleted file mode 100644 index 8e554ee7..00000000 --- a/OpenDiablo2.Game/src/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include -#include -#include - -int -main() { - spdlog::set_level(spdlog::level::trace); - spdlog::set_pattern("[%^%l%$] %v"); - - spdlog::info("OpenDiablo 2 has started"); - - auto engine = std::make_unique(); - engine->Run(); - - return 0; -} - - diff --git a/OpenDiablo2.Graphics/CMakeLists.txt b/OpenDiablo2.Graphics/CMakeLists.txt deleted file mode 100644 index 1faa6927..00000000 --- a/OpenDiablo2.Graphics/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -project(libOpenDiablo2.Graphics VERSION 0.1 LANGUAGES CXX) - -find_package(OpenGL) - -include_directories( - include - ../3rdparty/bgfx/include - ../3rdparty/spdlog/include - ${OPENGL_INCLUDE_DIRS} -) - -add_library(OpenDiablo2.Graphics SHARED - src/D2Graphics.cpp -) - - -target_link_libraries(OpenDiablo2.Graphics ${OPENGL_LIBRARIES}) - -if(MSVC) - target_compile_options(OpenDiablo2.Graphics PRIVATE /W4 /WX) -else(MSVC) - target_compile_options(OpenDiablo2.Graphics PRIVATE -Wall -Wextra -pedantic -Werror) -endif(MSVC) diff --git a/OpenDiablo2.Game/CMakeLists.txt b/src/OpenDiablo2.Game/CMakeLists.txt similarity index 51% rename from OpenDiablo2.Game/CMakeLists.txt rename to src/OpenDiablo2.Game/CMakeLists.txt index ad71ee9d..1bf18918 100644 --- a/OpenDiablo2.Game/CMakeLists.txt +++ b/src/OpenDiablo2.Game/CMakeLists.txt @@ -4,19 +4,26 @@ add_executable(OpenDiablo2 src/D2Engine.cpp ) -include_directories(OpenDiablo2 - include - ../OpenDiablo2.OS/include - ../OpenDiablo2.Graphics/include - ../3rdparty/spdlog/include -) target_link_libraries(OpenDiablo2 - PUBLIC + PRIVATE OpenDiablo2.OS OpenDiablo2.Graphics + storm + CLI11 + stdc++fs ) -target_compile_features(OpenDiablo2 PRIVATE cxx_std_17) +target_include_directories(OpenDiablo2 + PUBLIC + include + PRIVATE + include + ../OpenDiablo2.OS/include + ../OpenDiablo2.Graphics/include + ../../3rdparty/spdlog/include + ../../3rdparty/stormlib/src + ../../3rdparty/cli11/include +) if(MSVC) target_compile_options(OpenDiablo2 PRIVATE /W4 /WX) diff --git a/OpenDiablo2.Game/include/OpenDiablo2.Game/D2Engine.h b/src/OpenDiablo2.Game/include/OpenDiablo2.Game/D2Engine.h similarity index 100% rename from OpenDiablo2.Game/include/OpenDiablo2.Game/D2Engine.h rename to src/OpenDiablo2.Game/include/OpenDiablo2.Game/D2Engine.h diff --git a/OpenDiablo2.Game/src/D2Engine.cpp b/src/OpenDiablo2.Game/src/D2Engine.cpp similarity index 100% rename from OpenDiablo2.Game/src/D2Engine.cpp rename to src/OpenDiablo2.Game/src/D2Engine.cpp diff --git a/src/OpenDiablo2.Game/src/main.cpp b/src/OpenDiablo2.Game/src/main.cpp new file mode 100644 index 00000000..e6a85712 --- /dev/null +++ b/src/OpenDiablo2.Game/src/main.cpp @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) { + spdlog::set_level(spdlog::level::trace); + spdlog::set_pattern("[%^%l%$] %v"); + spdlog::info("OpenDiablo 2 has started"); + + CLI::App app{"OpenDiablo2 - An open source re-implementation of Diablo 2."}; + + std::string basePath = std::experimental::filesystem::current_path(); + app.add_option("-p,--path", basePath, "The base path for Diablo 2"); + + CLI11_PARSE(app, argc, argv); + + spdlog::info("Base file path is '" + basePath + "'"); + + // Sanity-check that files are where we expect them to be... + auto testArchivePath = basePath + std::experimental::filesystem::path::preferred_separator + "d2data.mpq"; + + HANDLE mpq = nullptr; + + if (!SFileOpenArchive(("flat-file:" + testArchivePath).c_str(), 0, STREAM_FLAG_READ_ONLY, &mpq)) { + spdlog::error("Diablo 2 content files were not detected. Please make sure the base path is properly set!"); + exit(0); + } + SFileCloseFile(mpq); + spdlog::info("Content files were located, starting engine."); + + auto engine = std::make_unique(); + engine->Run(); + + return 0; +} + + diff --git a/src/OpenDiablo2.Graphics/CMakeLists.txt b/src/OpenDiablo2.Graphics/CMakeLists.txt new file mode 100644 index 00000000..8a371bf4 --- /dev/null +++ b/src/OpenDiablo2.Graphics/CMakeLists.txt @@ -0,0 +1,28 @@ +project(OpenDiablo2.Graphics VERSION 0.1 LANGUAGES CXX) + +find_package(OpenGL) + +add_library(OpenDiablo2.Graphics SHARED + src/D2Graphics.cpp +) + +target_include_directories(OpenDiablo2.Graphics + PUBLIC + include + PRIVATE + include + ../../3rdparty/bgfx/include + ../../3rdparty/spdlog/include + ${OPENGL_INCLUDE_DIRS} +) + +target_link_libraries(OpenDiablo2.Graphics + PRIVATE + ${OPENGL_LIBRARIES} +) + +if(MSVC) + target_compile_options(OpenDiablo2.Graphics PRIVATE /W4 /WX) +else(MSVC) + target_compile_options(OpenDiablo2.Graphics PRIVATE -Wall -Wextra -pedantic -Werror) +endif(MSVC) diff --git a/OpenDiablo2.Graphics/include/OpenDiablo2.Graphics/D2Graphics.h b/src/OpenDiablo2.Graphics/include/OpenDiablo2.Graphics/D2Graphics.h similarity index 100% rename from OpenDiablo2.Graphics/include/OpenDiablo2.Graphics/D2Graphics.h rename to src/OpenDiablo2.Graphics/include/OpenDiablo2.Graphics/D2Graphics.h diff --git a/OpenDiablo2.Graphics/src/D2Graphics.cpp b/src/OpenDiablo2.Graphics/src/D2Graphics.cpp similarity index 100% rename from OpenDiablo2.Graphics/src/D2Graphics.cpp rename to src/OpenDiablo2.Graphics/src/D2Graphics.cpp diff --git a/OpenDiablo2.OS/CMakeLists.txt b/src/OpenDiablo2.OS/CMakeLists.txt similarity index 55% rename from OpenDiablo2.OS/CMakeLists.txt rename to src/OpenDiablo2.OS/CMakeLists.txt index f811ea71..42065859 100644 --- a/OpenDiablo2.OS/CMakeLists.txt +++ b/src/OpenDiablo2.OS/CMakeLists.txt @@ -1,16 +1,22 @@ project(libOpenDiablo2.OS VERSION 0.1 LANGUAGES CXX) -include_directories( - include - ../3rdparty/glfw/include - ../3rdparty/spdlog/include -) - add_library(OpenDiablo2.OS SHARED src/D2Window.cpp ) -target_link_libraries(OpenDiablo2.OS glfw) +target_include_directories(OpenDiablo2.OS + PUBLIC + include + PRIVATE + include + ../../3rdparty/glfw/include + ../../3rdparty/spdlog/include +) + +target_link_libraries(OpenDiablo2.OS + PRIVATE + glfw +) if(MSVC) target_compile_options(OpenDiablo2.OS PRIVATE /W4 /WX) diff --git a/OpenDiablo2.OS/include/OpenDiablo2.OS/D2Window.h b/src/OpenDiablo2.OS/include/OpenDiablo2.OS/D2Window.h similarity index 100% rename from OpenDiablo2.OS/include/OpenDiablo2.OS/D2Window.h rename to src/OpenDiablo2.OS/include/OpenDiablo2.OS/D2Window.h diff --git a/OpenDiablo2.OS/src/D2Window.cpp b/src/OpenDiablo2.OS/src/D2Window.cpp similarity index 95% rename from OpenDiablo2.OS/src/D2Window.cpp rename to src/OpenDiablo2.OS/src/D2Window.cpp index 43d46937..f684b37a 100644 --- a/OpenDiablo2.OS/src/D2Window.cpp +++ b/src/OpenDiablo2.OS/src/D2Window.cpp @@ -21,7 +21,7 @@ namespace OpenDiablo2 { spdlog::debug("Creating GLFW window"); glfwWindowHint(GLFW_RESIZABLE, 0); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); glfwWindow = glfwCreateWindow(800, 600, "OpenDiablo 2", nullptr, nullptr); }