mirror of https://github.com/AxioDL/metaforce.git
CFlyingPirate: More small fixes
This commit is contained in:
parent
932615593e
commit
6f89dbb240
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace urde::MP1 {
|
namespace urde::MP1 {
|
||||||
namespace {
|
namespace {
|
||||||
constexpr std::array<const SBurst, 6> skBurst1{{
|
constexpr std::array<SBurst, 6> skBurst1{{
|
||||||
{4, {3, 4, 11, 12, -1, 0, 0, 0}, 0.1f, 0.05f},
|
{4, {3, 4, 11, 12, -1, 0, 0, 0}, 0.1f, 0.05f},
|
||||||
{20, {2, 3, 4, 5, -1, 0, 0, 0}, 0.1f, 0.05f},
|
{20, {2, 3, 4, 5, -1, 0, 0, 0}, 0.1f, 0.05f},
|
||||||
{20, {10, 11, 12, 13, -1, 0, 0, 0}, 0.1f, 0.05f},
|
{20, {10, 11, 12, 13, -1, 0, 0, 0}, 0.1f, 0.05f},
|
||||||
|
@ -30,7 +30,7 @@ constexpr std::array<const SBurst, 6> skBurst1{{
|
||||||
{0, {0, 0, 0, 0, 0, 0, 0, 0}, 0.000000, 0.000000},
|
{0, {0, 0, 0, 0, 0, 0, 0, 0}, 0.000000, 0.000000},
|
||||||
}};
|
}};
|
||||||
|
|
||||||
constexpr std::array<const SBurst, 6> skBurst2{{
|
constexpr std::array<SBurst, 6> skBurst2{{
|
||||||
{5, {3, 4, 8, 12, -1, 0, 0, 0}, 0.1f, 0.05f},
|
{5, {3, 4, 8, 12, -1, 0, 0, 0}, 0.1f, 0.05f},
|
||||||
{10, {2, 3, 4, 5, -1, 0, 0, 0}, 0.1f, 0.05f},
|
{10, {2, 3, 4, 5, -1, 0, 0, 0}, 0.1f, 0.05f},
|
||||||
{10, {10, 11, 12, 13, -1, 0, 0, 0}, 0.1f, 0.05f},
|
{10, {10, 11, 12, 13, -1, 0, 0, 0}, 0.1f, 0.05f},
|
||||||
|
@ -39,7 +39,7 @@ constexpr std::array<const SBurst, 6> skBurst2{{
|
||||||
{0, {0, 0, 0, 0, 0, 0, 0, 0}, 0.000000, 0.000000},
|
{0, {0, 0, 0, 0, 0, 0, 0, 0}, 0.000000, 0.000000},
|
||||||
}};
|
}};
|
||||||
|
|
||||||
constexpr std::array<const SBurst, 5> skBurst3{{
|
constexpr std::array<SBurst, 5> skBurst3{{
|
||||||
{30, {3, 4, 5, 11, 12, 4, -1, 0}, 0.1f, 0.05f},
|
{30, {3, 4, 5, 11, 12, 4, -1, 0}, 0.1f, 0.05f},
|
||||||
{20, {2, 3, 4, 5, 4, 3, -1, 0}, 0.1f, 0.05f},
|
{20, {2, 3, 4, 5, 4, 3, -1, 0}, 0.1f, 0.05f},
|
||||||
{20, {5, 4, 3, 13, 12, 11, -1, 0}, 0.1f, 0.05f},
|
{20, {5, 4, 3, 13, 12, 11, -1, 0}, 0.1f, 0.05f},
|
||||||
|
@ -47,7 +47,7 @@ constexpr std::array<const SBurst, 5> skBurst3{{
|
||||||
{0, {0, 0, 0, 0, 0, 0, 0, 0}, 0.000000, 0.000000},
|
{0, {0, 0, 0, 0, 0, 0, 0, 0}, 0.000000, 0.000000},
|
||||||
}};
|
}};
|
||||||
|
|
||||||
constexpr std::array<const SBurst, 5> skBurst4{{
|
constexpr std::array<SBurst, 5> skBurst4{{
|
||||||
{10, {6, 5, 4, 14, 13, 12, -1, 0}, 0.1f, 0.05f},
|
{10, {6, 5, 4, 14, 13, 12, -1, 0}, 0.1f, 0.05f},
|
||||||
{20, {14, 13, 12, 11, 10, 9, -1, 0}, 0.1f, 0.05f},
|
{20, {14, 13, 12, 11, 10, 9, -1, 0}, 0.1f, 0.05f},
|
||||||
{20, {14, 15, 16, 11, 10, 9, -1, 0}, 0.1f, 0.05f},
|
{20, {14, 15, 16, 11, 10, 9, -1, 0}, 0.1f, 0.05f},
|
||||||
|
@ -55,11 +55,11 @@ constexpr std::array<const SBurst, 5> skBurst4{{
|
||||||
{0, {0, 0, 0, 0, 0, 0, 0, 0}, 0.000000, 0.000000},
|
{0, {0, 0, 0, 0, 0, 0, 0, 0}, 0.000000, 0.000000},
|
||||||
}};
|
}};
|
||||||
|
|
||||||
constexpr std::array<const SBurst* const, 5> skBursts{
|
constexpr std::array<const SBurst*, 5> skBursts{
|
||||||
skBurst1.data(), skBurst2.data(), skBurst3.data(), skBurst4.data(), nullptr,
|
skBurst1.data(), skBurst2.data(), skBurst3.data(), skBurst4.data(), nullptr,
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr std::array<const std::string_view, 15> skParts{
|
constexpr std::array<std::string_view, 15> skParts{
|
||||||
"Collar"sv, "Head_1"sv, "R_shoulder"sv, "R_elbow"sv, "R_wrist"sv, "L_shoulder"sv, "L_elbow"sv, "L_wrist"sv,
|
"Collar"sv, "Head_1"sv, "R_shoulder"sv, "R_elbow"sv, "R_wrist"sv, "L_shoulder"sv, "L_elbow"sv, "L_wrist"sv,
|
||||||
"R_hip"sv, "R_knee"sv, "R_ankle"sv, "L_hip"sv, "L_knee"sv, "L_ankle"sv, "rocket_LCTR"sv,
|
"R_hip"sv, "R_knee"sv, "R_ankle"sv, "L_hip"sv, "L_knee"sv, "L_ankle"sv, "rocket_LCTR"sv,
|
||||||
};
|
};
|
||||||
|
@ -395,9 +395,8 @@ bool CFlyingPirate::AggressionCheck(CStateManager& mgr, float arg) { return x6a2
|
||||||
bool CFlyingPirate::AnimOver(CStateManager& mgr, float arg) {
|
bool CFlyingPirate::AnimOver(CStateManager& mgr, float arg) {
|
||||||
if (x450_bodyController->GetCurrentStateId() == pas::EAnimationState::Death) {
|
if (x450_bodyController->GetCurrentStateId() == pas::EAnimationState::Death) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
|
||||||
return CPatterned::AnimOver(mgr, arg);
|
|
||||||
}
|
}
|
||||||
|
return CPatterned::AnimOver(mgr, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFlyingPirate::Attack(CStateManager& mgr, EStateMsg msg, float arg) {
|
void CFlyingPirate::Attack(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
|
@ -434,9 +433,9 @@ bool CFlyingPirate::Attacked(CStateManager& mgr, float arg) { return x854_ < (ar
|
||||||
|
|
||||||
zeus::CVector3f CFlyingPirate::AvoidActors(CStateManager& mgr) {
|
zeus::CVector3f CFlyingPirate::AvoidActors(CStateManager& mgr) {
|
||||||
const zeus::CVector3f& origin = GetTranslation();
|
const zeus::CVector3f& origin = GetTranslation();
|
||||||
zeus::CAABox box(origin - 8.f, origin + 8.f);
|
const zeus::CAABox box(origin - 8.f, origin + 8.f);
|
||||||
rstl::reserved_vector<TUniqueId, 1024> nearList;
|
rstl::reserved_vector<TUniqueId, 1024> nearList;
|
||||||
mgr.BuildNearList(nearList, box, CMaterialFilter::MakeInclude(EMaterialTypes::CameraPassthrough), this);
|
mgr.BuildNearList(nearList, box, CMaterialFilter::MakeInclude(EMaterialTypes::Character), this);
|
||||||
|
|
||||||
zeus::CVector3f ret;
|
zeus::CVector3f ret;
|
||||||
for (const auto& id : nearList) {
|
for (const auto& id : nearList) {
|
||||||
|
@ -445,8 +444,7 @@ zeus::CVector3f CFlyingPirate::AvoidActors(CStateManager& mgr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const zeus::CVector3f& playerPos = mgr.GetPlayer().GetTranslation();
|
const zeus::CVector3f& playerPos = mgr.GetPlayer().GetTranslation();
|
||||||
ret += x45c_steeringBehaviors.Separation(*this, {playerPos.x(), playerPos.y(), origin.z()}, 20.f);
|
return ret + x45c_steeringBehaviors.Separation(*this, {playerPos.x(), playerPos.y(), origin.z()}, 20.f);
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFlyingPirate::Bounce(CStateManager& mgr, EStateMsg msg, float arg) {
|
void CFlyingPirate::Bounce(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
|
@ -498,7 +496,7 @@ void CFlyingPirate::CheckForProjectiles(CStateManager& mgr) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const zeus::CVector3f& playerPos = mgr.GetPlayer().GetTranslation();
|
const zeus::CVector3f& playerPos = mgr.GetPlayer().GetTranslation();
|
||||||
zeus::CAABox box(playerPos - 5.f, playerPos + 5.f);
|
const zeus::CAABox box(playerPos - 5.f, playerPos + 5.f);
|
||||||
x6a0_30_ = false;
|
x6a0_30_ = false;
|
||||||
|
|
||||||
rstl::reserved_vector<TUniqueId, 1024> nearList;
|
rstl::reserved_vector<TUniqueId, 1024> nearList;
|
||||||
|
@ -605,9 +603,10 @@ 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 = new CEnergyProjectile(
|
CEnergyProjectile* projectile =
|
||||||
true, pInfo.Token(), EWeaponType::AI, xf, EMaterialTypes::Floor, pInfo.GetDamage(), mgr.AllocateUniqueId(),
|
new CEnergyProjectile(true, pInfo.Token(), EWeaponType::AI, xf, EMaterialTypes::Character, pInfo.GetDamage(),
|
||||||
x4_areaId, x8_uid, target, EProjectileAttrib::None, false, zeus::skOne3f, std::nullopt, -1, false);
|
mgr.AllocateUniqueId(), x4_areaId, x8_uid, target, EProjectileAttrib::None, 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(
|
||||||
|
@ -662,7 +661,7 @@ void CFlyingPirate::MassiveDeath(CStateManager& mgr) {
|
||||||
void CFlyingPirate::FireProjectile(CStateManager& mgr, float dt) {
|
void CFlyingPirate::FireProjectile(CStateManager& mgr, float dt) {
|
||||||
bool projectileFired = false;
|
bool projectileFired = false;
|
||||||
const zeus::CTransform& xf = GetLctrTransform(x7e0_gunSegId);
|
const zeus::CTransform& xf = GetLctrTransform(x7e0_gunSegId);
|
||||||
if (x400_25_alive) {
|
if (!x400_25_alive) {
|
||||||
LaunchProjectile(xf, mgr, 8, EProjectileAttrib::None, false, std::nullopt, -1, false, zeus::skOne3f);
|
LaunchProjectile(xf, mgr, 8, EProjectileAttrib::None, false, std::nullopt, -1, false, zeus::skOne3f);
|
||||||
projectileFired = true;
|
projectileFired = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -674,8 +673,7 @@ void CFlyingPirate::FireProjectile(CStateManager& mgr, float dt) {
|
||||||
}
|
}
|
||||||
zeus::CVector3f dist = origin - xf.origin;
|
zeus::CVector3f dist = origin - xf.origin;
|
||||||
float mag = dist.magnitude();
|
float mag = dist.magnitude();
|
||||||
dist *= zeus::CVector3f(1.f / mag);
|
float fVar13 = xf.frontVector().dot(dist * (1.f / mag));
|
||||||
float fVar13 = xf.frontVector().dot(dist);
|
|
||||||
if (0.707f < fVar13 || (mag < 6.f && 0.5f < fVar13)) {
|
if (0.707f < fVar13 || (mag < 6.f && 0.5f < fVar13)) {
|
||||||
if (LineOfSightTest(mgr, xf.origin, origin, {EMaterialTypes::Player, EMaterialTypes::ProjectilePassthrough})) {
|
if (LineOfSightTest(mgr, xf.origin, origin, {EMaterialTypes::Player, EMaterialTypes::ProjectilePassthrough})) {
|
||||||
origin += x34_transform.rotate(x7ec_burstFire.GetDistanceCompensatedError(mag, 6.f));
|
origin += x34_transform.rotate(x7ec_burstFire.GetDistanceCompensatedError(mag, 6.f));
|
||||||
|
@ -812,9 +810,9 @@ void CFlyingPirate::GetUp(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
|
|
||||||
bool CFlyingPirate::HearPlayer(CStateManager& mgr, float arg) {
|
bool CFlyingPirate::HearPlayer(CStateManager& mgr, float arg) {
|
||||||
const CPlayer& player = mgr.GetPlayer();
|
const CPlayer& player = mgr.GetPlayer();
|
||||||
const float x4squared = x568_data.x4_hearingDistance * x568_data.x4_hearingDistance;
|
const float hearingDist = x568_data.x4_hearingDistance * x568_data.x4_hearingDistance;
|
||||||
return player.GetVelocity().magSquared() > 0.1f &&
|
return player.GetVelocity().magSquared() > 0.1f &&
|
||||||
(player.GetTranslation() - GetTranslation()).magSquared() < x4squared;
|
(player.GetTranslation() - GetTranslation()).magSquared() < hearingDist;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFlyingPirate::HearShot(CStateManager& mgr, float arg) { return x6a0_26_hearShot; }
|
bool CFlyingPirate::HearShot(CStateManager& mgr, float arg) { return x6a0_26_hearShot; }
|
||||||
|
|
Loading…
Reference in New Issue