#ifndef CREATURELIB_BATTLEPARTY_HPP #define CREATURELIB_BATTLEPARTY_HPP #include "CreatureIndex.hpp" #include "CreatureParty.hpp" namespace CreatureLib::Battling { class BattleParty { ArbUt::BorrowedPtr _party; ArbUt::List _responsibleIndices; public: BattleParty(CreatureParty* party, const ArbUt::List& responsibleIndices) : _party(party), _responsibleIndices(responsibleIndices) {} inline const ArbUt::BorrowedPtr& GetParty() const { return _party; } inline const ArbUt::List& GetResponsibleIndices() const { return _responsibleIndices; } inline bool IsResponsibleForIndex(const CreatureIndex& index) const { return _responsibleIndices.Contains(index); } inline bool IsResponsibleForIndex(uint8_t side, uint8_t index) const { return std::any_of(_responsibleIndices.begin(), _responsibleIndices.end(), [side, index](const CreatureIndex& ci) { return ci.GetSideIndex() == side && ci.GetCreatureIndex() == index; }); } inline bool HasCreaturesNotInField() const { const auto& p = _party->GetParty(); for (const auto& creature : p) { if (creature == nullptr) continue; if (creature->IsFainted()) continue; if (creature->IsOnBattleField()) continue; return true; } return false; } }; } #endif // CREATURELIB_BATTLEPARTY_HPP