#include "TurnOrdering.hpp" #include "../TurnChoices/AttackTurnChoice.hpp" #include "../Models/Creature.hpp" #include "../Models/Battle.hpp" #include "../../Core/Exceptions/NotImplementedException.hpp" #include using namespace CreatureLib; using namespace Battling; bool ___ChoiceOrderFunc(const BaseTurnChoice* a, const BaseTurnChoice* b, Core::Random& rand){ auto aKind = a->GetKind(); auto bKind = b->GetKind(); if (aKind != bKind) return aKind > bKind; if (aKind == TurnChoiceKind::Attack){ auto aPriority = static_cast(a)->GetPriority(); auto bPriority = static_cast(b)->GetPriority(); if (aPriority != bPriority) return aPriority > bPriority; } auto aSpeed = a->GetUser()->GetBoostedStat(Core::Statistic::Speed); auto bSpeed = b->GetUser()->GetBoostedStat(Core::Statistic::Speed); if (aSpeed != bSpeed) return aSpeed > bSpeed; auto randomValue = rand.Get(2); return randomValue == 0; } void TurnOrdering::OrderChoices(std::vector &vec, Core::Random& rand) { auto comp = [&](const BaseTurnChoice * a,const BaseTurnChoice * b)-> bool { return ___ChoiceOrderFunc(a,b,rand); }; std::sort(vec.begin(), vec.end(), comp); }