2019-10-31 11:02:23 +00:00
|
|
|
#include "TurnOrdering.hpp"
|
|
|
|
#include <algorithm>
|
2019-11-28 11:55:22 +00:00
|
|
|
#include "../Models/Battle.hpp"
|
|
|
|
#include "../TurnChoices/AttackTurnChoice.hpp"
|
2019-10-31 11:02:23 +00:00
|
|
|
|
2019-10-31 11:31:31 +00:00
|
|
|
using namespace CreatureLib;
|
|
|
|
using namespace Battling;
|
2019-10-31 11:02:23 +00:00
|
|
|
|
2020-02-26 12:51:16 +00:00
|
|
|
bool ___ChoiceOrderFunc(const BaseTurnChoice* a, const BaseTurnChoice* b, Arbutils::Random& rand) {
|
2019-10-31 11:02:23 +00:00
|
|
|
auto aKind = a->GetKind();
|
|
|
|
auto bKind = b->GetKind();
|
|
|
|
if (aKind != bKind)
|
|
|
|
return aKind > bKind;
|
2019-11-28 11:55:22 +00:00
|
|
|
if (aKind == TurnChoiceKind::Attack) {
|
2019-11-10 16:08:42 +00:00
|
|
|
auto aPriority = dynamic_cast<const AttackTurnChoice*>(a)->GetPriority();
|
|
|
|
auto bPriority = dynamic_cast<const AttackTurnChoice*>(b)->GetPriority();
|
2019-10-31 11:31:31 +00:00
|
|
|
if (aPriority != bPriority)
|
|
|
|
return aPriority > bPriority;
|
|
|
|
}
|
2020-03-22 09:11:53 +00:00
|
|
|
auto aSpeed = a->GetUser()->GetBoostedStat(Library::Statistic::Speed);
|
|
|
|
auto bSpeed = b->GetUser()->GetBoostedStat(Library::Statistic::Speed);
|
2019-10-31 11:31:31 +00:00
|
|
|
if (aSpeed != bSpeed)
|
|
|
|
return aSpeed > bSpeed;
|
|
|
|
|
|
|
|
auto randomValue = rand.Get(2);
|
|
|
|
return randomValue == 0;
|
2019-10-31 11:02:23 +00:00
|
|
|
}
|
|
|
|
|
2020-02-26 12:51:16 +00:00
|
|
|
void TurnOrdering::OrderChoices(std::vector<BaseTurnChoice*>& vec, Arbutils::Random& rand) {
|
2019-11-28 11:55:22 +00:00
|
|
|
auto comp = [&](const BaseTurnChoice* a, const BaseTurnChoice* b) -> bool {
|
|
|
|
return ___ChoiceOrderFunc(a, b, rand);
|
2019-10-31 11:31:31 +00:00
|
|
|
};
|
|
|
|
std::sort(vec.begin(), vec.end(), comp);
|
2019-10-31 11:02:23 +00:00
|
|
|
}
|