CFireFlea: Unindent FindSafeRoute()

Makes the function much nicer to follow by using guard clauses to
unindent the code.
This commit is contained in:
Lioncash 2020-04-05 05:36:25 -04:00
parent 99c564cfe4
commit 8808a3a324
1 changed files with 39 additions and 38 deletions

View File

@ -129,45 +129,46 @@ void CFireFlea::TargetPatrol(CStateManager& mgr, EStateMsg msg, float arg) {
}
zeus::CVector3f CFireFlea::FindSafeRoute(CStateManager& mgr, const zeus::CVector3f& forward) {
float mag = forward.magnitude();
if (mag > 0.f) {
CRayCastResult res = mgr.RayStaticIntersection(GetTranslation(), forward.normalized(), 1.f,
CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res.IsValid() || CheckNearWater(mgr, forward.normalized())) {
zeus::CVector3f right = forward.normalized().cross(zeus::skUp).normalized();
CRayCastResult res1 = mgr.RayStaticIntersection(GetTranslation(), right, 1.f,
CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res1.IsValid()) {
zeus::CVector3f left = -right;
CRayCastResult res2 = mgr.RayStaticIntersection(GetTranslation(), left, 1.f,
CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res2.IsValid()) {
zeus::CVector3f up = right.cross(forward.normalized());
CRayCastResult res3 = mgr.RayStaticIntersection(GetTranslation(), up, 1.f,
CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res3.IsValid()) {
zeus::CVector3f down = -up;
CRayCastResult res4 = mgr.RayStaticIntersection(GetTranslation(), down, 1.f,
CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res4.IsInvalid()) {
return mag * down;
} else {
return -forward;
}
} else {
return mag * up;
}
} else {
return mag * left;
}
} else {
return mag * right;
}
} else {
return forward;
}
const float mag = forward.magnitude();
if (mag <= 0.f) {
return {};
}
return {};
const CRayCastResult res = mgr.RayStaticIntersection(GetTranslation(), forward.normalized(), 1.f,
CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res.IsInvalid() && !CheckNearWater(mgr, forward.normalized())) {
return forward;
}
const zeus::CVector3f right = forward.normalized().cross(zeus::skUp).normalized();
const CRayCastResult res1 =
mgr.RayStaticIntersection(GetTranslation(), right, 1.f, CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res1.IsInvalid()) {
return mag * right;
}
const zeus::CVector3f left = -right;
const CRayCastResult res2 =
mgr.RayStaticIntersection(GetTranslation(), left, 1.f, CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res2.IsInvalid()) {
return mag * left;
}
const zeus::CVector3f up = right.cross(forward.normalized());
const CRayCastResult res3 =
mgr.RayStaticIntersection(GetTranslation(), up, 1.f, CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res3.IsInvalid()) {
return mag * up;
}
const zeus::CVector3f down = -up;
const CRayCastResult res4 =
mgr.RayStaticIntersection(GetTranslation(), down, 1.f, CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
if (res4.IsInvalid()) {
return mag * down;
}
return -forward;
}
bool CFireFlea::CheckNearWater(const CStateManager& mgr, const zeus::CVector3f& dir) {