diff --git a/src/game/GameLayer.cpp b/src/game/GameLayer.cpp index f8c04af..ba942c8 100644 --- a/src/game/GameLayer.cpp +++ b/src/game/GameLayer.cpp @@ -73,7 +73,6 @@ void GameLayer::onDetach() void GameLayer::onUpdate() { - PlayerID player = gameMode->getCurrentPlayer(); mousePicker->update(*camera); //printf("Mouse Ray: %f, %f, %f\n", mousePicker->getCurrentRay().x, mousePicker->getCurrentRay().y, mousePicker->getCurrentRay().z); glm::vec3 moveDir = glm::vec3(0,0,0); @@ -95,7 +94,7 @@ void GameLayer::onUpdate() camera->move(moveDir, 0.5f); tileHighlightSystem->update(*entityManager, *mousePicker, *camera); - buildingPlacementSystem->update(*entityManager, *gameMode, 0); + buildingPlacementSystem->update(*entityManager, *gameMode, 0, *turnState); renderSystem->render(*entityManager, *renderer); renderer->render(*light, *camera); diff --git a/src/game/GameMode.cpp b/src/game/GameMode.cpp index ab3e2ce..c44a3e5 100644 --- a/src/game/GameMode.cpp +++ b/src/game/GameMode.cpp @@ -11,6 +11,7 @@ GameMode::GameMode() { addPlayer(0, "Player 1"); + addPlayer(1, "Player 2"); } bool GameMode::canBuild(PlayerID player, BuildingType buildingType) { @@ -66,4 +67,13 @@ void GameMode::setActiveBuilding(BuildingType buildingType) { activeBuilding = buildingType; } +size_t GameMode::getPlayerCount() const { + return players.size(); +} + +bool GameMode::hasTurn(PlayerID playerID, int turn) const { + printf("Turn: %d, PlayerCount: %lu, playerID: %u\n, Modulo Result: %lu", turn, getPlayerCount(), playerID, turn % getPlayerCount()); + return turn % static_cast(getPlayerCount()) == static_cast(playerID); +} + diff --git a/src/game/GameMode.h b/src/game/GameMode.h index 3f84ba7..9819dea 100644 --- a/src/game/GameMode.h +++ b/src/game/GameMode.h @@ -29,6 +29,11 @@ public: std::optional getActiveBuilding() const; void clearActiveBuilding(); void setActiveBuilding(BuildingType buildingType); + size_t getPlayerCount() const; + + bool hasTurn(PlayerID playerID, int turn) const; + + bool getCurrentTurnPlayer(int turn) const; private: std::unordered_map players; std::optional activeBuilding; diff --git a/src/game/hexWorld/ecs/systems/BuildingPlacementSystem.cpp b/src/game/hexWorld/ecs/systems/BuildingPlacementSystem.cpp index 442149a..5d4dcfa 100644 --- a/src/game/hexWorld/ecs/systems/BuildingPlacementSystem.cpp +++ b/src/game/hexWorld/ecs/systems/BuildingPlacementSystem.cpp @@ -14,11 +14,16 @@ #include "../../building/BuildingConfig.h" #include "../../building/BuildingFactory.h" #include "../../building/BuildingRules.h" +#include "../../gameplay/TurnState.h" #include "../components/BuildingComponent.h" #include "../components/TileGameplayComponent.h" #include "GLFW/glfw3.h" -void BuildingPlacementSystem::update(EntityManager& entityManager, GameMode& gameMode, PlayerID player) { +void BuildingPlacementSystem::update(EntityManager& entityManager, GameMode& gameMode, PlayerID player, const TurnState& turnState) { + if (!gameMode.hasTurn(player, turnState.currentTurn)) { + return; + } + if (!InputManager::isMouseButtonPressed(GLFW_MOUSE_BUTTON_LEFT)) { return; } diff --git a/src/game/hexWorld/ecs/systems/BuildingPlacementSystem.h b/src/game/hexWorld/ecs/systems/BuildingPlacementSystem.h index 88edc85..e64b845 100644 --- a/src/game/hexWorld/ecs/systems/BuildingPlacementSystem.h +++ b/src/game/hexWorld/ecs/systems/BuildingPlacementSystem.h @@ -6,11 +6,12 @@ #define BUILDINGPLACEMENTSYSTEM_H #include "../../../GameMode.h" #include "../../../../engine/core/ECS/EntityManager.h" +#include "../../gameplay/TurnState.h" class BuildingPlacementSystem { public: - void update(EntityManager &entityManager, GameMode &gameMode, EntityID player); + void update(EntityManager &entityManager, GameMode &gameMode, EntityID player, const TurnState &turnState); };