mirror of https://github.com/AxioDL/metaforce.git
More CThardus imps
This commit is contained in:
parent
b68af83fb3
commit
7847b59705
|
@ -10,6 +10,7 @@
|
||||||
#include "Runtime/CStateManager.hpp"
|
#include "Runtime/CStateManager.hpp"
|
||||||
#include "Runtime/MP1/CSamusHud.hpp"
|
#include "Runtime/MP1/CSamusHud.hpp"
|
||||||
#include "Runtime/MP1/World/CThardusRockProjectile.hpp"
|
#include "Runtime/MP1/World/CThardusRockProjectile.hpp"
|
||||||
|
#include "Runtime/Weapon/CGameProjectile.hpp"
|
||||||
#include "Runtime/World/CActorParameters.hpp"
|
#include "Runtime/World/CActorParameters.hpp"
|
||||||
#include "Runtime/World/CDestroyableRock.hpp"
|
#include "Runtime/World/CDestroyableRock.hpp"
|
||||||
#include "Runtime/World/CGameLight.hpp"
|
#include "Runtime/World/CGameLight.hpp"
|
||||||
|
@ -22,6 +23,7 @@
|
||||||
#include "TCastTo.hpp" // Generated file, do not modify include path
|
#include "TCastTo.hpp" // Generated file, do not modify include path
|
||||||
|
|
||||||
#include <DataSpec/DNAMP1/SFX/IceWorld.h>
|
#include <DataSpec/DNAMP1/SFX/IceWorld.h>
|
||||||
|
#include <DataSpec/DNAMP1/SFX/Thardus.h>
|
||||||
namespace urde::MP1 {
|
namespace urde::MP1 {
|
||||||
namespace {
|
namespace {
|
||||||
constexpr std::array<SSphereJointInfo, 7> skDamageableSphereJointInfoList1{{
|
constexpr std::array<SSphereJointInfo, 7> skDamageableSphereJointInfoList1{{
|
||||||
|
@ -428,6 +430,44 @@ void CThardus::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateMa
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EScriptObjectMessage::Damage: {
|
case EScriptObjectMessage::Damage: {
|
||||||
|
if (TCastToPtr<CCollisionActor> colAct = mgr.ObjectById(uid)) {
|
||||||
|
TUniqueId lastTouchedObj = colAct->GetLastTouchedObject();
|
||||||
|
TUniqueId targetRock = kInvalidUniqueId;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < x5f0_rockColliders->GetNumCollisionActors(); ++i) {
|
||||||
|
const CJointCollisionDescription& desc = x5f0_rockColliders->GetCollisionDescFromIndex(i);
|
||||||
|
if (desc.GetCollisionActorId() == uid) {
|
||||||
|
targetRock = x610_destroyableRocks[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetRock == kInvalidUniqueId) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (CDestroyableRock* rock = static_cast<CDestroyableRock*>(mgr.ObjectById(targetRock))) {
|
||||||
|
if (TCastToConstPtr<CGameProjectile> proj = mgr.GetObjectById(lastTouchedObj)) {
|
||||||
|
if (GetBodyController()->GetBodyStateInfo().GetCurrentAdditiveStateId() !=
|
||||||
|
pas::EAnimationState::AdditiveReaction &&
|
||||||
|
rock->Get_x324() <= 0.f) {
|
||||||
|
GetBodyController()->GetCommandMgr().DeliverCmd(
|
||||||
|
CBCAdditiveReactionCmd(pas::EAdditiveReactionType::Five, 1.f, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
rock->TakeDamage(zeus::skZero3f, 0.f);
|
||||||
|
const bool thermalInactive = mgr.GetPlayerState()->GetCurrentVisor() != CPlayerState::EPlayerVisor::Thermal;
|
||||||
|
if (thermalInactive || (!thermalInactive && x7c4_ != 3)) {
|
||||||
|
sub801dc444(mgr, proj->GetTranslation(), x6d0_);
|
||||||
|
}
|
||||||
|
if (!rock->IsUsingPhazonModel()) {
|
||||||
|
ProcessSoundEvent(x75c_, 1.f, 0, 0.1f, 1000.f, 0.16f, 1.f, zeus::skZero3f, rock->GetTranslation(),
|
||||||
|
mgr.GetNextAreaId(), mgr, true);
|
||||||
|
} else {
|
||||||
|
ProcessSoundEvent(SFXsfx0AC0, 1.f, 0, 0.1f, 1000.f, 0.16f, 1.f, zeus::skZero3f, rock->GetTranslation(),
|
||||||
|
mgr.GetNextAreaId(), mgr, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -559,8 +599,8 @@ void CThardus::Attack(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void CThardus::LoopedAttack(CStateManager& mgr, EStateMsg msg, float arg) { CAi::LoopedAttack(mgr, msg, arg); }
|
void CThardus::LoopedAttack(CStateManager& mgr, EStateMsg msg, float arg) { CAi::LoopedAttack(mgr, msg, arg); }
|
||||||
void CThardus::DoubleSnap(CStateManager& mgr, EStateMsg msg, float arg) { }
|
void CThardus::DoubleSnap(CStateManager& mgr, EStateMsg msg, float arg) {}
|
||||||
void CThardus::Shuffle(CStateManager& mgr, EStateMsg msg, float arg) { }
|
void CThardus::Shuffle(CStateManager& mgr, EStateMsg msg, float arg) {}
|
||||||
void CThardus::GetUp(CStateManager& mgr, EStateMsg msg, float arg) {
|
void CThardus::GetUp(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
if (msg != EStateMsg::Activate)
|
if (msg != EStateMsg::Activate)
|
||||||
return;
|
return;
|
||||||
|
@ -611,6 +651,7 @@ void CThardus::ProjectileAttack(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CThardus::Flinch(CStateManager& mgr, EStateMsg msg, float arg) {
|
void CThardus::Flinch(CStateManager& mgr, EStateMsg msg, float arg) {
|
||||||
if (msg == EStateMsg::Activate) {
|
if (msg == EStateMsg::Activate) {
|
||||||
for (TUniqueId uid : x798_) {
|
for (TUniqueId uid : x798_) {
|
||||||
|
@ -782,11 +823,16 @@ bool CThardus::InRange(CStateManager& mgr, float arg) {
|
||||||
return (mgr.GetPlayer().GetTranslation().toVec2f() - GetTranslation().toVec2f()).magnitude() <
|
return (mgr.GetPlayer().GetTranslation().toVec2f() - GetTranslation().toVec2f()).magnitude() <
|
||||||
10.f * GetModelData()->GetScale().x();
|
10.f * GetModelData()->GetScale().x();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CThardus::PatternOver(CStateManager& mgr, float arg) { return !x574_waypoints.empty() || x93b_; }
|
bool CThardus::PatternOver(CStateManager& mgr, float arg) { return !x574_waypoints.empty() || x93b_; }
|
||||||
bool CThardus::AnimOver(CStateManager& mgr, float arg) { return x5ec_ == 3; }
|
bool CThardus::AnimOver(CStateManager& mgr, float arg) { return x5ec_ == 3; }
|
||||||
bool CThardus::InPosition(CStateManager& mgr, float arg) { return CPatterned::InPosition(mgr, arg); }
|
bool CThardus::InPosition(CStateManager& mgr, float arg) { return x660_repulsors.size() > 3; }
|
||||||
bool CThardus::ShouldTurn(CStateManager& mgr, float arg) { return CAi::ShouldTurn(mgr, arg); }
|
bool CThardus::ShouldTurn(CStateManager& mgr, float arg) {
|
||||||
bool CThardus::HitSomething(CStateManager& mgr, float arg) { return CAi::HitSomething(mgr, arg); }
|
return std::fabs(zeus::CVector2f::getAngleDiff(GetTransform().frontVector().toVec2f(),
|
||||||
|
mgr.GetPlayer().GetTranslation().toVec2f() -
|
||||||
|
GetTranslation().toVec2f())) > zeus::degToRad(30.f);
|
||||||
|
}
|
||||||
|
bool CThardus::HitSomething(CStateManager& mgr, float arg) { return mgr.GetPlayer().GetFrozenState(); }
|
||||||
|
|
||||||
void CThardus::GatherWaypoints(urde::CScriptWaypoint* wp, urde::CStateManager& mgr,
|
void CThardus::GatherWaypoints(urde::CScriptWaypoint* wp, urde::CStateManager& mgr,
|
||||||
rstl::reserved_vector<TUniqueId, 16>& uids) {
|
rstl::reserved_vector<TUniqueId, 16>& uids) {
|
||||||
|
|
|
@ -149,9 +149,11 @@ class CThardus : public CPatterned {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void sub801dae2c(CStateManager& mgr, u32 rockIndex);
|
void sub801dae2c(CStateManager& mgr, u32 rockIndex);
|
||||||
|
|
||||||
void sub801dc444(CStateManager& mgr, const zeus::CVector3f& pos, CAssetId particle);
|
void sub801dc444(CStateManager& mgr, const zeus::CVector3f& pos, CAssetId particle);
|
||||||
void sub801dbc5c(CStateManager& mgr, CDestroyableRock* rock);
|
void sub801dbc5c(CStateManager& mgr, CDestroyableRock* rock);
|
||||||
void sub801dbbdc(CStateManager& mgr, CDestroyableRock* rock);
|
void sub801dbbdc(CStateManager& mgr, CDestroyableRock* rock);
|
||||||
|
bool sub801dc2c8() { return (x610_destroyableRocks.size() - 1) > x648_currentRock; }
|
||||||
void UpdateNonDestroyableCollisionActorMaterials(EUpdateMaterialMode mode, EMaterialTypes mat, CStateManager& mgr);
|
void UpdateNonDestroyableCollisionActorMaterials(EUpdateMaterialMode mode, EMaterialTypes mat, CStateManager& mgr);
|
||||||
void UpdateExcludeList(const std::unique_ptr<CCollisionActorManager>& colMgr, EUpdateMaterialMode mode,
|
void UpdateExcludeList(const std::unique_ptr<CCollisionActorManager>& colMgr, EUpdateMaterialMode mode,
|
||||||
EMaterialTypes mat, CStateManager& mgr);
|
EMaterialTypes mat, CStateManager& mgr);
|
||||||
|
@ -165,6 +167,10 @@ class CThardus : public CPatterned {
|
||||||
|
|
||||||
std::optional<CTexturedQuadFilter> m_flareFilter;
|
std::optional<CTexturedQuadFilter> m_flareFilter;
|
||||||
|
|
||||||
|
void DoDoubleSnap(CStateManager& mgr) {
|
||||||
|
x330_stateMachineState.SetState(mgr, *this, GetStateMachine(), "DoubleSnap"sv);
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DEFINE_PATTERNED(Thardus);
|
DEFINE_PATTERNED(Thardus);
|
||||||
CThardus(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
|
CThardus(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
|
||||||
|
|
|
@ -51,6 +51,7 @@ public:
|
||||||
|
|
||||||
void Think(float dt, CStateManager& mgr) override;
|
void Think(float dt, CStateManager& mgr) override;
|
||||||
|
|
||||||
|
float Get_x324() const { return x324_; }
|
||||||
void Set_x32c(float val) { x32c_thermalMag = val; }
|
void Set_x32c(float val) { x32c_thermalMag = val; }
|
||||||
void SetIsCold(bool v) { x334_isCold = v; }
|
void SetIsCold(bool v) { x334_isCold = v; }
|
||||||
bool IsUsingPhazonModel() const { return x335_usePhazonModel; }
|
bool IsUsingPhazonModel() const { return x335_usePhazonModel; }
|
||||||
|
|
Loading…
Reference in New Issue