diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ebb9f2..4f5bc89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,6 +147,12 @@ add_library(Engine STATIC 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 ) target_include_directories(Engine PUBLIC engine/src) target_link_libraries(Engine PUBLIC OpenGL::GL glfw glad glm::glm imgui spdlog::spdlog tinyobjloader stb_image) diff --git a/engine/src/game/GameMode.cpp b/engine/src/game/GameMode.cpp new file mode 100644 index 0000000..71929bf --- /dev/null +++ b/engine/src/game/GameMode.cpp @@ -0,0 +1,5 @@ +// +// Created by sebastian on 02.08.26. +// + +#include "GameMode.h" diff --git a/engine/src/game/GameMode.h b/engine/src/game/GameMode.h new file mode 100644 index 0000000..24bf16e --- /dev/null +++ b/engine/src/game/GameMode.h @@ -0,0 +1,28 @@ +// +// Created by sebastian on 02.08.26. +// + +#ifndef COLORRACE_GAMEMODE_H +#define COLORRACE_GAMEMODE_H +#include +#include + +#include "GameState.h" + + +namespace engine { + template + class GameMode { + public: + static_assert(std::is_base_of_v, "State must be derived from GameState"); + + virtual ~GameMode() = default; + + virtual void sendCommand(const Command& command) = 0; + virtual std::vector pollEvents() = 0; + [[nodiscard]] virtual const State& getState() const = 0; + }; +} + + +#endif //COLORRACE_GAMEMODE_H diff --git a/engine/src/game/GameState.cpp b/engine/src/game/GameState.cpp new file mode 100644 index 0000000..4e9951c --- /dev/null +++ b/engine/src/game/GameState.cpp @@ -0,0 +1,5 @@ +// +// Created by sebastian on 02.08.26. +// + +#include "GameState.h" diff --git a/engine/src/game/GameState.h b/engine/src/game/GameState.h new file mode 100644 index 0000000..354d3b1 --- /dev/null +++ b/engine/src/game/GameState.h @@ -0,0 +1,17 @@ +// +// Created by sebastian on 02.08.26. +// + +#ifndef COLORRACE_GAMESTATE_H +#define COLORRACE_GAMESTATE_H + + +namespace engine { + class GameState { + public: + virtual ~GameState() = default; + }; + + +} +#endif //COLORRACE_GAMESTATE_H diff --git a/engine/src/game/TurnBasedGameMode.cpp b/engine/src/game/TurnBasedGameMode.cpp new file mode 100644 index 0000000..58f1cc7 --- /dev/null +++ b/engine/src/game/TurnBasedGameMode.cpp @@ -0,0 +1,5 @@ +// +// Created by sebastian on 02.08.26. +// + +#include "TurnBasedGameMode.h" diff --git a/engine/src/game/TurnBasedGameMode.h b/engine/src/game/TurnBasedGameMode.h new file mode 100644 index 0000000..443fbb5 --- /dev/null +++ b/engine/src/game/TurnBasedGameMode.h @@ -0,0 +1,31 @@ +// +// Created by sebastian on 02.08.26. +// + +#ifndef COLORRACE_TURNBASEDGAMEMODE_H +#define COLORRACE_TURNBASEDGAMEMODE_H +#include + +#include "GameMode.h" + + +namespace engine { + using PlayerID = uint32_t; + + template + class TurnBasedGameMode : public GameMode { + public: + explicit TurnBasedGameMode(std::vector playerOrder) : m_playerOrder(std::move(playerOrder)) {} + [[nodiscard]] PlayerID getCurrentPlayer() const { return m_playerOrder[m_currentPlayerIndex]; } + [[nodiscard]] bool isCurrentPlayer(PlayerID playerID) const { return getCurrentPlayer() == playerID; } + protected: + void endTurn(bool extraTurn = false) { + if (!extraTurn) m_currentPlayerIndex = (m_currentPlayerIndex + 1) % m_playerOrder.size(); + } + private: + std::vector m_playerOrder; + size_t m_currentPlayerIndex = 0; + }; +} + +#endif //COLORRACE_TURNBASEDGAMEMODE_H