#include "TurnOrdering.hpp" #include #include "../Models/Battle.hpp" #include "../TurnChoices/AttackTurnChoice.hpp" 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 = dynamic_cast(a)->GetPriority(); auto bPriority = dynamic_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); }