diff --git a/CMakeLists.txt b/CMakeLists.txt index 216ce460..15f8ffb0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ include_directories(${PROJECT_SOURCE_DIR}/include) #set(Boost_DEBUG ON) set(Boost_USE_STATIC_LIBS on) add_definitions(-DBOOST_ALL_NO_LIB) -#set(BOOST_LIBRARYDIR $ENV{BOOST_ROOT}/lib64-msvc-14.0) +set(BOOST_LIBRARYDIR $ENV{BOOST_ROOT}/lib64-msvc-14.0) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib) diff --git a/README.md b/README.md index f7f64833..59f61f1b 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ Libraries bundled along with binaries for Windows (MSVC14), available as a submo | Project | Version | License | | ------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **[GLFW](http://www.glfw.org)** | ? | [zlib/libpng License](http://www.glfw.org/license.html) | -| **[GLM](http://glm.g-truc.net/0.9.5/index.html)** | ? | [MIT License](http://glm.g-truc.net/copying.txt) | -| **[GLEW](http://glew.sourceforge.net)** | ? | [Modified BSD License](http://glew.sourceforge.net/glew.txt), [Mesa 3-D License](http://glew.sourceforge.net/mesa.txt), [Khronos License](http://glew.sourceforge.net/khronos.txt) | +| **[GLFW](http://www.glfw.org)** | 3.1.2 | [zlib/libpng License](http://www.glfw.org/license.html) | +| **[GLM](http://glm.g-truc.net/0.9.5/index.html)** | 0.9.7.1 | [MIT License](http://glm.g-truc.net/copying.txt) | +| **[GLEW](http://glew.sourceforge.net)** | 1.13.0 | [Modified BSD License](http://glew.sourceforge.net/glew.txt), [Mesa 3-D License](http://glew.sourceforge.net/mesa.txt), [Khronos License](http://glew.sourceforge.net/khronos.txt) | | **[Assimp](http://assimp.sourceforge.net)** | 3.1.1 | [BSD 3-Clause License](http://assimp.sourceforge.net/main_license.html) | | **[zlib](http://www.zlib.net)** | 1.28 | [zlib License](http://www.zlib.net/zlib_license.html) | | **[libpng](http://www.libpng.org/pub/png/libpng.html)** | 1.6.19 | [libpng License](http://www.libpng.org/pub/png/src/libpng-LICENSE.txt) | diff --git a/cmake/FindGLFW.cmake b/cmake/FindGLFW.cmake new file mode 100644 index 00000000..7e7caae6 --- /dev/null +++ b/cmake/FindGLFW.cmake @@ -0,0 +1,48 @@ +# GLFW_FOUND +# GLFW_INCLUDE_DIRS +# GLFW_LIBRARYS + +find_path(GLFW_INCLUDE_DIR GLFW/glfw3.h + $ENV{GLFWDIR}/include + $ENV{GLFW_HOME}/include + ${OPENGL_INCLUDE_DIR} + /usr/include + /usr/local/include + /usr/include/GL + /sw/include + /opt/local/include + /opt/graphics/OpenGL/include + /opt/graphics/OpenGL/contrib/libglfw + DOC "The directory where GL/glfw.h resides" +) + +find_library(GLFW_LIBRARY + NAMES glfw3 glfw glfw3dll glfwdll + PATHS + $ENV{GLFWDIR}/lib + $ENV{GLFWDIR}/lib/x64 + $ENV{GLFWDIR}/lib/cocoa + $ENV{GLFWDIR}/lib-msvc120 + $ENV{GLFW_HOME}/lib + $ENV{GLFW_HOME}/lib/x64 + $ENV{GLFW_HOME}/lib/cocoa + $ENV{GLFW_HOME}/lib-msvc120 + $ENV{GLFW_HOME}/build/src + $ENV{GLFW_HOME}/build-debug/src + $ENV{GLFW_HOME}/build-release/src + /usr/lib64 + /usr/local/lib64 + /sw/lib64 + /opt/local/lib64 + /usr/lib + /usr/local/lib + /sw/lib + /opt/local/lib + DOC "The GLFW library" +) + +set(GLFW_INCLUDE_DIRS ${GLFW_INCLUDE_DIR}) +set(GLFW_LIBRARIES ${GLFW_LIBRARY}) + +find_package_handle_standard_args(GLFW DEFAULT_MSG GLFW_LIBRARY GLFW_INCLUDE_DIR) +mark_as_advanced(GLFW_FOUND GLFW_INCLUDE_DIR GLFW_LIBRARY) \ No newline at end of file diff --git a/cmake/Findassimp.cmake b/cmake/Findassimp.cmake new file mode 100644 index 00000000..e1b817b8 --- /dev/null +++ b/cmake/Findassimp.cmake @@ -0,0 +1,22 @@ +find_path( + assimp_INCLUDE_DIR + NAMES + assimp/postprocess.h + assimp/scene.h + assimp/version.h + assimp/config.h + assimp/cimport.h + PATHS /usr/local/include/ +) + +find_library( + assimp_LIBRARY + NAMES assimp + PATHS /usr/local/lib/ +) + +set(assimp_INCLUDE_DIRS ${assimp_INCLUDE_DIR}) +set(assimp_LIBRARIES ${assimp_LIBRARY}) + +find_package_handle_standard_args(assimp REQUIRED_VARS assimp_INCLUDE_DIR assimp_LIBRARY) +mark_as_advanced(assimp_INCLUDE_DIR assimp_LIBRARY) \ No newline at end of file diff --git a/deps b/deps index 2ecb61a3..65d3f3bc 160000 --- a/deps +++ b/deps @@ -1 +1 @@ -Subproject commit 2ecb61a3d02400fb0bf647e3c32c55f46285ceab +Subproject commit 65d3f3bc314357b8ec67a99f9f69a3fb73b813c1 diff --git a/include/Engine/Core/InputManager.h b/include/Engine/Core/InputManager.h index cd960e6f..7208f7c5 100644 --- a/include/Engine/Core/InputManager.h +++ b/include/Engine/Core/InputManager.h @@ -16,7 +16,7 @@ class InputManager { public: - InputManager(GLFWwindow* window, std::shared_ptr eventBroker) + InputManager(GLFWwindow* window, std::shared_ptr<::EventBroker> eventBroker) : m_GLFWWindow(window) , EventBroker(eventBroker) , m_CurrentKeyState() @@ -37,7 +37,7 @@ public: private: GLFWwindow* m_GLFWWindow; - std::shared_ptr EventBroker; + std::shared_ptr<::EventBroker> EventBroker; EventRelay m_ELockMouse; bool OnLockMouse(const Events::LockMouse &event); diff --git a/include/Engine/Core/ResourceManager.h b/include/Engine/Core/ResourceManager.h index 3a54ffb2..5a050306 100644 --- a/include/Engine/Core/ResourceManager.h +++ b/include/Engine/Core/ResourceManager.h @@ -9,7 +9,6 @@ #include #include "Util/UnorderedMapPair.h" -#include "Util/Factory.h" #include "Util/FileWatcher.h" /** Base Resource class. diff --git a/include/Engine/Core/Util/BoostPathHash.h b/include/Engine/Core/Util/BoostPathHash.h new file mode 100644 index 00000000..17a39278 --- /dev/null +++ b/include/Engine/Core/Util/BoostPathHash.h @@ -0,0 +1,13 @@ +#ifndef BoostPathHash_h__ +#define BoostPathHash_h__ + +struct BoostPathHash +{ + template + std::size_t operator()(const boost::filesystem::path& p) const + { + return boost::filesystem::hash_value(p); + } +}; + +#endif diff --git a/include/Engine/Core/Util/EnumClassHash.h b/include/Engine/Core/Util/EnumClassHash.h new file mode 100644 index 00000000..5d1ddf7f --- /dev/null +++ b/include/Engine/Core/Util/EnumClassHash.h @@ -0,0 +1,14 @@ +#ifndef EnumClassHash_h__ +#define EnumClassHash_h__ + +// http://stackoverflow.com/a/24847480/417018 +struct EnumClassHash +{ + template + std::size_t operator()(T t) const + { + return static_cast(t); + } +}; + +#endif diff --git a/include/Engine/Core/Util/FileWatcher.h b/include/Engine/Core/Util/FileWatcher.h new file mode 100644 index 00000000..10efe683 --- /dev/null +++ b/include/Engine/Core/Util/FileWatcher.h @@ -0,0 +1,67 @@ +#include +#include +#include +#include + +#include "Logging.h" +#include "BoostPathHash.h" + +class FileWatcher +{ +public: + enum class FileEventFlags; + typedef std::function FileEventCallback_t; + + FileWatcher(); + FileWatcher(std::string rootPath); + ~FileWatcher(); + + std::string RootPath() const { return m_RootPath.string(); } + void AddWatch(std::string path, FileEventCallback_t callback); + void Start(); + bool IsRunning() const { return m_IsRunning; } + void Stop(); + void Check(); + +private: + class Worker; + + boost::filesystem::path m_RootPath; + boost::thread m_Thread; + Worker* m_Worker = nullptr; + bool m_IsRunning = false; +}; + +enum class FileWatcher::FileEventFlags +{ + Nothing = 0, + Created = 1 << 0, + SizeChanged = 1 << 1, + TimestampChanged = 1 << 2, + Deleted = 1 << 3 +}; + +inline FileWatcher::FileEventFlags operator|(FileWatcher::FileEventFlags a, FileWatcher::FileEventFlags b) { return static_cast(static_cast(a) | static_cast(b)); } +inline bool operator&(FileWatcher::FileEventFlags a, FileWatcher::FileEventFlags b) { return static_cast(a)& static_cast(b); } + +class FileWatcher::Worker +{ +public: + void operator()(); + void AddWatch(std::string path, FileEventCallback_t callback); + void Check(); + +private: + struct FileInfo + { + int Size; + std::time_t Timestamp; + }; + + std::unordered_map m_FileCallbacks; + std::unordered_map m_FileInfo; + boost::mutex m_Mutex; + + FileInfo GetFileInfo(boost::filesystem::path path); + FileEventFlags UpdateFileInfo(boost::filesystem::path path); +}; diff --git a/include/Engine/Core/Util/Logging.h b/include/Engine/Core/Util/Logging.h index 8326d4cf..43f2c022 100644 --- a/include/Engine/Core/Util/Logging.h +++ b/include/Engine/Core/Util/Logging.h @@ -1,5 +1,5 @@ -#ifndef Util_Logging_h__ -#define Util_Logging_h__ +#ifndef Logging_h__ +#define Logging_h__ #ifdef _WIN32 // http://stackoverflow.com/a/2282433 @@ -19,7 +19,7 @@ #include #include -enum class LogLevel +enum _LOG_LEVEL { LOG_LEVEL_ERROR, LOG_LEVEL_INFO, diff --git a/include/Engine/Core/Util/UnorderedMapPair.h b/include/Engine/Core/Util/UnorderedMapPair.h new file mode 100644 index 00000000..35ade8b5 --- /dev/null +++ b/include/Engine/Core/Util/UnorderedMapPair.h @@ -0,0 +1,17 @@ +#ifndef UnorderedMapPair_h__ +#define UnorderedMapPair_h__ + +#include + +template struct std::hash> +{ + inline std::size_t operator()(const std::pair &v) const + { + std::size_t seed = 0; + boost::hash_combine(seed, v.first); + boost::hash_combine(seed, v.second); + return seed; + } +}; + +#endif \ No newline at end of file diff --git a/include/Engine/Rendering/Image.h b/include/Engine/Rendering/Image.h new file mode 100644 index 00000000..19ef43c1 --- /dev/null +++ b/include/Engine/Rendering/Image.h @@ -0,0 +1,19 @@ +#ifndef Image_h +#define Image_h + +struct Image +{ + enum class ImageFormat + { + Unknown, + RGB, + RGBA + }; + + unsigned int Width = 0; + unsigned int Height = 0; + ImageFormat Format = ImageFormat::Unknown; + unsigned char* Data = nullptr; +}; + +#endif diff --git a/include/Engine/Rendering/RawModel.h b/include/Engine/Rendering/RawModel.h index caf8d86f..25ea0f50 100644 --- a/include/Engine/Rendering/RawModel.h +++ b/include/Engine/Rendering/RawModel.h @@ -47,9 +47,9 @@ public: struct MaterialGroup { float Shininess; - std::shared_ptr Texture; - std::shared_ptr NormalMap; - std::shared_ptr SpecularMap; + std::shared_ptr<::Texture> Texture; + std::shared_ptr<::Texture> NormalMap; + std::shared_ptr<::Texture> SpecularMap; unsigned int StartIndex; unsigned int EndIndex; }; diff --git a/src/Engine/CMakeLists.txt b/src/Engine/CMakeLists.txt index 87f0dc00..db0868fe 100644 --- a/src/Engine/CMakeLists.txt +++ b/src/Engine/CMakeLists.txt @@ -1,20 +1,20 @@ -project(TacticalZ) +project(TacticalZ-Engine) find_package(OpenGL REQUIRED) -find_package(GLEW REQUIRED) +#find_package(GLEW REQUIRED) find_package(GLFW REQUIRED) find_package(Boost REQUIRED COMPONENTS system filesystem thread chrono) find_package(assimp REQUIRED) find_package(ZLIB REQUIRED) find_package(PNG REQUIRED) # Because FindOpenAL is retarded -set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${CMAKE_SOURCE_DIR}/deps/include/AL") -find_package(OpenAL REQUIRED) +#set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${CMAKE_SOURCE_DIR}/deps/include/AL") +#find_package(OpenAL REQUIRED) if(UNIX) find_package(X11 REQUIRED) endif() -set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include) +set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include/Engine) include_directories( ${INCLUDE_PATH} ${OPENGL_INCLUDE_DIR} @@ -23,8 +23,8 @@ include_directories( ${Boost_INCLUDE_DIRS} ${assimp_INCLUDE_DIRS} ${PNG_INCLUDE_DIRS} - ${X11_INCLUDE_DIRS} ${OPENAL_INCLUDE_DIR} + ${X11_INCLUDE_DIRS} ) file(GLOB SOURCE_FILES_Core @@ -49,63 +49,12 @@ file(GLOB SOURCE_FILES_Rendering "Rendering/*.cpp" ) source_group(Rendering FILES ${SOURCE_FILES_Rendering}) -file(GLOB SOURCE_FILES_Rendering_OpenGL - "${INCLUDE_PATH}/Rendering/OpenGL/Rendering/*.h" - "Rendering/OpenGL/*.cpp" -) -source_group(Rendering\\OpenGL FILES ${SOURCE_FILES_Rendering_OpenGL}) -file(GLOB SOURCE_FILES_Rendering_DirectX - "${INCLUDE_PATH}/Rendering/DirectX/Rendering/*.h" - "Rendering/DirectX/*.cpp" -) -source_group(Rendering\\DirectX FILES ${SOURCE_FILES_Rendering_DirectX}) - -file(GLOB SOURCE_FILES_Transform - "${INCLUDE_PATH}/Transform/*.h" - "Transform/*.cpp" -) -source_group(Transform FILES ${SOURCE_FILES_Transform}) - -file(GLOB SOURCE_FILES_Physics - "${INCLUDE_PATH}/Physics/*.h" - "Physics/*.cpp" -) -source_group(Physics FILES ${SOURCE_FILES_Physics}) - -file(GLOB SOURCE_FILES_Game - "${INCLUDE_PATH}/Game/*.h" - "Game/*.cpp" -) -source_group(Game FILES ${SOURCE_FILES_Game}) -file(GLOB SOURCE_FILES_Game_GUI - "${INCLUDE_PATH}/Game/GUI/*.h" - "Game/GUI/*.cpp" -) -source_group(Game\\GUI FILES ${SOURCE_FILES_Game_GUI}) - -file(GLOB SOURCE_FILES_Sound - "${INCLUDE_PATH}/Sound/*.h" - "Sound/*.cpp" -) -source_group(Sound FILES ${SOURCE_FILES_Sound}) - -file(GLOB SOURCE_FILES_GUI - "${INCLUDE_PATH}/GUI/*.h" - "GUI/*.cpp" -) -source_group(GUI FILES ${SOURCE_FILES_GUI}) set(SOURCE_FILES ${SOURCE_FILES_Core} ${SOURCE_FILES_Core_Util} - ${SOURCE_FILES_Input} + #${SOURCE_FILES_Input} ${SOURCE_FILES_Rendering} - ${SOURCE_FILES_Transform} - ${SOURCE_FILES_Physics} - ${SOURCE_FILES_Game} - ${SOURCE_FILES_Game_GUI} - ${SOURCE_FILES_Sound} - ${SOURCE_FILES_GUI} ) set(LIBRARIES @@ -115,8 +64,8 @@ set(LIBRARIES ${Boost_LIBRARIES} ${assimp_LIBRARIES} ${PNG_LIBRARIES} - ${X11_LIBRARIES} ${OPENAL_LIBRARY} + ${X11_LIBRARIES} ) if(CMAKE_COMPILER_IS_GNUCXX) @@ -129,12 +78,3 @@ add_library(Engine ${SOURCE_FILES}) target_link_libraries(Engine ${LIBRARIES} ) - -add_executable(Game - main.cpp -) -target_link_libraries(Game - Engine - ${LIBRARIES} -) - diff --git a/src/Engine/Core/ResourceManager.cpp b/src/Engine/Core/ResourceManager.cpp index 908b341d..254cf9ee 100644 --- a/src/Engine/Core/ResourceManager.cpp +++ b/src/Engine/Core/ResourceManager.cpp @@ -20,7 +20,6 @@ unsigned int ResourceManager::GetTypeID(std::string resourceType) return m_ResourceTypeIDs[resourceType]; } - void ResourceManager::Reload(std::string resourceName) { auto it = m_ResourceFromName.find(resourceName); diff --git a/src/Game/CMakeLists.txt b/src/Game/CMakeLists.txt new file mode 100644 index 00000000..5a7d8149 --- /dev/null +++ b/src/Game/CMakeLists.txt @@ -0,0 +1,36 @@ +project(TacticalZ-Game) + +set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include) +include_directories( + ${INCLUDE_PATH}/Engine + ${INCLUDE_PATH}/Game +) + +file(GLOB SOURCE_FILES + "${INCLUDE_PATH}*.h" + "*.cpp" +) +#source_group(Core FILES ${SOURCE_FILES}) + +set(SOURCE_FILES + ${SOURCE_FILES} +) + +set(LIBRARIES + +) + +add_library(Game ${SOURCE_FILES}) +target_link_libraries(Game + Engine + ${LIBRARIES} +) + +add_executable(TacticalZ + main.cpp +) +target_link_libraries(TacticalZ + Game + ${LIBRARIES} +) + diff --git a/src/Game/.gitkeep b/src/Game/main.cpp old mode 100755 new mode 100644 similarity index 100% rename from src/Game/.gitkeep rename to src/Game/main.cpp diff --git a/src/Tests/CMakeLists.txt b/src/Tests/CMakeLists.txt index d3de28bc..306d5fdd 100644 --- a/src/Tests/CMakeLists.txt +++ b/src/Tests/CMakeLists.txt @@ -1,9 +1,12 @@ -project(Tests) +project(TacticalZ-Tests) find_package(Boost REQUIRED COMPONENTS chrono thread unit_test_framework) +set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include) include_directories( - ${CMAKE_SOURCE_DIR}/include + ${INCLUDE_PATH}/Engine + ${INCLUDE_PATH}/Game + ${INCLUDE_PATH}/Tests ${Boost_INCLUDE_DIRS} ) diff --git a/src/Tests/main.cpp b/src/Tests/main.cpp new file mode 100644 index 00000000..2c06f9b5 --- /dev/null +++ b/src/Tests/main.cpp @@ -0,0 +1,2 @@ +#define BOOST_TEST_MAIN +#include \ No newline at end of file