Dicewars-Siedler/src/game/GameMode.cpp
2026-02-14 20:52:30 +01:00

87 lines
2.2 KiB
C++

//
// Created by sebastian on 08.02.26.
//
#include "GameMode.h"
#include <iostream>
#include <bits/ostream.tcc>
#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<PlayerID>(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<RessourceType, int> &costs) {
for (const auto &[resourceType, amount] : costs) {
players[playerID].getInventory()->spend(resourceType, amount);
}
}
std::optional<BuildingType> 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<int>(getPlayerCount()) == static_cast<int>(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();
}