#include "BattleSide.hpp" #include #include "../../Library/Exceptions/CreatureException.hpp" #include "Battle.hpp" using namespace CreatureLib::Battling; bool BattleSide::AllChoicesSet() const { return _choicesSet == _creaturesPerSide; } bool BattleSide::AllPossibleSlotsFilled() const { for (size_t i = 0; i < _creatures.size(); i++) { auto c = _creatures[i]; if (c == nullptr || c->IsFainted()) { if (_battle->CanSlotBeFilled(_index, i)) return false; } } return true; } void BattleSide::ResetChoices() { _choicesSet = 0; for (uint8_t i = 0; i < _creaturesPerSide; i++) { _choices[i] = nullptr; } } const std::vector& BattleSide::GetChoices() const { return _choices; } void BattleSide::SetChoice(BaseTurnChoice* choice) { auto find = std::find(_creatures.begin(), _creatures.end(), choice->GetUser()); if (find == _creatures.end()) throw CreatureException("User not found"); uint8_t index = std::distance(_creatures.begin(), find); _choices[index] = choice; _choicesSet++; } void BattleSide::SetCreature(Creature* creature, uint8_t index) { auto old = _creatures[index]; if (old != nullptr) { old->SetOnBattleField(false); } _creatures[index] = creature; creature->SetBattleData(_battle, this); creature->SetOnBattleField(true); if (_battle == nullptr) return; for (auto side : _battle->GetSides()) { if (side == this) continue; for (auto c : side->GetCreatures()) { if (c != nullptr) { c->MarkOpponentAsSeen(creature); creature->MarkOpponentAsSeen(c); } } } } bool BattleSide::CreatureOnSide(const Creature* creature) const { return std::find(_creatures.begin(), _creatures.end(), creature) != _creatures.end(); } Creature* BattleSide::GetCreature(uint8_t index) const { return _creatures[index]; } void BattleSide::GetActiveScripts(std::vector& scripts) { scripts.emplace_back(&_volatile); _battle->GetActiveScripts(scripts); }