mirror of https://github.com/AxioDL/metaforce.git
CFlyingPirate: Minor cleanup
This commit is contained in:
parent
17b3a954c7
commit
0789f28aac
|
@ -2,12 +2,13 @@
|
||||||
|
|
||||||
#include "Runtime/CSimplePool.hpp"
|
#include "Runtime/CSimplePool.hpp"
|
||||||
#include "Runtime/CStateManager.hpp"
|
#include "Runtime/CStateManager.hpp"
|
||||||
#include "Runtime/Character/CPASAnimParmData.hpp"
|
|
||||||
#include "Runtime/GameGlobalObjects.hpp"
|
#include "Runtime/GameGlobalObjects.hpp"
|
||||||
|
#include "Runtime/Character/CPASAnimParmData.hpp"
|
||||||
#include "Runtime/Graphics/CCubeRenderer.hpp"
|
#include "Runtime/Graphics/CCubeRenderer.hpp"
|
||||||
#include "Runtime/MP1/World/CSpacePirate.hpp"
|
#include "Runtime/MP1/World/CSpacePirate.hpp"
|
||||||
#include "Runtime/Weapon/CEnergyProjectile.hpp"
|
#include "Runtime/Weapon/CEnergyProjectile.hpp"
|
||||||
#include "Runtime/Weapon/CGameProjectile.hpp"
|
#include "Runtime/Weapon/CGameProjectile.hpp"
|
||||||
|
#include "Runtime/World/CActorParameters.hpp"
|
||||||
#include "Runtime/World/CExplosion.hpp"
|
#include "Runtime/World/CExplosion.hpp"
|
||||||
#include "Runtime/World/CPatternedInfo.hpp"
|
#include "Runtime/World/CPatternedInfo.hpp"
|
||||||
#include "Runtime/World/CPlayer.hpp"
|
#include "Runtime/World/CPlayer.hpp"
|
||||||
|
@ -312,6 +313,7 @@ CFlyingPirate::CFlyingPirate(TUniqueId uid, std::string_view name, const CEntity
|
||||||
, x6a0_25_isAquaPirate(x568_data.x8_type == EFlyingPirateType::AquaPirate)
|
, x6a0_25_isAquaPirate(x568_data.x8_type == EFlyingPirateType::AquaPirate)
|
||||||
, x6a8_pathFindSearch(nullptr, x6a0_25_isAquaPirate ? 2 : 3, pInfo.GetHalfExtent(), pInfo.GetHeight(),
|
, x6a8_pathFindSearch(nullptr, x6a0_25_isAquaPirate ? 2 : 3, pInfo.GetHalfExtent(), pInfo.GetHeight(),
|
||||||
pInfo.GetPathfindingIndex())
|
pInfo.GetPathfindingIndex())
|
||||||
|
, x794_initialHealth(pInfo.GetHealthInfo().GetHP())
|
||||||
, x7a0_boneTracking(*GetModelData()->GetAnimationData(), "Head_1"sv, zeus::degToRad(80.f), zeus::degToRad(180.f),
|
, x7a0_boneTracking(*GetModelData()->GetAnimationData(), "Head_1"sv, zeus::degToRad(80.f), zeus::degToRad(180.f),
|
||||||
EBoneTrackingFlags::None)
|
EBoneTrackingFlags::None)
|
||||||
, x7ec_burstFire(skBursts.data(), 0) {
|
, x7ec_burstFire(skBursts.data(), 0) {
|
||||||
|
@ -555,8 +557,9 @@ bool CFlyingPirate::CanFireMissiles(CStateManager& mgr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFlyingPirate::CheckForProjectiles(CStateManager& mgr) {
|
void CFlyingPirate::CheckForProjectiles(CStateManager& mgr) {
|
||||||
if (!x6a0_29_checkForProjectiles)
|
if (!x6a0_29_checkForProjectiles) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const zeus::CVector3f& playerPos = mgr.GetPlayer().GetTranslation();
|
const zeus::CVector3f& playerPos = mgr.GetPlayer().GetTranslation();
|
||||||
const zeus::CAABox box(playerPos - 5.f, playerPos + 5.f);
|
const zeus::CAABox box(playerPos - 5.f, playerPos + 5.f);
|
||||||
|
@ -581,16 +584,18 @@ void CFlyingPirate::CheckForProjectiles(CStateManager& mgr) {
|
||||||
} else {
|
} else {
|
||||||
x6a0_30_ = true;
|
x6a0_30_ = true;
|
||||||
}
|
}
|
||||||
if (x6a0_30_)
|
if (x6a0_30_) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
x6a0_29_checkForProjectiles = false;
|
x6a0_29_checkForProjectiles = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFlyingPirate::CoverCheck(CStateManager& mgr, float) {
|
bool CFlyingPirate::CoverCheck(CStateManager& mgr, float) {
|
||||||
if (0.f < x888_)
|
if (0.f < x888_) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
x888_ = 10.f;
|
x888_ = 10.f;
|
||||||
return mgr.GetActiveRandom()->Range(0.f, 100.f) < x568_data.xcc_coverCheckChance;
|
return mgr.GetActiveRandom()->Range(0.f, 100.f) < x568_data.xcc_coverCheckChance;
|
||||||
}
|
}
|
||||||
|
@ -598,7 +603,7 @@ bool CFlyingPirate::CoverCheck(CStateManager& mgr, float) {
|
||||||
bool CFlyingPirate::CoverFind(CStateManager& mgr, float) {
|
bool CFlyingPirate::CoverFind(CStateManager& mgr, float) {
|
||||||
float closestMag = x568_data.x0_maxCoverDistance * x568_data.x0_maxCoverDistance;
|
float closestMag = x568_data.x0_maxCoverDistance * x568_data.x0_maxCoverDistance;
|
||||||
CScriptCoverPoint* closest = nullptr;
|
CScriptCoverPoint* closest = nullptr;
|
||||||
for (const auto entity : *mgr.ObjectListById(EGameObjectList::PlatformAndDoor)) {
|
for (auto* const entity : *mgr.ObjectListById(EGameObjectList::PlatformAndDoor)) {
|
||||||
if (TCastToPtr<CScriptCoverPoint> cover = entity) {
|
if (TCastToPtr<CScriptCoverPoint> cover = entity) {
|
||||||
if (cover->GetActive() && cover->ShouldLandHere() && !cover->GetInUse(x8_uid) &&
|
if (cover->GetActive() && cover->ShouldLandHere() && !cover->GetInUse(x8_uid) &&
|
||||||
cover->GetAreaIdAlways() == x4_areaId) {
|
cover->GetAreaIdAlways() == x4_areaId) {
|
||||||
|
@ -665,10 +670,9 @@ void CFlyingPirate::DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& nod
|
||||||
if (pInfo.Token().IsLoaded() && mgr.CanCreateProjectile(x8_uid, EWeaponType::AI, 16)) {
|
if (pInfo.Token().IsLoaded() && mgr.CanCreateProjectile(x8_uid, EWeaponType::AI, 16)) {
|
||||||
const zeus::CTransform xf = GetLctrTransform(node.GetLocatorName());
|
const zeus::CTransform xf = GetLctrTransform(node.GetLocatorName());
|
||||||
TUniqueId target = x6a1_26_isAttackingObject ? x85c_attackObjectId : mgr.GetPlayer().GetUniqueId();
|
TUniqueId target = x6a1_26_isAttackingObject ? x85c_attackObjectId : mgr.GetPlayer().GetUniqueId();
|
||||||
CEnergyProjectile* projectile =
|
auto* projectile = new CEnergyProjectile(true, pInfo.Token(), EWeaponType::AI, xf, EMaterialTypes::Character,
|
||||||
new CEnergyProjectile(true, pInfo.Token(), EWeaponType::AI, xf, EMaterialTypes::Character, pInfo.GetDamage(),
|
pInfo.GetDamage(), mgr.AllocateUniqueId(), x4_areaId, x8_uid, target,
|
||||||
mgr.AllocateUniqueId(), x4_areaId, x8_uid, target, EProjectileAttrib::None, false,
|
EProjectileAttrib::None, false, zeus::skOne3f, std::nullopt, -1, false);
|
||||||
zeus::skOne3f, std::nullopt, -1, false);
|
|
||||||
mgr.AddObject(projectile);
|
mgr.AddObject(projectile);
|
||||||
if (!x6a1_26_isAttackingObject) {
|
if (!x6a1_26_isAttackingObject) {
|
||||||
projectile->SetCameraShake(
|
projectile->SetCameraShake(
|
||||||
|
@ -684,9 +688,9 @@ void CFlyingPirate::DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& nod
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFlyingPirate::Enraged(CStateManager& mgr, EStateMsg msg, float arg) {
|
void CFlyingPirate::Enraged(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
if (msg != EStateMsg::Update)
|
if (msg != EStateMsg::Update) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
x87c_ = (arg * arg * x568_data.xc4_) * zeus::skUp;
|
x87c_ = (arg * arg * x568_data.xc4_) * zeus::skUp;
|
||||||
x898_ = 1.f;
|
x898_ = 1.f;
|
||||||
x870_ += x87c_;
|
x870_ += x87c_;
|
||||||
|
@ -710,9 +714,9 @@ void CFlyingPirate::Explode(CStateManager& mgr, EStateMsg msg, float) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFlyingPirate::MassiveDeath(CStateManager& mgr) {
|
void CFlyingPirate::MassiveDeath(CStateManager& mgr) {
|
||||||
CExplosion* explosion = new CExplosion(
|
auto* explosion = new CExplosion(static_cast<const TLockedToken<CGenDescription>>(x568_data.x90_particleGenDesc),
|
||||||
static_cast<const TLockedToken<CGenDescription>>(x568_data.x90_particleGenDesc), mgr.AllocateUniqueId(), true,
|
mgr.AllocateUniqueId(), true, {x4_areaId, CEntity::NullConnectionList}, "",
|
||||||
{x4_areaId, CEntity::NullConnectionList}, "", GetTransform(), 0, zeus::CVector3f(1.5f), zeus::skWhite);
|
GetTransform(), 0, zeus::CVector3f(1.5f), zeus::skWhite);
|
||||||
mgr.AddObject(explosion);
|
mgr.AddObject(explosion);
|
||||||
mgr.ApplyDamageToWorld(x8_uid, *this, GetTranslation(), x568_data.x9c_dInfo,
|
mgr.ApplyDamageToWorld(x8_uid, *this, GetTranslation(), x568_data.x9c_dInfo,
|
||||||
CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
|
CMaterialFilter::MakeInclude({EMaterialTypes::Solid}));
|
||||||
|
@ -764,9 +768,10 @@ pas::EStepDirection CFlyingPirate::GetDodgeDirection(CStateManager& mgr, float a
|
||||||
bool canDodgeUp = true;
|
bool canDodgeUp = true;
|
||||||
bool canDodgeDown = true;
|
bool canDodgeDown = true;
|
||||||
pas::EStepDirection direction = pas::EStepDirection::Invalid;
|
pas::EStepDirection direction = pas::EStepDirection::Invalid;
|
||||||
for (const auto entity : *mgr.ObjectListById(EGameObjectList::AiWaypoint)) {
|
for (auto* const entity : *mgr.ObjectListById(EGameObjectList::AiWaypoint)) {
|
||||||
if (entity == this)
|
if (entity == this) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (TCastToPtr<CPhysicsActor> actor = entity) {
|
if (TCastToPtr<CPhysicsActor> actor = entity) {
|
||||||
const zeus::CVector3f dist = actor->GetTranslation() - GetTranslation();
|
const zeus::CVector3f dist = actor->GetTranslation() - GetTranslation();
|
||||||
float distMagSquared = dist.magSquared();
|
float distMagSquared = dist.magSquared();
|
||||||
|
@ -863,6 +868,7 @@ void CFlyingPirate::GetUp(CStateManager& mgr, EStateMsg msg, float) {
|
||||||
CPathFindSearch::EResult result = x6a8_pathFindSearch.Search(GetTranslation(), GetTranslation());
|
CPathFindSearch::EResult result = x6a8_pathFindSearch.Search(GetTranslation(), GetTranslation());
|
||||||
if (result == CPathFindSearch::EResult::NoSourcePoint) {
|
if (result == CPathFindSearch::EResult::NoSourcePoint) {
|
||||||
x401_30_pendingDeath = true;
|
x401_30_pendingDeath = true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TryCommand(mgr, pas::EAnimationState::Getup, &CPatterned::TryGetUp, 0);
|
TryCommand(mgr, pas::EAnimationState::Getup, &CPatterned::TryGetUp, 0);
|
||||||
|
@ -1098,8 +1104,9 @@ void CFlyingPirate::PathFind(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFlyingPirate::Patrol(CStateManager& mgr, EStateMsg msg, float arg) {
|
void CFlyingPirate::Patrol(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
if (!x6a0_27_canPatrol)
|
if (!x6a0_27_canPatrol) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
CPatterned::Patrol(mgr, msg, arg);
|
CPatterned::Patrol(mgr, msg, arg);
|
||||||
if (msg == EStateMsg::Activate) {
|
if (msg == EStateMsg::Activate) {
|
||||||
|
@ -1234,8 +1241,9 @@ bool CFlyingPirate::ShouldAttack(CStateManager& mgr, float) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFlyingPirate::ShouldDodge(CStateManager& mgr, float) {
|
bool CFlyingPirate::ShouldDodge(CStateManager& mgr, float) {
|
||||||
if (x6a1_28_ || x6a1_25_)
|
if (x6a1_28_ || x6a1_25_) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
return 0.f < (GetTargetPos(mgr) - GetTranslation()).dot(GetTransform().frontVector()) &&
|
return 0.f < (GetTargetPos(mgr) - GetTranslation()).dot(GetTransform().frontVector()) &&
|
||||||
(x854_ < 0.33f || x858_ < 0.33f) && x7d8_ < 0.5f;
|
(x854_ < 0.33f || x858_ < 0.33f) && x7d8_ < 0.5f;
|
||||||
}
|
}
|
||||||
|
@ -1265,8 +1273,9 @@ bool CFlyingPirate::ShouldMove(CStateManager& mgr, float) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFlyingPirate::ShouldRetreat(CStateManager& mgr, float) {
|
bool CFlyingPirate::ShouldRetreat(CStateManager& mgr, float) {
|
||||||
if (!x6a2_28_)
|
if (!x6a2_28_) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
TUniqueId id = GetWaypointForState(mgr, EScriptObjectState::Patrol, EScriptObjectMessage::Follow);
|
TUniqueId id = GetWaypointForState(mgr, EScriptObjectState::Patrol, EScriptObjectMessage::Follow);
|
||||||
TCastToPtr<CScriptWaypoint> waypoint = mgr.ObjectById(id);
|
TCastToPtr<CScriptWaypoint> waypoint = mgr.ObjectById(id);
|
||||||
|
@ -1290,8 +1299,9 @@ bool CFlyingPirate::ShouldRetreat(CStateManager& mgr, float) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFlyingPirate::ShouldSpecialAttack(CStateManager& mgr, float) {
|
bool CFlyingPirate::ShouldSpecialAttack(CStateManager& mgr, float) {
|
||||||
if (x3fc_flavor != EFlavorType::One || x85c_attackObjectId == kInvalidUniqueId || x860_ > 0.f)
|
if (x3fc_flavor != EFlavorType::One || x85c_attackObjectId == kInvalidUniqueId || x860_ > 0.f) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
x860_ = 15.f * mgr.GetActiveRandom()->Float() + 15.f;
|
x860_ = 15.f * mgr.GetActiveRandom()->Float() + 15.f;
|
||||||
if (!mgr.GetPlayer().CheckOrbitDisableSourceList()) {
|
if (!mgr.GetPlayer().CheckOrbitDisableSourceList()) {
|
||||||
|
@ -1322,7 +1332,7 @@ bool CFlyingPirate::Stuck(CStateManager& mgr, float arg) {
|
||||||
|
|
||||||
void CFlyingPirate::UpdateLandingSmoke(CStateManager& mgr, bool active) {
|
void CFlyingPirate::UpdateLandingSmoke(CStateManager& mgr, bool active) {
|
||||||
if (active) {
|
if (active) {
|
||||||
if (x684_particleGens.size()) {
|
if (!x684_particleGens.empty()) {
|
||||||
const zeus::CVector3f& origin = GetTranslation();
|
const zeus::CVector3f& origin = GetTranslation();
|
||||||
float particleLevel = origin.z() - 5.f;
|
float particleLevel = origin.z() - 5.f;
|
||||||
CScriptCoverPoint* const cover = GetCoverPoint(mgr, x6a4_currentCoverPoint);
|
CScriptCoverPoint* const cover = GetCoverPoint(mgr, x6a4_currentCoverPoint);
|
||||||
|
@ -1407,7 +1417,7 @@ void CFlyingPirate::TargetPatrol(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
x2dc_destObj = GetWaypointForState(mgr, EScriptObjectState::Attack, EScriptObjectMessage::Follow);
|
x2dc_destObj = GetWaypointForState(mgr, EScriptObjectState::Attack, EScriptObjectMessage::Follow);
|
||||||
if (x2dc_destObj != kInvalidUniqueId) {
|
if (x2dc_destObj != kInvalidUniqueId) {
|
||||||
if (TCastToPtr<CScriptWaypoint> waypoint = mgr.ObjectById(x2dc_destObj)) {
|
if (TCastToPtr<CScriptWaypoint> waypoint = mgr.ObjectById(x2dc_destObj)) {
|
||||||
x30c_behaviourOrient = EBehaviourOrient(waypoint->GetBehaviourOrient());
|
x30c_behaviourOrient = static_cast<EBehaviourOrient>(waypoint->GetBehaviourOrient());
|
||||||
x3b0_moveSpeed = waypoint->GetSpeed();
|
x3b0_moveSpeed = waypoint->GetSpeed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1439,7 +1449,7 @@ void CFlyingPirate::Taunt(CStateManager& mgr, EStateMsg msg, float) {
|
||||||
const TUniqueId playerUid = mgr.GetPlayer().GetUniqueId();
|
const TUniqueId playerUid = mgr.GetPlayer().GetUniqueId();
|
||||||
x7a0_boneTracking.SetTarget(playerUid);
|
x7a0_boneTracking.SetTarget(playerUid);
|
||||||
bool foundPirate = false;
|
bool foundPirate = false;
|
||||||
for (const auto obj : *mgr.ObjectListById(EGameObjectList::AiWaypoint)) {
|
for (auto* const obj : *mgr.ObjectListById(EGameObjectList::AiWaypoint)) {
|
||||||
if (const CSpacePirate* const pirate = CPatterned::CastTo<CSpacePirate>(obj)) {
|
if (const CSpacePirate* const pirate = CPatterned::CastTo<CSpacePirate>(obj)) {
|
||||||
if (pirate->GetEnableAim() && pirate->IsAlive() && pirate->GetAreaIdAlways() == x4_areaId &&
|
if (pirate->GetEnableAim() && pirate->IsAlive() && pirate->GetAreaIdAlways() == x4_areaId &&
|
||||||
(pirate->GetTranslation() - GetTranslation()).magSquared() <
|
(pirate->GetTranslation() - GetTranslation()).magSquared() <
|
||||||
|
@ -1581,7 +1591,7 @@ void CFlyingPirate::Think(float dt, CStateManager& mgr) {
|
||||||
const zeus::CVector3f dist =
|
const zeus::CVector3f dist =
|
||||||
(GetBoundingBox().center() - mgr.GetPlayer().GetAimPosition(mgr, 0.f)).normalized();
|
(GetBoundingBox().center() - mgr.GetPlayer().GetAimPosition(mgr, 0.f)).normalized();
|
||||||
if (dist.magSquared() < 0.9f) {
|
if (dist.magSquared() < 0.9f) {
|
||||||
for (const auto obj : *mgr.ObjectListById(EGameObjectList::AiWaypoint)) {
|
for (auto* const obj : *mgr.ObjectListById(EGameObjectList::AiWaypoint)) {
|
||||||
if (const auto* pirate = CPatterned::CastTo<const CSpacePirate>(obj)) {
|
if (const auto* pirate = CPatterned::CastTo<const CSpacePirate>(obj)) {
|
||||||
if (pirate->GetEnableAim() && pirate->GetAreaIdAlways() == x4_areaId) {
|
if (pirate->GetEnableAim() && pirate->GetAreaIdAlways() == x4_areaId) {
|
||||||
x7e4_ += 0.2f;
|
x7e4_ += 0.2f;
|
||||||
|
|
|
@ -171,7 +171,7 @@ private:
|
||||||
CPathFindSearch x6a8_pathFindSearch;
|
CPathFindSearch x6a8_pathFindSearch;
|
||||||
float x78c_ = 0.f; // not initialized in constructor?
|
float x78c_ = 0.f; // not initialized in constructor?
|
||||||
int x790_ = 0;
|
int x790_ = 0;
|
||||||
int x794_health;
|
float x794_initialHealth;
|
||||||
CSegId x798_headSegId;
|
CSegId x798_headSegId;
|
||||||
int x79c_ = -1;
|
int x79c_ = -1;
|
||||||
CBoneTracking x7a0_boneTracking;
|
CBoneTracking x7a0_boneTracking;
|
||||||
|
|
Loading…
Reference in New Issue