51 lines
1.6 KiB
C++
51 lines
1.6 KiB
C++
#ifndef CREATURELIB_CREATUREPARTY_HPP
|
|
#define CREATURELIB_CREATUREPARTY_HPP
|
|
|
|
#include <Arbutils/Collections/List.hpp>
|
|
#include "Creature.hpp"
|
|
|
|
namespace CreatureLib::Battling {
|
|
class CreatureParty {
|
|
ArbUt::UniquePtrList<Creature> _party;
|
|
|
|
public:
|
|
CreatureParty(size_t size) noexcept : _party(size) {}
|
|
CreatureParty(ArbUt::List<Creature*> party) noexcept : _party(party.GetStdList()) {}
|
|
CreatureParty(std::initializer_list<Creature*> party) noexcept : _party(party) {}
|
|
|
|
virtual ~CreatureParty() = default;
|
|
|
|
ArbUt::BorrowedPtr<Creature> 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<Creature>& GetParty() noexcept { return _party; }
|
|
const ArbUt::UniquePtrList<Creature>& GetParty() const noexcept { return _party; }
|
|
|
|
size_t GetLength() const noexcept { return _party.Count(); }
|
|
};
|
|
}
|
|
|
|
#endif // CREATURELIB_CREATUREPARTY_HPP
|