#ifndef CREATURELIB_CREATUREPARTY_HPP #define CREATURELIB_CREATUREPARTY_HPP #include #include "Creature.hpp" namespace CreatureLib::Battling { class CreatureParty { ArbUt::UniquePtrList _party; public: CreatureParty(size_t size) noexcept : _party(size) {} CreatureParty(ArbUt::List party) noexcept : _party(party.GetStdList()) {} CreatureParty(std::initializer_list party) noexcept : _party(party) {} virtual ~CreatureParty() = default; ArbUt::BorrowedPtr GetAtIndex(size_t index) const noexcept { return _party[index]; } void Switch(size_t a, size_t b) noexcept { auto ca = _party[a]; _party[a] = _party[b]; _party[b] = ca; } Creature* SwapInto(size_t index, Creature* creature) { auto p = _party.TakeOwnership(index); _party.Set(index, creature); return p; } bool HasAvailableCreatures() const noexcept { for (Creature* c : _party) { if (c == nullptr) continue; if (c->IsFainted()) continue; return true; } return false; } ArbUt::UniquePtrList& GetParty() noexcept { return _party; } const ArbUt::UniquePtrList& GetParty() const noexcept { return _party; } size_t GetLength() const noexcept { return _party.Count(); } }; } #endif // CREATURELIB_CREATUREPARTY_HPP