Files
CreatureLib/src/Battling/Models/CreatureParty.hpp
Deukhoofd 8f921ce89b
All checks were successful
continuous-integration/drone/push Build is passing
Add support for swapping in and out of a party.
2020-07-25 14:35:13 +02:00

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