mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-07 09:07:00 -05:00
More project structure updates
This commit is contained in:
parent
21acfc00fa
commit
56b2f146d3
12
.gitmodules
vendored
12
.gitmodules
vendored
@ -0,0 +1,12 @@
|
||||
[submodule "3rdparty/sdl2"]
|
||||
path = 3rdparty/sdl2
|
||||
url = https://github.com/SDL-mirror/SDL.git
|
||||
[submodule "3rdparty/spdlog"]
|
||||
path = 3rdparty/spdlog
|
||||
url = https://github.com/gabime/spdlog.git
|
||||
[submodule "3rdparty/cli11"]
|
||||
path = 3rdparty/cli11
|
||||
url = https://github.com/CLIUtils/CLI11.git
|
||||
[submodule "3rdparty/stormlib"]
|
||||
path = 3rdparty/stormlib
|
||||
url = https://github.com/ladislav-zezula/StormLib.git
|
1
3rdparty/cli11
vendored
Submodule
1
3rdparty/cli11
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit ed5cd896362363f0fc1c3b4e4e1bb8ee308a688d
|
1
3rdparty/sdl2
vendored
Submodule
1
3rdparty/sdl2
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit f13fbfa3550032b243e5c2836b3f97c608bc8ab7
|
1
3rdparty/spdlog
vendored
Submodule
1
3rdparty/spdlog
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit bdfc7d2a5a4ad9cc1cebe1feb7e6fcc703840d71
|
1
3rdparty/stormlib
vendored
Submodule
1
3rdparty/stormlib
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit f2c8d249607009a282904a43a4c4ba60922a92bb
|
@ -1,20 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
||||
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "Do not build in-source. Please remove CMakeCache.txt and the CMakeFiles/ directory. Then build out-of-source.")
|
||||
endif()
|
||||
|
||||
project(OpenDiablo2 CXX)
|
||||
|
||||
include(CTest)
|
||||
include(CMakeDependentOption)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CXX_STANDARD 17)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
add_subdirectory(3rdparty)
|
||||
add_subdirectory(src/OpenDiablo2.SDL2)
|
||||
add_subdirectory(src/OpenDiablo2.Game)
|
@ -1,173 +0,0 @@
|
||||
|
||||
# This module defines
|
||||
# SDL2_LIBRARY, the name of the library to link against
|
||||
# SDL2_FOUND, if false, do not try to link to SDL2
|
||||
# SDL2_INCLUDE_DIR, where to find SDL.h
|
||||
#
|
||||
# This module responds to the the flag:
|
||||
# SDL2_BUILDING_LIBRARY
|
||||
# If this is defined, then no SDL2main will be linked in because
|
||||
# only applications need main().
|
||||
# Otherwise, it is assumed you are building an application and this
|
||||
# module will attempt to locate and set the the proper link flags
|
||||
# as part of the returned SDL2_LIBRARY variable.
|
||||
#
|
||||
# Don't forget to include SDLmain.h and SDLmain.m your project for the
|
||||
# OS X framework based version. (Other versions link to -lSDL2main which
|
||||
# this module will try to find on your behalf.) Also for OS X, this
|
||||
# module will automatically add the -framework Cocoa on your behalf.
|
||||
#
|
||||
#
|
||||
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
|
||||
# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
|
||||
# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
|
||||
# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
|
||||
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
|
||||
# as appropriate. These values are used to generate the final SDL2_LIBRARY
|
||||
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
|
||||
#
|
||||
#
|
||||
# $SDL2DIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$SDL2DIR
|
||||
# used in building SDL2.
|
||||
# l.e.galup 9-20-02
|
||||
#
|
||||
# Modified by Eric Wing.
|
||||
# Added code to assist with automated building by using environmental variables
|
||||
# and providing a more controlled/consistent search behavior.
|
||||
# Added new modifications to recognize OS X frameworks and
|
||||
# additional Unix paths (FreeBSD, etc).
|
||||
# Also corrected the header search path to follow "proper" SDL guidelines.
|
||||
# Added a search for SDL2main which is needed by some platforms.
|
||||
# Added a search for threads which is needed by some platforms.
|
||||
# Added needed compile switches for MinGW.
|
||||
#
|
||||
# On OSX, this will prefer the Framework version (if found) over others.
|
||||
# People will have to manually change the cache values of
|
||||
# SDL2_LIBRARY to override this selection or set the CMake environment
|
||||
# CMAKE_INCLUDE_PATH to modify the search paths.
|
||||
#
|
||||
# Note that the header path has changed from SDL2/SDL.h to just SDL.h
|
||||
# This needed to change because "proper" SDL convention
|
||||
# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
|
||||
# reasons because not all systems place things in SDL2/ (see FreeBSD).
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2003-2009 Kitware, Inc.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
# (To distribute this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
# message("<FindSDL2.cmake>")
|
||||
|
||||
SET(SDL2_SEARCH_PATHS
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local
|
||||
/usr
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
/opt
|
||||
${SDL2_PATH}
|
||||
)
|
||||
|
||||
FIND_PATH(SDL2_INCLUDE_DIR SDL.h
|
||||
HINTS
|
||||
$ENV{SDL2DIR}
|
||||
PATH_SUFFIXES include/SDL2 include
|
||||
PATHS ${SDL2_SEARCH_PATHS}
|
||||
)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(PATH_SUFFIXES lib64 lib/x64 lib)
|
||||
else()
|
||||
set(PATH_SUFFIXES lib/x86 lib)
|
||||
endif()
|
||||
|
||||
FIND_LIBRARY(SDL2_LIBRARY_TEMP
|
||||
NAMES SDL2
|
||||
HINTS
|
||||
$ENV{SDL2DIR}
|
||||
PATH_SUFFIXES ${PATH_SUFFIXES}
|
||||
PATHS ${SDL2_SEARCH_PATHS}
|
||||
)
|
||||
|
||||
IF(NOT SDL2_BUILDING_LIBRARY)
|
||||
IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
|
||||
# Non-OS X framework versions expect you to also dynamically link to
|
||||
# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
|
||||
# seem to provide SDL2main for compatibility even though they don't
|
||||
# necessarily need it.
|
||||
FIND_LIBRARY(SDL2MAIN_LIBRARY
|
||||
NAMES SDL2main
|
||||
HINTS
|
||||
$ENV{SDL2DIR}
|
||||
PATH_SUFFIXES ${PATH_SUFFIXES}
|
||||
PATHS ${SDL2_SEARCH_PATHS}
|
||||
)
|
||||
ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
|
||||
ENDIF(NOT SDL2_BUILDING_LIBRARY)
|
||||
|
||||
# SDL2 may require threads on your system.
|
||||
# The Apple build may not need an explicit flag because one of the
|
||||
# frameworks may already provide it.
|
||||
# But for non-OSX systems, I will use the CMake Threads package.
|
||||
IF(NOT APPLE)
|
||||
FIND_PACKAGE(Threads)
|
||||
ENDIF(NOT APPLE)
|
||||
|
||||
# MinGW needs an additional link flag, -mwindows
|
||||
# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows
|
||||
IF(MINGW)
|
||||
SET(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "mwindows for MinGW")
|
||||
ENDIF(MINGW)
|
||||
|
||||
IF(SDL2_LIBRARY_TEMP)
|
||||
# For SDL2main
|
||||
IF(NOT SDL2_BUILDING_LIBRARY)
|
||||
IF(SDL2MAIN_LIBRARY)
|
||||
SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
|
||||
ENDIF(SDL2MAIN_LIBRARY)
|
||||
ENDIF(NOT SDL2_BUILDING_LIBRARY)
|
||||
|
||||
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
|
||||
# CMake doesn't display the -framework Cocoa string in the UI even
|
||||
# though it actually is there if I modify a pre-used variable.
|
||||
# I think it has something to do with the CACHE STRING.
|
||||
# So I use a temporary variable until the end so I can set the
|
||||
# "real" variable in one-shot.
|
||||
IF(APPLE)
|
||||
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
|
||||
ENDIF(APPLE)
|
||||
|
||||
# For threads, as mentioned Apple doesn't need this.
|
||||
# In fact, there seems to be a problem if I used the Threads package
|
||||
# and try using this line, so I'm just skipping it entirely for OS X.
|
||||
IF(NOT APPLE)
|
||||
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
|
||||
ENDIF(NOT APPLE)
|
||||
|
||||
# For MinGW library
|
||||
IF(MINGW)
|
||||
SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
|
||||
ENDIF(MINGW)
|
||||
|
||||
# Set the final string here so the GUI reflects the final state.
|
||||
SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
|
||||
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
|
||||
SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
|
||||
ENDIF(SDL2_LIBRARY_TEMP)
|
||||
|
||||
# message("</FindSDL2.cmake>")
|
||||
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)
|
72
src/CMakeLists.txt
Normal file
72
src/CMakeLists.txt
Normal file
@ -0,0 +1,72 @@
|
||||
# Initialize the CMake version stuff
|
||||
cmake_minimum_required(VERSION 3.1...3.13)
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.12)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
endif()
|
||||
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
|
||||
|
||||
# Add our nifty CMake scripts ------------------------------------------------------------------------------------------
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
||||
|
||||
# Prevent users from shooting themselves in the foot -------------------------------------------------------------------
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR
|
||||
"Do not build in-source.
|
||||
Please remove CMakeCache.txt and the CMakeFiles/ directory. Then build out-of-source.")
|
||||
endif()
|
||||
|
||||
# ----------------------------------------------------------------------------------------------------------------------
|
||||
project(OpenDiablo2 VERSION 0.1
|
||||
DESCRIPTION "An open source Diablo2 engine.")
|
||||
# ----------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
# Pull down submodules -------------------------------------------------------------------------------------------------
|
||||
find_package(Git QUIET)
|
||||
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
||||
# Update submodules as needed
|
||||
option(GIT_SUBMODULE "Check submodules during build" ON)
|
||||
if(GIT_SUBMODULE)
|
||||
message(STATUS "Submodule update")
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
RESULT_VARIABLE GIT_SUBMOD_RESULT)
|
||||
if(NOT GIT_SUBMOD_RESULT EQUAL "0")
|
||||
message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Freaky relocatable exe stuff -----------------------------------------------------------------------------------------
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "")
|
||||
|
||||
# Import the libraries -------------------------------------------------------------------------------------------------
|
||||
set( BGFX_BUILD_TOOLS OFF )
|
||||
set( BGFX_BUILD_EXAMPLES OFF )
|
||||
set( BGFX_INSTALL OFF )
|
||||
set( BGFX_INSTALL_EXAMPLES OFF )
|
||||
set( BGFX_CUSTOM_TARGETS OFF )
|
||||
set( BGFX_USE_OVR OFF )
|
||||
set( BGFX_AMALGAMATED ON )
|
||||
set( BX_AMALGAMATED ON )
|
||||
set( BGFX_CONFIG_DEBUG OFF )
|
||||
set( SDL_STATIC_PIC ON )
|
||||
set( SDL_SHARED OFF )
|
||||
set( BUILD_SHARED_LIBS OFF )
|
||||
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/spdlog spdlog)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/cli11 cli11)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/sdl2 sdl2)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/stormlib stormlib)
|
||||
|
||||
# Import the actual projects -------------------------------------------------------------------------------------------
|
||||
add_subdirectory(OpenDiablo2.SDL2)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/OpenDiablo2.SDL2/include)
|
||||
|
||||
add_subdirectory(OpenDiablo2.Game)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/OpenDiablo2.Game/include)
|
||||
|
||||
|
24
src/OpenDiablo2.Game/CMakeLists.txt
Normal file
24
src/OpenDiablo2.Game/CMakeLists.txt
Normal file
@ -0,0 +1,24 @@
|
||||
add_executable(OpenDiablo2.Game
|
||||
src/main.cpp
|
||||
src/D2Engine.cpp
|
||||
)
|
||||
|
||||
target_include_directories(OpenDiablo2.SDL2
|
||||
PUBLIC
|
||||
include
|
||||
PRIVATE
|
||||
include
|
||||
)
|
||||
|
||||
target_link_libraries(OpenDiablo2.Game
|
||||
OpenDiablo2.SDL2
|
||||
storm
|
||||
CLI11::CLI11
|
||||
stdc++fs
|
||||
spdlog::spdlog
|
||||
)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CXX_STANDARD 17)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
26
src/OpenDiablo2.Game/include/OpenDiablo2.Game/D2Engine.h
Normal file
26
src/OpenDiablo2.Game/include/OpenDiablo2.Game/D2Engine.h
Normal file
@ -0,0 +1,26 @@
|
||||
#ifndef OPENDIABLO2_D2ENGINE_H
|
||||
#define OPENDIABLO2_D2ENGINE_H
|
||||
|
||||
#include <OpenDiablo2.System/D2Graphics.h>
|
||||
#include <OpenDiablo2.System/D2Input.h>
|
||||
#include "D2EngineConfig.h"
|
||||
|
||||
namespace OpenDiablo2 {
|
||||
namespace Game {
|
||||
class D2Engine {
|
||||
public:
|
||||
D2Engine(const D2EngineConfig& config);
|
||||
void Run();
|
||||
private:
|
||||
const D2EngineConfig config;
|
||||
OpenDiablo2::System::D2Graphics::Ptr gfx;
|
||||
OpenDiablo2::System::D2Input::Ptr input;
|
||||
bool isRunning = true;
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif //OPENDIABLO2_D2ENGINE_H
|
||||
|
@ -0,0 +1,16 @@
|
||||
#ifndef OPENDIABLO2_D2ENGINECONFIG_H
|
||||
#define OPENDIABLO2_D2ENGINECONFIG_H
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace OpenDiablo2 {
|
||||
namespace Game {
|
||||
|
||||
struct D2EngineConfig {
|
||||
std::string BasePath; // The base path where the MPQ files are located
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif //OPENDIABLO2_D2ENGINECONFIG_H
|
25
src/OpenDiablo2.Game/src/D2Engine.cpp
Normal file
25
src/OpenDiablo2.Game/src/D2Engine.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
#include <OpenDiablo2.Game/D2Engine.h>
|
||||
|
||||
|
||||
OpenDiablo2::Game::D2Engine::D2Engine(const D2EngineConfig &config)
|
||||
: config(config) {
|
||||
gfx = std::make_unique<OpenDiablo2::System::D2Graphics>();
|
||||
input = std::make_unique<OpenDiablo2::System::D2Input>();
|
||||
}
|
||||
|
||||
void
|
||||
OpenDiablo2::Game::D2Engine::Run() {
|
||||
gfx->InitializeWindow();
|
||||
|
||||
while (isRunning) {
|
||||
input->ProcessEvents();
|
||||
if (input->QuitIsRequested()) {
|
||||
isRunning = false;
|
||||
break;
|
||||
}
|
||||
gfx->Clear();
|
||||
|
||||
gfx->Present();
|
||||
}
|
||||
}
|
||||
|
47
src/OpenDiablo2.Game/src/main.cpp
Normal file
47
src/OpenDiablo2.Game/src/main.cpp
Normal file
@ -0,0 +1,47 @@
|
||||
#include <memory>
|
||||
#include <experimental/filesystem>
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <spdlog/sinks/stdout_color_sinks.h>
|
||||
#include <OpenDiablo2.Game/D2Engine.h>
|
||||
#include <CLI/CLI.hpp>
|
||||
#include <StormLib.h>
|
||||
|
||||
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."};
|
||||
|
||||
OpenDiablo2::Game::D2EngineConfig engineConfig;
|
||||
engineConfig.BasePath = std::experimental::filesystem::current_path().string();
|
||||
|
||||
app.add_option("-p,--path", engineConfig.BasePath, "The base path for Diablo 2");
|
||||
|
||||
CLI11_PARSE(app, argc, argv);
|
||||
|
||||
spdlog::info("Base file path is '" + engineConfig.BasePath + "'");
|
||||
|
||||
// Sanity-check that files are where we expect them to be...
|
||||
auto testFilePath = engineConfig.BasePath + "/d2data.mpq";
|
||||
|
||||
HANDLE mpq = nullptr;
|
||||
|
||||
if (!SFileOpenArchive(("flat-file:" + testFilePath).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.");
|
||||
|
||||
// Start up the engine
|
||||
auto engine = std::make_unique<OpenDiablo2::Game::D2Engine>(engineConfig);
|
||||
engine->Run();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
18
src/OpenDiablo2.SDL2/CMakeLists.txt
Normal file
18
src/OpenDiablo2.SDL2/CMakeLists.txt
Normal file
@ -0,0 +1,18 @@
|
||||
project(OpenDiablo2.SDL2 VERSION 0.1 LANGUAGES CXX)
|
||||
|
||||
add_library(OpenDiablo2.SDL2 STATIC
|
||||
src/D2Graphics.cpp
|
||||
src/D2Input.cpp
|
||||
)
|
||||
|
||||
target_include_directories(OpenDiablo2.SDL2
|
||||
PUBLIC
|
||||
include
|
||||
PRIVATE
|
||||
include
|
||||
)
|
||||
|
||||
target_link_libraries(OpenDiablo2.SDL2
|
||||
spdlog::spdlog
|
||||
SDL2
|
||||
)
|
45
src/OpenDiablo2.SDL2/include/OpenDiablo2.System/D2Graphics.h
Normal file
45
src/OpenDiablo2.SDL2/include/OpenDiablo2.System/D2Graphics.h
Normal file
@ -0,0 +1,45 @@
|
||||
#ifndef OPENDIABLO2_D2GRAPHICS_H
|
||||
#define OPENDIABLO2_D2GRAPHICS_H
|
||||
|
||||
#include <memory>
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
|
||||
namespace OpenDiablo2 {
|
||||
namespace System {
|
||||
|
||||
struct SDLWindowDestroyer
|
||||
{
|
||||
void operator()(SDL_Window* w) const
|
||||
{
|
||||
spdlog::debug("Destroying SDL window");
|
||||
if (w) SDL_DestroyWindow(w);
|
||||
}
|
||||
};
|
||||
|
||||
struct SDLRendererDestroyer
|
||||
{
|
||||
void operator()(SDL_Renderer* r) const
|
||||
{
|
||||
spdlog::debug("Destroying SDL renderer");
|
||||
if (r) SDL_DestroyRenderer(r);
|
||||
}
|
||||
};
|
||||
|
||||
class D2Graphics {
|
||||
public:
|
||||
typedef std::unique_ptr<D2Graphics> Ptr;
|
||||
D2Graphics();
|
||||
void InitializeWindow();
|
||||
void Clear();
|
||||
void Present();
|
||||
private:
|
||||
std::unique_ptr<SDL_Window, SDLWindowDestroyer> window;
|
||||
std::unique_ptr<SDL_Renderer, SDLRendererDestroyer> renderer;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif //OPENDIABLO2_D2GRAPHICS_H
|
23
src/OpenDiablo2.SDL2/include/OpenDiablo2.System/D2Input.h
Normal file
23
src/OpenDiablo2.SDL2/include/OpenDiablo2.System/D2Input.h
Normal file
@ -0,0 +1,23 @@
|
||||
#ifndef OPENDIABLO2_D2INPUT_H
|
||||
#define OPENDIABLO2_D2INPUT_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace OpenDiablo2 {
|
||||
namespace System {
|
||||
|
||||
class D2Input {
|
||||
public:
|
||||
typedef std::unique_ptr<D2Input> Ptr;
|
||||
D2Input();
|
||||
void ProcessEvents();
|
||||
bool QuitIsRequested();
|
||||
private:
|
||||
bool quitIsRequested = false;
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif //OPENDIABLO2_D2INPUT_H
|
54
src/OpenDiablo2.SDL2/src/D2Graphics.cpp
Normal file
54
src/OpenDiablo2.SDL2/src/D2Graphics.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
#include <OpenDiablo2.System/D2Graphics.h>
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <string>
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
|
||||
#include "OpenDiablo2.System/D2Graphics.h"
|
||||
|
||||
namespace OpenDiablo2 {
|
||||
namespace System {
|
||||
|
||||
D2Graphics::D2Graphics() {
|
||||
atexit(SDL_Quit);
|
||||
|
||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||
spdlog::error("Could not initialize sdl2: " + std::string(SDL_GetError()));
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
D2Graphics::Clear() {
|
||||
SDL_RenderClear(renderer.get());
|
||||
}
|
||||
|
||||
void
|
||||
D2Graphics::InitializeWindow() {
|
||||
spdlog::debug("Initializing SDL window");
|
||||
window = std::unique_ptr<SDL_Window, SDLWindowDestroyer>(SDL_CreateWindow("OpenDiablo 2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
||||
800, 600, SDL_WINDOW_SHOWN));
|
||||
if (window == nullptr) {
|
||||
spdlog::error("Could not create sdl2 window: " + std::string(SDL_GetError()));
|
||||
SDL_Quit();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
spdlog::debug("Destroying SDL renderer");
|
||||
renderer = std::unique_ptr<SDL_Renderer, SDLRendererDestroyer>(SDL_CreateRenderer(window.get(), -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC));
|
||||
if (renderer == nullptr){
|
||||
spdlog::error("Could not create sdl2 window: " + std::string(SDL_GetError()));
|
||||
SDL_Quit();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
D2Graphics::Present() {
|
||||
SDL_RenderPresent(renderer.get());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
27
src/OpenDiablo2.SDL2/src/D2Input.cpp
Normal file
27
src/OpenDiablo2.SDL2/src/D2Input.cpp
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
#include <OpenDiablo2.System/D2Input.h>
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
namespace OpenDiablo2 {
|
||||
namespace System {
|
||||
|
||||
D2Input::D2Input() {
|
||||
SDL_Init(SDL_INIT_EVENTS);
|
||||
}
|
||||
|
||||
void
|
||||
D2Input::ProcessEvents() {
|
||||
SDL_Event event;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
if( event.type == SDL_QUIT ) {
|
||||
quitIsRequested = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
D2Input::QuitIsRequested() {
|
||||
return quitIsRequested;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user