83 lines
2.1 KiB
C++
83 lines
2.1 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);
|
|
}
|
|
|
|
|