From 571050245d419fb1d6558d0359d631b8675a25a4 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Mon, 30 Mar 2020 19:31:14 -0400 Subject: [PATCH] Add .clang-tidy and apply fixes --- .clang-tidy | 1 + Runtime/MP1/World/CBouncyGrenade.cpp | 18 +++-- Runtime/MP1/World/CElitePirate.cpp | 103 +++++++++++++++---------- Runtime/MP1/World/CElitePirate.hpp | 4 +- Runtime/MP1/World/CGrenadeLauncher.cpp | 28 ++++--- Runtime/MP1/World/CGrenadeLauncher.hpp | 12 +-- 6 files changed, 101 insertions(+), 65 deletions(-) create mode 100644 .clang-tidy diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 000000000..6473e7034 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1 @@ +Checks: '*,-modernize-use-trailing-return-type,-readability-convert-member-functions-to-static,-readability-uppercase-literal-suffix,-readability-magic-numbers,-hicpp-uppercase-literal-suffix,-hicpp-signed-bitwise,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-pro-type-static-cast-downcast,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-type-union-access,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-fuchsia-*,-google-runtime-references' diff --git a/Runtime/MP1/World/CBouncyGrenade.cpp b/Runtime/MP1/World/CBouncyGrenade.cpp index cb44954ec..813de2a75 100644 --- a/Runtime/MP1/World/CBouncyGrenade.cpp +++ b/Runtime/MP1/World/CBouncyGrenade.cpp @@ -95,7 +95,9 @@ void CBouncyGrenade::CollidedWith(TUniqueId id, const CCollisionInfoList& list, CPhysicsActor::CollidedWith(id, list, mgr); } -std::optional CBouncyGrenade::GetTouchBounds() const { return GetModelData()->GetBounds(GetTransform()); } +auto CBouncyGrenade::GetTouchBounds() const -> std::optional { + return GetModelData()->GetBounds(GetTransform()); +} void CBouncyGrenade::Render(const CStateManager& mgr) const { if (!x2b4_24_exploded) { @@ -146,8 +148,9 @@ void CBouncyGrenade::Think(float dt, CStateManager& mgr) { void CBouncyGrenade::Touch(CActor& act, CStateManager& mgr) { CActor::Touch(act, mgr); } void CBouncyGrenade::Explode(CStateManager& mgr, TUniqueId uid) { - if (x2b4_24_exploded) + if (x2b4_24_exploded) { return; + } x2b4_24_exploded = true; CSfxManager::AddEmitter(x258_data.x3a_explodeSfx, GetTranslation(), zeus::skUp, false, false, 0x7f, @@ -181,16 +184,19 @@ void CBouncyGrenade::Explode(CStateManager& mgr, TUniqueId uid) { if (TCastToConstPtr cActor = mgr.GetObjectById(id)) { isParent = x298_parentId == cActor->GetOwnerId(); } - if (isParent) + if (isParent) { continue; + } - const CActor* actor = static_cast(mgr.GetObjectById(id)); - if (actor == nullptr) + const auto* actor = static_cast(mgr.GetObjectById(id)); + if (actor == nullptr) { continue; + } const float magnitude = (actor->GetTranslation() - GetTranslation()).magnitude(); - if (radius <= magnitude) + if (radius <= magnitude) { continue; + } float scale = (radius - magnitude) / radius; const CDamageInfo info{dInfo.GetWeaponMode(), scale * dInfo.GetDamage(), radius, diff --git a/Runtime/MP1/World/CElitePirate.cpp b/Runtime/MP1/World/CElitePirate.cpp index ae2ab3f5a..65bcdae26 100644 --- a/Runtime/MP1/World/CElitePirate.cpp +++ b/Runtime/MP1/World/CElitePirate.cpp @@ -1,5 +1,7 @@ #include "Runtime/MP1/World/CElitePirate.hpp" +#include + #include "Runtime/Collision/CCollisionActor.hpp" #include "Runtime/Collision/CCollisionActorManager.hpp" #include "Runtime/CSimplePool.hpp" @@ -17,19 +19,19 @@ namespace urde::MP1 { namespace { -static constexpr std::array skLeftArmJointList{{ +constexpr std::array skLeftArmJointList{{ {"L_shoulder", "L_elbow", 1.f, 1.5f}, {"L_wrist", "L_elbow", 0.9f, 1.3f}, {"L_knee", "L_ankle", 0.9f, 1.3f}, }}; -static constexpr std::array skRightArmJointList{{ +constexpr std::array skRightArmJointList{{ {"R_shoulder", "R_elbow", 1.f, 1.5f}, {"R_wrist", "R_elbow", 0.9f, 1.3f}, {"R_knee", "R_ankle", 0.9f, 1.3f}, }}; -static constexpr std::array skSphereJointList{{ +constexpr std::array skSphereJointList{{ {"Head_1", 1.2f}, {"L_Palm_LCTR", 1.5f}, {"R_Palm_LCTR", 1.5f}, @@ -76,11 +78,11 @@ CElitePirateData::CElitePirateData(CInputStream& in, u32 propCount) CElitePirate::CElitePirate(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& actParms, - const CElitePirateData& data) + CElitePirateData data) : CPatterned(ECharacter::ElitePirate, uid, name, EFlavorType::Zero, info, xf, std::move(mData), pInfo, EMovementType::Ground, EColliderType::One, EBodyType::BiPedal, actParms, EKnockBackVariant::Large) , x56c_vulnerability(pInfo.GetDamageVulnerability()) -, x5d8_data(data) +, x5d8_data(std::move(data)) , x6f8_boneTracking(*GetModelData()->GetAnimationData(), "Head_1", zeus::degToRad(80.f), zeus::degToRad(180.f), EBoneTrackingFlags::None) , x738_(GetBoundingBox(), GetMaterialList()) @@ -157,8 +159,9 @@ void CElitePirate::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CSta x988_28_alert = true; break; case EScriptObjectMessage::Touched: { - if (HealthInfo(mgr)->GetHP() <= 0.f) + if (HealthInfo(mgr)->GetHP() <= 0.f) { break; + } TCastToPtr actor = mgr.ObjectById(uid); if (!actor) { if (uid == x772_launcherId && x772_launcherId != kInvalidUniqueId) { @@ -263,19 +266,19 @@ void CElitePirate::PreRender(CStateManager& mgr, const zeus::CFrustum& frustum) xb4_drawFlags.x1_matSetIdx = numMaterialSets - 1 < x7cc_ ? numMaterialSets - 1 : x7cc_; } -const CDamageVulnerability* CElitePirate::GetDamageVulnerability() const { +auto CElitePirate::GetDamageVulnerability() const -> const CDamageVulnerability* { return &CDamageVulnerability::PassThroughVulnerabilty(); } -const CDamageVulnerability* CElitePirate::GetDamageVulnerability(const zeus::CVector3f& pos, const zeus::CVector3f& dir, - const CDamageInfo& dInfo) const { +auto CElitePirate::GetDamageVulnerability(const zeus::CVector3f& /*pos*/, const zeus::CVector3f& /*dir*/, + const CDamageInfo& /*dInfo*/) const -> const CDamageVulnerability* { return &CDamageVulnerability::PassThroughVulnerabilty(); } -zeus::CVector3f CElitePirate::GetOrbitPosition(const CStateManager& mgr) const { +auto CElitePirate::GetOrbitPosition(const CStateManager& mgr) const -> zeus::CVector3f { if (x772_launcherId != kInvalidUniqueId && mgr.GetPlayerState()->GetCurrentVisor() == CPlayerState::EPlayerVisor::Thermal) { - if (const CActor* actor = static_cast(mgr.GetObjectById(x772_launcherId))) { + if (const auto* actor = static_cast(mgr.GetObjectById(x772_launcherId))) { return sub_80228864(actor); } } @@ -287,8 +290,8 @@ zeus::CVector3f CElitePirate::GetOrbitPosition(const CStateManager& mgr) const { return GetLctrTransform("lockon_target_LCTR").origin; } -zeus::CVector3f CElitePirate::GetAimPosition(const CStateManager& mgr, float) const { - std::shared_ptr playerState = mgr.GetPlayerState(); +auto CElitePirate::GetAimPosition(const CStateManager& mgr, float /*unused*/) const -> zeus::CVector3f { + const std::shared_ptr& playerState = mgr.GetPlayerState(); if (x5d4_collisionActorMgr1->GetActive() && playerState->IsFiringComboBeam() && playerState->GetCurrentBeam() == CPlayerState::EBeamId::Wave) { if (TCastToConstPtr actor = mgr.GetObjectById(x79c_)) { @@ -355,7 +358,7 @@ void CElitePirate::DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node } } -const CCollisionPrimitive* CElitePirate::GetCollisionPrimitive() const { return &x738_; } +auto CElitePirate::GetCollisionPrimitive() const -> const CCollisionPrimitive* { return &x738_; } void CElitePirate::KnockBack(const zeus::CVector3f& pos, CStateManager& mgr, const CDamageInfo& info, EKnockBackType type, bool inDeferred, float magnitude) { @@ -368,7 +371,7 @@ void CElitePirate::KnockBack(const zeus::CVector3f& pos, CStateManager& mgr, con } } -void CElitePirate::TakeDamage(const zeus::CVector3f& pos, float) {} +void CElitePirate::TakeDamage(const zeus::CVector3f& pos, float /*arg*/) {} void CElitePirate::Patrol(CStateManager& mgr, EStateMsg msg, float dt) { if (msg == EStateMsg::Activate) { @@ -443,7 +446,7 @@ void CElitePirate::TargetPatrol(CStateManager& mgr, EStateMsg msg, float dt) { } } -void CElitePirate::Halt(CStateManager& mgr, EStateMsg msg, float) { +void CElitePirate::Halt(CStateManager& /*mgr*/, EStateMsg msg, float /*unused*/) { if (msg == EStateMsg::Activate) { x450_bodyController->SetLocomotionType(pas::ELocomotionType::Lurk); x989_24_ = false; @@ -491,7 +494,7 @@ void CElitePirate::Run(CStateManager& mgr, EStateMsg msg, float dt) { } } -void CElitePirate::Generate(CStateManager& mgr, EStateMsg msg, float) { +void CElitePirate::Generate(CStateManager& mgr, EStateMsg msg, float /*unused*/) { if (msg == EStateMsg::Activate) { x568_ = EState::One; } else if (msg == EStateMsg::Update) { @@ -519,7 +522,7 @@ void CElitePirate::Generate(CStateManager& mgr, EStateMsg msg, float) { } } -void CElitePirate::Attack(CStateManager& mgr, EStateMsg msg, float) { +void CElitePirate::Attack(CStateManager& mgr, EStateMsg msg, float /*unused*/) { if (msg == EStateMsg::Activate) { x568_ = EState::Zero; ExtendTouchBounds(mgr, x774_collisionRJointIds, zeus::CVector3f(2.f)); @@ -573,7 +576,7 @@ void CElitePirate::Attack(CStateManager& mgr, EStateMsg msg, float) { void CElitePirate::Taunt(CStateManager& mgr, EStateMsg msg, float dt) { CAi::Taunt(mgr, msg, dt); } -void CElitePirate::ProjectileAttack(CStateManager& mgr, EStateMsg msg, float) { +void CElitePirate::ProjectileAttack(CStateManager& mgr, EStateMsg msg, float /*unused*/) { if (msg == EStateMsg::Activate) { x568_ = EState::Zero; } else if (msg == EStateMsg::Update) { @@ -598,7 +601,7 @@ void CElitePirate::ProjectileAttack(CStateManager& mgr, EStateMsg msg, float) { void CElitePirate::SpecialAttack(CStateManager& mgr, EStateMsg msg, float dt) { CAi::SpecialAttack(mgr, msg, dt); } -void CElitePirate::CallForBackup(CStateManager& mgr, EStateMsg msg, float) { +void CElitePirate::CallForBackup(CStateManager& mgr, EStateMsg msg, float /*unused*/) { if (msg == EStateMsg::Activate) { x568_ = EState::Zero; x988_30_ = true; @@ -673,7 +676,7 @@ void CElitePirate::Cover(CStateManager& mgr, EStateMsg msg, float dt) { } } -bool CElitePirate::TooClose(CStateManager& mgr, float) { +bool CElitePirate::TooClose(CStateManager& mgr, float /*arg*/) { return x2fc_minAttackRange * x2fc_minAttackRange > (GetTranslation() - mgr.GetPlayer().GetTranslation()).magSquared(); } @@ -685,18 +688,20 @@ bool CElitePirate::SpotPlayer(CStateManager& mgr, float arg) { return x988_28_alert ? true : CPatterned::SpotPlayer(mgr, arg); } -bool CElitePirate::AnimOver(CStateManager& mgr, float) { return x568_ == EState::Over; } +bool CElitePirate::AnimOver(CStateManager& /*mgr*/, float /*arg*/) { return x568_ == EState::Over; } -bool CElitePirate::ShouldAttack(CStateManager& mgr, float) { +bool CElitePirate::ShouldAttack(CStateManager& mgr, float /*unused*/) { if ((mgr.GetPlayer().GetTranslation() - GetTranslation()).magSquared() > x2fc_minAttackRange * x2fc_minAttackRange) { return false; } return !ShouldTurn(mgr, 0.f); } -bool CElitePirate::InPosition(CStateManager& mgr, float) { return (x8b4_ - GetTranslation()).magSquared() < 25.f; } +bool CElitePirate::InPosition(CStateManager& /*mgr*/, float /*arg*/) { + return (x8b4_ - GetTranslation()).magSquared() < 25.f; +} -bool CElitePirate::ShouldTurn(CStateManager& mgr, float) { +bool CElitePirate::ShouldTurn(CStateManager& mgr, float /*unused*/) { return zeus::CVector2f::getAngleDiff((mgr.GetPlayer().GetTranslation() - GetTranslation()).toVec2f(), GetTransform().frontVector().toVec2f()) > zeus::degToRad(15.f); } @@ -712,13 +717,15 @@ bool CElitePirate::AggressionCheck(CStateManager& mgr, float arg) { return false; } -bool CElitePirate::ShouldTaunt(CStateManager& mgr, float) { return x7bc_tauntTimer <= 0.f; } +bool CElitePirate::ShouldTaunt(CStateManager& /*mgr*/, float /*unused*/) { return x7bc_tauntTimer <= 0.f; } -bool CElitePirate::ShouldFire(CStateManager& mgr, float) { return ShouldFireFromLauncher(mgr, x772_launcherId); } +bool CElitePirate::ShouldFire(CStateManager& mgr, float /*unused*/) { + return ShouldFireFromLauncher(mgr, x772_launcherId); +} -bool CElitePirate::ShotAt(CStateManager& mgr, float) { return x988_27_; } +bool CElitePirate::ShotAt(CStateManager& /*mgr*/, float /*unused*/) { return x988_27_; } -bool CElitePirate::ShouldSpecialAttack(CStateManager& mgr, float) { +bool CElitePirate::ShouldSpecialAttack(CStateManager& mgr, float /*unused*/) { if (x7b8_attackTimer <= 0.f && GetAreaIdAlways() == mgr.GetPlayer().GetAreaIdAlways()) { const zeus::CVector3f& dist = mgr.GetPlayer().GetAimPosition(mgr, 0.f) - GetTranslation(); float magSquared = dist.magSquared(); @@ -730,11 +737,11 @@ bool CElitePirate::ShouldSpecialAttack(CStateManager& mgr, float) { return false; } -bool CElitePirate::ShouldCallForBackup(CStateManager& mgr, float) { +bool CElitePirate::ShouldCallForBackup(CStateManager& mgr, float /*unused*/) { return ShouldCallForBackupFromLauncher(mgr, x772_launcherId); } -CPathFindSearch* CElitePirate::GetSearchPath() { return &x7d0_pathFindSearch; } +auto CElitePirate::GetSearchPath() -> CPathFindSearch* { return &x7d0_pathFindSearch; } void CElitePirate::SetupHealthInfo(CStateManager& mgr) { const CHealthInfo* const health = HealthInfo(mgr); @@ -891,8 +898,15 @@ void CElitePirate::CreateGrenadeLauncher(CStateManager& mgr, TUniqueId uid) { } CModelData mData(CAnimRes(params.GetACSFile(), params.GetCharacter(), GetModelData()->GetScale(), params.GetInitialAnimation(), true)); - SBouncyGrenadeData grenadeData{x5d8_data.xd8_, x5d8_data.xa8_, x5d8_data.xc8_, x5d8_data.xcc_, x5d8_data.xd0_, - x5d8_data.xd4_, x5d8_data.xf0_grenadeNumBounces, x5d8_data.xf4_, x5d8_data.xf6_}; + SBouncyGrenadeData grenadeData{x5d8_data.xd8_, + x5d8_data.xa8_, + x5d8_data.xc8_, + x5d8_data.xcc_, + x5d8_data.xd0_, + x5d8_data.xd4_, + x5d8_data.xf0_grenadeNumBounces, + x5d8_data.xf4_, + x5d8_data.xf6_}; CGrenadeLauncherData launcherData{grenadeData, x5d8_data.xa4_, x5d8_data.x9c_, x5d8_data.xa0_, x5d8_data.xe0_trajectoryInfo}; mgr.AddObject(new CGrenadeLauncher(uid, "Grenade Launcher", {GetAreaIdAlways(), CEntity::NullConnectionList}, @@ -1029,7 +1043,7 @@ void CElitePirate::sub_802289dc(CStateManager& mgr, TUniqueId& uid, std::string_ if (uid == kInvalidUniqueId) { return; } - CActor* actor = static_cast(mgr.ObjectById(uid)); + auto* actor = static_cast(mgr.ObjectById(uid)); if (actor == nullptr) { uid = kInvalidUniqueId; return; @@ -1062,25 +1076,30 @@ void CElitePirate::ExtendTouchBounds(CStateManager& mgr, const rstl::reserved_ve } bool CElitePirate::ShouldFireFromLauncher(CStateManager& mgr, TUniqueId launcherId) { - if (x7b8_attackTimer > 0.f || launcherId == kInvalidUniqueId) + if (x7b8_attackTimer > 0.f || launcherId == kInvalidUniqueId) { return false; - const CActor* launcher = static_cast(mgr.GetObjectById(launcherId)); - if (launcher == nullptr) + } + const auto* launcher = static_cast(mgr.GetObjectById(launcherId)); + if (launcher == nullptr) { return false; + } const zeus::CVector3f& aim = mgr.GetPlayer().GetAimPosition(mgr, 0.f); - if (x300_maxAttackRange * x300_maxAttackRange > (aim - GetTranslation()).magSquared() || ShouldTurn(mgr, 0.f)) + if (x300_maxAttackRange * x300_maxAttackRange > (aim - GetTranslation()).magSquared() || ShouldTurn(mgr, 0.f)) { return false; + } const zeus::CVector3f& origin = sub_80228864(launcher); - if (IsPatternObstructed(mgr, origin, aim)) + if (IsPatternObstructed(mgr, origin, aim)) { return false; + } const zeus::CVector3f& target = CGrenadeLauncher::GrenadeTarget(mgr); - float angleOut = x5d8_data.xe0_trajectoryInfo.x8_angleMin, velocityOut = x5d8_data.xe0_trajectoryInfo.x0_; + float angleOut = x5d8_data.xe0_trajectoryInfo.x8_angleMin; + float velocityOut = x5d8_data.xe0_trajectoryInfo.x0_; CGrenadeLauncher::CalculateGrenadeTrajectory(target, origin, x5d8_data.xe0_trajectoryInfo, angleOut, velocityOut); const zeus::CVector3f& rot = GetTransform().rotate({0.f, std::cos(angleOut), std::sin(angleOut)}); return !CPatterned::IsPatternObstructed(mgr, target, target + (7.5f * rot)); } -bool CElitePirate::ShouldCallForBackupFromLauncher(CStateManager& mgr, TUniqueId uid) { +bool CElitePirate::ShouldCallForBackupFromLauncher(CStateManager& /*mgr*/, TUniqueId uid) { if (!x988_30_ && uid == kInvalidUniqueId && x5d8_data.x11e_) { return x7a8_ >= 3.f; } @@ -1088,7 +1107,7 @@ bool CElitePirate::ShouldCallForBackupFromLauncher(CStateManager& mgr, TUniqueId } zeus::CVector3f CElitePirate::SUnknownStruct::GetValue(const zeus::CVector3f& v1, const zeus::CVector3f& v2) { - while (x4_.size()) { + while (!x4_.empty()) { const zeus::CVector3f v = x4_[x4_.size() - 1] - v1; if (v.dot(v2) > 0.f && v.isMagnitudeSafe()) { return v.normalized(); diff --git a/Runtime/MP1/World/CElitePirate.hpp b/Runtime/MP1/World/CElitePirate.hpp index 12b2be580..ae85a5a6e 100644 --- a/Runtime/MP1/World/CElitePirate.hpp +++ b/Runtime/MP1/World/CElitePirate.hpp @@ -61,7 +61,7 @@ class CElitePirate : public CPatterned { struct SUnknownStruct { float x0_; rstl::reserved_vector x4_; - SUnknownStruct(float f) : x0_(f * f) {} + explicit SUnknownStruct(float f) : x0_(f * f) {} zeus::CVector3f GetValue(const zeus::CVector3f& v1, const zeus::CVector3f& v2); void AddValue(const zeus::CVector3f& vec); void Clear() { x4_.clear(); } @@ -119,7 +119,7 @@ public: CElitePirate(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& actParms, - const CElitePirateData& data); + CElitePirateData data); void Accept(IVisitor& visitor) override; void Think(float dt, CStateManager& mgr) override; diff --git a/Runtime/MP1/World/CGrenadeLauncher.cpp b/Runtime/MP1/World/CGrenadeLauncher.cpp index 5bff3f2cc..868773441 100644 --- a/Runtime/MP1/World/CGrenadeLauncher.cpp +++ b/Runtime/MP1/World/CGrenadeLauncher.cpp @@ -31,13 +31,13 @@ CGrenadeLauncher::CGrenadeLauncher(TUniqueId uid, std::string_view name, const C } GetModelData()->EnableLooping(true); const CPASDatabase& pasDatabase = GetModelData()->GetAnimationData()->GetCharacterInfo().GetPASDatabase(); - for (int i = 0; i < 4; i++) { + for (int i = 0; i < x3c8_animIds.size(); i++) { const auto result = pasDatabase.FindBestAnimation({22, CPASAnimParm::FromEnum(i)}, -1); x3c8_animIds[i] = result.second; } } -zeus::CVector3f CGrenadeLauncher::GrenadeTarget(const CStateManager& mgr) { +auto CGrenadeLauncher::GrenadeTarget(const CStateManager& mgr) -> zeus::CVector3f { const zeus::CVector3f& aim = mgr.GetPlayer().GetAimPosition(mgr, 1.f); if (mgr.GetPlayer().GetMorphballTransitionState() == CPlayer::EPlayerMorphBallState::Unmorphed) { return aim - zeus::CVector3f{0.f, 0.f, 0.5f * mgr.GetPlayer().GetEyeHeight()}; @@ -121,7 +121,7 @@ void CGrenadeLauncher::AddToRenderer(const zeus::CFrustum& frustum, const CState CActor::AddToRenderer(frustum, mgr); } -std::optional CGrenadeLauncher::GetTouchBounds() const { +auto CGrenadeLauncher::GetTouchBounds() const -> std::optional { return x328_cSphere.CalculateAABox(GetTransform()); } @@ -200,8 +200,9 @@ void CGrenadeLauncher::sub_8022f69c(float arg) { } void CGrenadeLauncher::CreateExplosion(CStateManager& mgr) { - if (!x3b8_particleGenDesc) + if (!x3b8_particleGenDesc) { return; + } mgr.AddObject(new CExplosion(*x3b8_particleGenDesc, mgr.AllocateUniqueId(), true, {GetAreaIdAlways(), CEntity::NullConnectionList}, "Grenade Launcher Explode Fx"sv, GetTransform(), 0, GetModelData()->GetScale(), zeus::skWhite)); @@ -210,7 +211,7 @@ void CGrenadeLauncher::CreateExplosion(CStateManager& mgr) { void CGrenadeLauncher::sub_8022f9e0(CStateManager& mgr, float dt) { CModelData* modelData = GetModelData(); - CAnimData* animData; + CAnimData* animData = nullptr; if (modelData != nullptr && (animData = modelData->GetAnimationData()) != nullptr && x258_started == 1 && x3fe_) { const zeus::CVector3f& target = mgr.GetPlayer().GetAimPosition(mgr, 0.f) - GetTranslation(); @@ -257,11 +258,15 @@ void CGrenadeLauncher::sub_8022f9e0(CStateManager& mgr, float dt) { } } else { if (x3d8_ != 0.f) { - animData->DelAdditiveAnimation(x3c8_animIds[x3d8_ >= 0.f ? 1 : 0]); + if (animData != nullptr) { // Original code does not check + animData->DelAdditiveAnimation(x3c8_animIds[x3d8_ >= 0.f ? 1 : 0]); + } x3d8_ = 0.f; } if (x3e0_ != 0.f) { - animData->DelAdditiveAnimation(x3c8_animIds[x3e0_ <= 0.f ? 3 : 2]); + if (animData != nullptr) { // Original code does not check + animData->DelAdditiveAnimation(x3c8_animIds[x3e0_ <= 0.f ? 3 : 2]); + } x3e0_ = 0.f; } } @@ -271,8 +276,9 @@ void CGrenadeLauncher::sub_80230438() { CModelData* modelData = GetModelData(); CAnimData* animData; if (modelData == nullptr || (animData = modelData->GetAnimationData()) == nullptr || x258_started <= -1 || - x258_started >= 2) + x258_started >= 2) { return; + } constexpr std::array arr = {0, 3}; const auto& anim = animData->GetCharacterInfo().GetPASDatabase().FindBestAnimation( @@ -286,8 +292,9 @@ void CGrenadeLauncher::sub_80230438() { void CGrenadeLauncher::LaunchGrenade(CStateManager& mgr) { CModelData* modelData = GetModelData(); CAnimData* animData; - if (modelData == nullptr || (animData = modelData->GetAnimationData()) == nullptr) + if (modelData == nullptr || (animData = modelData->GetAnimationData()) == nullptr) { return; + } const auto& anim = animData->GetCharacterInfo().GetPASDatabase().FindBestAnimation({24}, -1); if (anim.first > 0.f) { @@ -295,7 +302,8 @@ void CGrenadeLauncher::LaunchGrenade(CStateManager& mgr) { const zeus::CVector3f& origin = GetTranslation() + GetTransform().rotate(GetLocatorTransform("grenade_LCTR"sv).origin); const zeus::CVector3f& target = GrenadeTarget(mgr); - float angleOut = x2d0_data.x48_trajectoryInfo.x8_angleMin, velocityOut = x2d0_data.x48_trajectoryInfo.x0_; + float angleOut = x2d0_data.x48_trajectoryInfo.x8_angleMin; + float velocityOut = x2d0_data.x48_trajectoryInfo.x0_; CalculateGrenadeTrajectory(target, origin, x2d0_data.x48_trajectoryInfo, angleOut, velocityOut); zeus::CVector3f dist = target - origin; diff --git a/Runtime/MP1/World/CGrenadeLauncher.hpp b/Runtime/MP1/World/CGrenadeLauncher.hpp index 11f3bf4b1..ed28d6824 100644 --- a/Runtime/MP1/World/CGrenadeLauncher.hpp +++ b/Runtime/MP1/World/CGrenadeLauncher.hpp @@ -26,7 +26,7 @@ struct SGrenadeTrajectoryInfo { float x8_angleMin; float xc_angleMax; - SGrenadeTrajectoryInfo(CInputStream& in) + explicit SGrenadeTrajectoryInfo(CInputStream& in) : x0_(in.readFloatBig()) , x4_(in.readFloatBig()) , x8_angleMin(zeus::degToRad(in.readFloatBig())) @@ -84,10 +84,12 @@ public: void Accept(IVisitor& visitor) override { visitor.Visit(this); } void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override; void AddToRenderer(const zeus::CFrustum& frustum, const CStateManager& mgr) const override; - const CCollisionPrimitive* GetCollisionPrimitive() const override { return &x328_cSphere; } - const CDamageVulnerability* GetDamageVulnerability() const override { return &x264_vulnerability; } - std::optional GetTouchBounds() const override; - CHealthInfo* HealthInfo(CStateManager& mgr) override { return &x25c_healthInfo; } + [[nodiscard]] auto GetCollisionPrimitive() const -> const CCollisionPrimitive* override { return &x328_cSphere; } + [[nodiscard]] auto GetDamageVulnerability() const -> const CDamageVulnerability* override { + return &x264_vulnerability; + } + [[nodiscard]] auto GetTouchBounds() const -> std::optional override; + auto HealthInfo(CStateManager & /*mgr*/) -> CHealthInfo* override { return &x25c_healthInfo; } void PreRender(CStateManager& mgr, const zeus::CFrustum& frustum) override; void Render(const CStateManager& mgr) const override; void Think(float dt, CStateManager& mgr) override;