#include "ChoiceQueue.hpp" #include bool CreatureLib::Battling::ChoiceQueue::MoveCreatureChoiceNext(CreatureLib::Battling::Creature* creature) { AssertNotNull(creature) // Find which index the creature choice is at. size_t choiceIndex = SIZE_MAX; 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. if (choiceIndex == SIZE_MAX) return false; 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. vec[i + 1] = vec[i]; } // Set the creature choice up next. vec[_current] = creatureChoice.GetRaw(); return true; }