CTeamAiMgr: Convert type into an enum class

Makes the sorting type explicit at the call site, rather than using
magic values.
This commit is contained in:
Lioncash 2020-05-19 23:49:59 -04:00
parent 96129264a3
commit 38213bae99
1 changed files with 17 additions and 10 deletions

View File

@ -10,15 +10,22 @@
namespace urde { namespace urde {
struct TeamAiRoleSorter { struct TeamAiRoleSorter {
enum class Type {
OwnerID,
Distance,
TeamAIRole,
};
zeus::CVector3f x0_pos; zeus::CVector3f x0_pos;
s32 xc_type; Type xc_type;
bool operator()(const CTeamAiRole& a, const CTeamAiRole& b) const { bool operator()(const CTeamAiRole& a, const CTeamAiRole& b) const {
float aDist = (x0_pos - a.GetTeamPosition()).magSquared(); const float aDist = (x0_pos - a.GetTeamPosition()).magSquared();
float bDist = (x0_pos - b.GetTeamPosition()).magSquared(); const float bDist = (x0_pos - b.GetTeamPosition()).magSquared();
switch (xc_type) { switch (xc_type) {
case 0: case Type::OwnerID:
return a.GetOwnerId() < b.GetOwnerId(); return a.GetOwnerId() < b.GetOwnerId();
case 1: case Type::Distance:
return aDist < bDist; return aDist < bDist;
default: default:
if (a.GetTeamAiRole() == b.GetTeamAiRole()) if (a.GetTeamAiRole() == b.GetTeamAiRole())
@ -27,7 +34,7 @@ struct TeamAiRoleSorter {
return a.GetTeamAiRole() < b.GetTeamAiRole(); return a.GetTeamAiRole() < b.GetTeamAiRole();
} }
} }
TeamAiRoleSorter(const zeus::CVector3f& pos, s32 type) : x0_pos(pos), xc_type(type) {} TeamAiRoleSorter(const zeus::CVector3f& pos, Type type) : x0_pos(pos), xc_type(type) {}
}; };
CTeamAiData::CTeamAiData(CInputStream& in, s32 propCount) CTeamAiData::CTeamAiData(CInputStream& in, s32 propCount)
@ -90,7 +97,7 @@ void CTeamAiMgr::ResetRoles(CStateManager& mgr) {
} }
void CTeamAiMgr::SpacingSort(CStateManager& mgr, const zeus::CVector3f& pos) { void CTeamAiMgr::SpacingSort(CStateManager& mgr, const zeus::CVector3f& pos) {
const TeamAiRoleSorter sorter(pos, 2); const TeamAiRoleSorter sorter(pos, TeamAiRoleSorter::Type::TeamAIRole);
std::sort(x58_roles.begin(), x58_roles.end(), sorter); std::sort(x58_roles.begin(), x58_roles.end(), sorter);
float tierStagger = 4.5f; float tierStagger = 4.5f;
for (const auto& role : x58_roles) { for (const auto& role : x58_roles) {
@ -123,7 +130,7 @@ void CTeamAiMgr::SpacingSort(CStateManager& mgr, const zeus::CVector3f& pos) {
} }
} }
} }
const TeamAiRoleSorter sorter2(pos, 0); const TeamAiRoleSorter sorter2(pos, TeamAiRoleSorter::Type::OwnerID);
std::sort(x58_roles.begin(), x58_roles.end(), sorter2); std::sort(x58_roles.begin(), x58_roles.end(), sorter2);
} }
@ -166,7 +173,7 @@ void CTeamAiMgr::UpdateRoles(CStateManager& mgr) {
ResetRoles(mgr); ResetRoles(mgr);
const zeus::CVector3f aimPos = mgr.GetPlayer().GetAimPosition(mgr, 0.f); const zeus::CVector3f aimPos = mgr.GetPlayer().GetAimPosition(mgr, 0.f);
const TeamAiRoleSorter sorter(aimPos, 1); const TeamAiRoleSorter sorter(aimPos, TeamAiRoleSorter::Type::Distance);
std::sort(x58_roles.begin(), x58_roles.end(), sorter); std::sort(x58_roles.begin(), x58_roles.end(), sorter);
AssignRoles(CTeamAiRole::ETeamAiRole::Melee, x34_data.x4_meleeCount); AssignRoles(CTeamAiRole::ETeamAiRole::Melee, x34_data.x4_meleeCount);
@ -180,7 +187,7 @@ void CTeamAiMgr::UpdateRoles(CStateManager& mgr) {
} }
} }
const TeamAiRoleSorter sorter2(aimPos, 0); const TeamAiRoleSorter sorter2(aimPos, TeamAiRoleSorter::Type::OwnerID);
std::sort(x58_roles.begin(), x58_roles.end(), sorter2); std::sort(x58_roles.begin(), x58_roles.end(), sorter2);
x88_timeDirty = 0.f; x88_timeDirty = 0.f;
} }