// // Created by sebastian on 08.02.26. // #include "GameMode.h" #include #include #include "player/Player.h" GameMode::GameMode() { addPlayer(0, "Player 1"); addPlayer(1, "Player 2"); } bool GameMode::canBuild(PlayerID player, BuildingType buildingType) { int woodCost = 10; if (!players[player].getInventory()->hasEnough(RessourceType::WOOD, woodCost)) { std::cout << "Not enough wood" << std::endl; return false; } return true; } bool GameMode::canAfford(const PlayerID player_id, RessourceType ressource, int amount) const { if (players.contains(player_id)) { return players.at(player_id).getInventory()->getAmount(ressource) >= amount; } return false; } void GameMode::build(PlayerID player, EntityID tileEntity, BuildingType buildingType) { if (canBuild(player, buildingType)) { players[player].getInventory()->spend(RessourceType::WOOD, 10); } } void GameMode::addPlayer(PlayerID playerID, std::string name) { PlayerID id = static_cast(players.size()); players[id] = Player(id, name); } PlayerID GameMode::getCurrentPlayer() { return 0; } PlayerInventory& GameMode::getPlayerInventory(PlayerID playerID) { return *players[playerID].getInventory(); } void GameMode::pay(PlayerID playerID, const std::unordered_map &costs) { for (const auto &[resourceType, amount] : costs) { players[playerID].getInventory()->spend(resourceType, amount); } } std::optional GameMode::getActiveBuilding() const { return activeBuilding; } void GameMode::clearActiveBuilding() { activeBuilding = std::nullopt; } void GameMode::setActiveBuilding(BuildingType buildingType) { activeBuilding = buildingType; } size_t GameMode::getPlayerCount() const { return players.size(); } bool GameMode::hasTurn(PlayerID playerID, int turn) const { return turn % static_cast(getPlayerCount()) == static_cast(playerID); } void GameMode::addResource(PlayerID playerID, RessourceType ressource, int amount) { players[playerID].getInventory()->add(ressource, amount); } glm::vec3 GameMode::getColorOfPlayer(PlayerID playerID) { return players[playerID].getColor(); }