CreatureLib/src/Battling/Flow/ChoiceQueue.cpp

32 lines
1.2 KiB
C++
Raw Normal View History

#include "ChoiceQueue.hpp"
2020-03-22 12:42:26 +00:00
#include <Arbutils/Assert.hpp>
bool CreatureLib::Battling::ChoiceQueue::MoveCreatureChoiceNext(CreatureLib::Battling::Creature* creature) {
2020-03-22 12:42:26 +00:00
AssertNotNull(creature)
// Find which index the creature choice is at.
2020-02-22 14:11:18 +00:00
size_t choiceIndex = SIZE_MAX;
2020-05-31 16:00:39 +00:00
for (size_t index = _current; index < _queue.Count(); index++) {
if (_queue.At(index)->GetUser() == creature) {
// If the creature choice is already next up, return.
if (index == _current)
return false;
choiceIndex = index;
}
}
// If the creature has no choice anymore, return.
2020-02-22 14:11:18 +00:00
if (choiceIndex == SIZE_MAX)
return false;
2020-05-31 16:00:39 +00:00
auto& vec = _queue.GetStdList();
// Save the pointer to the creature choice.
auto creatureChoice = _queue[choiceIndex];
// Starting at the position before the current creature choice, and iterating backwards up till the current choice.
for (size_t i = choiceIndex - 1; i >= _current && i != SIZE_MAX; i--) {
// Place everything in one spot later.
2020-05-31 16:00:39 +00:00
vec[i + 1] = vec[i];
}
// Set the creature choice up next.
2020-05-31 16:00:39 +00:00
vec[_current] = creatureChoice.GetRaw();
return true;
}