CreatureLib/src/Battling/Flow/ChoiceQueue.hpp

36 lines
991 B
C++
Raw Normal View History

#ifndef CREATURELIB_CHOICEQUEUE_HPP
#define CREATURELIB_CHOICEQUEUE_HPP
2020-05-31 16:00:39 +00:00
#include <Arbutils/Memory/UniquePtrList.hpp>
#include <utility>
#include <vector>
#include "../TurnChoices/BaseTurnChoice.hpp"
namespace CreatureLib::Battling {
class ChoiceQueue {
2020-05-31 16:00:39 +00:00
ArbUt::UniquePtrList<BaseTurnChoice> _queue;
size_t _current = 0;
public:
bool HasCompletedQueue = false;
explicit ChoiceQueue(std::vector<BaseTurnChoice*> queue) : _queue(std::move(queue)) {}
2020-05-31 16:00:39 +00:00
ArbUt::BorrowedPtr<BaseTurnChoice> Dequeue() {
auto b = _queue[_current];
_current++;
return b;
}
2020-05-31 16:00:39 +00:00
ArbUt::BorrowedPtr<BaseTurnChoice> Peek() { return _queue[_current]; }
2020-05-31 16:00:39 +00:00
[[nodiscard]] bool HasNext() const { return _current < _queue.Count(); }
2020-05-31 16:00:39 +00:00
ArbUt::UniquePtrList<BaseTurnChoice>& GetInnerQueue() { return _queue; }
bool MoveCreatureChoiceNext(Creature* creature);
};
}
#endif // CREATURELIB_CHOICEQUEUE_HPP