cmake_minimum_required(VERSION 4.2) project(ColorRace) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) # --- CPM.cmake Bootstrap --- set(CPM_DOWNLOAD_VERSION 0.40.2) set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake") if(NOT EXISTS ${CPM_DOWNLOAD_LOCATION}) file(DOWNLOAD https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake ${CPM_DOWNLOAD_LOCATION} ) endif() include(${CPM_DOWNLOAD_LOCATION}) # --- OpenGL (systemseitig, kein CPM nötig) --- find_package(OpenGL REQUIRED) # --- GLFW --- CPMAddPackage( NAME glfw GITHUB_REPOSITORY glfw/glfw GIT_TAG 3.4 OPTIONS "GLFW_BUILD_EXAMPLES OFF" "GLFW_BUILD_TESTS OFF" "GLFW_BUILD_DOCS OFF" "GLFW_INSTALL OFF" ) # --- GLM (header-only) --- CPMAddPackage( NAME glm GITHUB_REPOSITORY g-truc/glm GIT_TAG 1.0.1 ) # --- tinyobjloader --- CPMAddPackage( NAME tinyobjloader GITHUB_REPOSITORY tinyobjloader/tinyobjloader GIT_TAG v2.0.0rc13 ) # --- stb_image (kein CMake-Projekt, nur Header) --- CPMAddPackage( NAME stb GITHUB_REPOSITORY nothings/stb GIT_TAG master DOWNLOAD_ONLY YES ) add_library(stb_image STATIC third_party/stb_image_impl.cpp) target_include_directories(stb_image PUBLIC ${stb_SOURCE_DIR}) # --- Dear ImGui (Core + GLFW/OpenGL3 Backend) --- CPMAddPackage( NAME imgui GITHUB_REPOSITORY ocornut/imgui GIT_TAG v1.91.5 DOWNLOAD_ONLY YES ) CPMAddPackage( NAME spdlog GITHUB_REPOSITORY gabime/spdlog GIT_TAG v1.15.3 ) # --- GoogleTest --- CPMAddPackage( NAME googletest GITHUB_REPOSITORY google/googletest GIT_TAG v1.15.2 OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt ON" ) enable_testing() add_library(imgui STATIC ${imgui_SOURCE_DIR}/imgui.cpp ${imgui_SOURCE_DIR}/imgui_draw.cpp ${imgui_SOURCE_DIR}/imgui_tables.cpp ${imgui_SOURCE_DIR}/imgui_widgets.cpp ${imgui_SOURCE_DIR}/imgui_demo.cpp ${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp ${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp ) target_include_directories(imgui PUBLIC ${imgui_SOURCE_DIR} ${imgui_SOURCE_DIR}/backends) target_link_libraries(imgui PUBLIC glfw glad) # --- GLAD (manuell generiert, siehe README/Hinweis unten) --- add_library(glad STATIC third_party/glad/src/glad.c) target_include_directories(glad PUBLIC third_party/glad/include) # --- OpenAL-Soft --- CPMAddPackage( NAME openal-soft GITHUB_REPOSITORY kcat/openal-soft GIT_TAG 1.24.3 OPTIONS "LIBTYPE STATIC" "ALSOFT_UTILS OFF" "ALSOFT_EXAMPLES OFF" "ALSOFT_TESTS OFF" "ALSOFT_INSTALL OFF" ) # --- dr_libs (dr_wav.h, dr_mp3.h – header-only) --- CPMAddPackage( NAME dr_libs GITHUB_REPOSITORY mackron/dr_libs GIT_TAG master DOWNLOAD_ONLY YES ) message(STATUS "dr_libs_SOURCE_DIR = ${dr_libs_SOURCE_DIR}") # Engine als statische Lib add_library(Engine STATIC engine/src/core/Window.h engine/src/core/Window.cpp engine/src/core/Application.cpp engine/src/core/Application.h engine/src/core/EngineConfig.h engine/src/utils/openglWrapper/GLStateCache.cpp engine/src/utils/openglWrapper/GLStateCache.h engine/src/utils/openglWrapper/GLRenderState.cpp engine/src/utils/openglWrapper/GLRenderState.h engine/src/utils/openglWrapper/openglObjects/Attribute.cpp engine/src/utils/openglWrapper/openglObjects/Attribute.h engine/src/utils/openglWrapper/openglObjects/Vbo.cpp engine/src/utils/openglWrapper/openglObjects/Vbo.h engine/src/utils/openglWrapper/openglObjects/Vao.cpp engine/src/utils/openglWrapper/openglObjects/Vao.h engine/src/utils/openglWrapper/shader/ShaderProgram.cpp engine/src/utils/openglWrapper/shader/ShaderProgram.h engine/src/renderer/primitives/SphereFactory.cpp engine/src/renderer/primitives/SphereFactory.h engine/src/utils/openglWrapper/shader/Uniform.cpp engine/src/utils/openglWrapper/shader/Uniform.h engine/src/utils/openglWrapper/shader/UniformValue.cpp engine/src/utils/openglWrapper/shader/UniformValue.h engine/src/layer/Scene.cpp engine/src/layer/Scene.h engine/src/loader/AssetLoader.cpp engine/src/loader/AssetLoader.h engine/src/loader/assets/AssetTypes.h engine/src/loader/assets/AssetRequests.h engine/src/loader/assets/AssetRequests.cpp engine/src/loader/assets/RawAssetData.h engine/src/loader/assets/AssetFormatters.h engine/src/loader/textures/TextureUploader.cpp engine/src/loader/textures/TextureUploader.h engine/src/loader/textures/TextureImporter.cpp engine/src/loader/textures/TextureImporter.h engine/src/loader/textures/Texture2D.cpp engine/src/loader/textures/Texture2D.h engine/src/loader/models/ModelImporter.cpp engine/src/loader/models/ModelImporter.h engine/src/loader/models/ModelUploader.cpp engine/src/loader/models/ModelUploader.h engine/src/loader/models/Material.cpp engine/src/loader/models/Material.h engine/src/loader/assets/LoadedAssets.h engine/src/loader/models/Model.cpp engine/src/loader/models/Model.h engine/src/loader/models/MeshSection.cpp engine/src/loader/models/MeshSection.h engine/src/loader/assets/AssetManager.cpp engine/src/loader/assets/AssetManager.h engine/src/renderer/entities/PointLight.cpp engine/src/renderer/entities/PointLight.h engine/src/core/inputsOutputs/inputs/MouseButton.h engine/src/core/inputsOutputs/inputs/Mouse.cpp engine/src/core/inputsOutputs/inputs/Mouse.h engine/src/core/inputsOutputs/inputs/Keyboard.cpp engine/src/core/inputsOutputs/inputs/Keyboard.h engine/src/core/inputsOutputs/context/InputContextStack.cpp engine/src/core/inputsOutputs/context/InputContextStack.h engine/src/core/inputsOutputs/controller/CameraController.cpp engine/src/core/inputsOutputs/controller/CameraController.h engine/src/game/GameState.cpp engine/src/game/GameState.h engine/src/game/GameMode.cpp engine/src/game/GameMode.h engine/src/game/TurnBasedGameMode.cpp engine/src/game/TurnBasedGameMode.h engine/src/ecs/standardComponents/PickableComponent.h engine/src/ecs/systems/PickingSystem.cpp engine/src/ecs/systems/PickingSystem.h engine/src/ui/ImGuiContext.cpp engine/src/ui/ImGuiContext.h engine/src/renderer/shader/BoundingDebugShader.cpp engine/src/renderer/shader/BoundingDebugShader.h engine/src/renderer/DebugRenderer.cpp engine/src/renderer/DebugRenderer.h engine/src/layer/DebugLayer.cpp engine/src/layer/DebugLayer.h engine/src/loader/models/AABB.cpp engine/src/loader/models/AABB.h engine/src/loader/models/Ray.h engine/src/ecs/standardComponents/HighlightComponent.h third_party/audio_impl.cpp engine/src/core/audio/AudioDevice.cpp engine/src/core/audio/AudioDevice.h engine/src/core/audio/SoundBuffer.cpp engine/src/core/audio/SoundBuffer.h engine/src/core/audio/SoundSource.cpp engine/src/core/audio/SoundSource.h engine/src/loader/sounds/SoundUploader.cpp engine/src/loader/sounds/SoundUploader.h engine/src/core/animation/components/TransformAnimationComponent.h engine/src/core/animation/AnimationSystem.cpp engine/src/core/animation/AnimationSystem.h engine/src/renderer/shader/StaticShader.cpp engine/src/renderer/shader/StaticShader.h engine/src/renderer/entities/Camera.cpp engine/src/renderer/entities/Camera.h engine/src/ecs/EntityRegistry.cpp engine/src/ecs/EntityRegistry.h engine/src/ecs/Entity.cpp engine/src/ecs/Entity.h engine/src/ecs/ComponentPool.cpp engine/src/ecs/ComponentPool.h engine/src/ecs/standardComponents/TransformComponent.h engine/src/ecs/standardComponents/MeshComponent.h engine/src/ecs/EntitySystem.cpp engine/src/ecs/EntitySystem.h engine/src/renderer/RenderSystem.cpp engine/src/renderer/RenderSystem.h engine/src/renderer/RenderQueue.cpp engine/src/renderer/RenderQueue.h engine/src/renderer/MeshRenderSystem.cpp engine/src/renderer/MeshRenderSystem.h engine/src/renderer/MeshRenderer.cpp engine/src/renderer/MeshRenderer.h engine/src/layer/Layer.cpp engine/src/layer/Layer.h engine/src/core/inputsOutputs/context/InputContext.cpp engine/src/core/inputsOutputs/context/InputContext.h engine/src/layer/SceneManager.cpp engine/src/layer/SceneManager.h engine/src/core/events/EventBus.cpp engine/src/core/events/EventBus.h engine/src/core/audio/ecs/PlaySoundComponent.h engine/src/core/animation/events/AnimationMarkerEvent.h ) target_include_directories(Engine PUBLIC engine/src ${dr_libs_SOURCE_DIR}) target_link_libraries(Engine PUBLIC OpenGL::GL glfw glad glm::glm imgui spdlog::spdlog tinyobjloader stb_image OpenAL::OpenAL) # --- GameLib: Spiel-Logik, unabhängig von main.cpp testbar --- add_library(GameLib STATIC game/src/ColorRaceApp.cpp game/src/ColorRaceApp.h game/src/GameLayer.cpp game/src/GameLayer.h game/src/GameScene.cpp game/src/GameScene.h game/src/ludo/LudoGameState.cpp game/src/ludo/LudoGameState.h game/src/ludo/LudoTypes.h game/src/ludo/LudoGameMode.cpp game/src/ludo/LudoGameMode.h game/src/ludo/BoardLayout.cpp game/src/ludo/BoardLayout.h game/src/ludo/PiecePresenter.cpp game/src/ludo/PiecePresenter.h game/src/ludo/LudoAiController.cpp game/src/ludo/LudoAiController.h game/src/ludo/ecs/highlight/HighlightSystem.cpp game/src/ludo/ecs/highlight/HighlightSystem.h game/src/AudioLayer.cpp game/src/AudioLayer.h game/src/ludo/DiceSource.cpp game/src/ludo/DiceSource.h ) target_include_directories(GameLib PUBLIC game/src) target_link_libraries(GameLib PUBLIC Engine) # --- Executable --- add_executable(ColorRace game/src/main.cpp engine/src/core/animation/components/BlockingAnimationComponent.h engine/src/core/audio/ecs/AudioSystem.cpp engine/src/core/audio/ecs/AudioSystem.h engine/src/core/audio/ecs/BlockingSoundComponent.h ) target_link_libraries(ColorRace PRIVATE Engine GameLib ) # --- Tests --- add_executable(ColorRaceTests tests/LoduGameMode.cpp tests/helpers/SequenceDiceSource.cpp tests/helpers/SequenceDiceSource.h ) target_link_libraries(ColorRaceTests PRIVATE GameLib GTest::gtest GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(ColorRaceTests)