CreatureLib/src/Battling/Flow/TurnOrdering.cpp
Deukhoofd fc675efdf5
All checks were successful
continuous-integration/drone/push Build is passing
More work on basic turn layout.
2019-11-02 13:57:43 +01:00

38 lines
1.3 KiB
C++

#include "TurnOrdering.hpp"
#include "../TurnChoices/AttackTurnChoice.hpp"
#include "../Models/Creature.hpp"
#include "../Models/Battle.hpp"
#include "../../Core/Exceptions/NotImplementedException.hpp"
#include <algorithm>
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<const AttackTurnChoice*>(a)->GetPriority();
auto bPriority = static_cast<const AttackTurnChoice*>(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<const BaseTurnChoice *> &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);
}