mirror of https://github.com/AxioDL/metaforce.git
CIceSheegoth: Minor fixes
This commit is contained in:
parent
97a25f01e2
commit
1b1907d910
|
@ -223,6 +223,7 @@ void CIceSheegoth::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, C
|
||||||
case EScriptObjectMessage::InitializedInArea: {
|
case EScriptObjectMessage::InitializedInArea: {
|
||||||
x760_pathSearch.SetArea(mgr.GetWorld()->GetArea(GetAreaIdAlways())->GetPostConstructed()->x10bc_pathArea);
|
x760_pathSearch.SetArea(mgr.GetWorld()->GetArea(GetAreaIdAlways())->GetPostConstructed()->x10bc_pathArea);
|
||||||
x844_approachSearch.SetArea(mgr.GetWorld()->GetArea(GetAreaIdAlways())->GetPostConstructed()->x10bc_pathArea);
|
x844_approachSearch.SetArea(mgr.GetWorld()->GetArea(GetAreaIdAlways())->GetPostConstructed()->x10bc_pathArea);
|
||||||
|
// TODO: Remove this
|
||||||
mgr.SetBossParams(GetUniqueId(), GetHealthInfo(mgr)->GetHP(), 0);
|
mgr.SetBossParams(GetUniqueId(), GetHealthInfo(mgr)->GetHP(), 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -561,8 +562,10 @@ void CIceSheegoth::AddSphereCollisionList(const SSphereJointInfo* info, size_t c
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
vecOut.push_back(CJointCollisionDescription::SphereCollision(id, joint.radius, joint.name, 1000.f));
|
vecOut.push_back(CJointCollisionDescription::SphereCollision(id, joint.radius, joint.name, 1000.f));
|
||||||
|
xb1c_.push_back(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CIceSheegoth::AddCollisionList(const SJointInfo* info, size_t count,
|
void CIceSheegoth::AddCollisionList(const SJointInfo* info, size_t count,
|
||||||
std::vector<CJointCollisionDescription>& vecOut) {
|
std::vector<CJointCollisionDescription>& vecOut) {
|
||||||
for (size_t i = 0; i < count; ++i) {
|
for (size_t i = 0; i < count; ++i) {
|
||||||
|
@ -593,15 +596,14 @@ void CIceSheegoth::SetupCollisionActorManager(CStateManager& mgr) {
|
||||||
const auto& desc = xa2c_collisionManager->GetCollisionDescFromIndex(i);
|
const auto& desc = xa2c_collisionManager->GetCollisionDescFromIndex(i);
|
||||||
if (TCastToPtr<CCollisionActor> colAct = mgr.ObjectById(desc.GetCollisionActorId())) {
|
if (TCastToPtr<CCollisionActor> colAct = mgr.ObjectById(desc.GetCollisionActorId())) {
|
||||||
colAct->SetDamageVulnerability(CDamageVulnerability::ImmuneVulnerabilty());
|
colAct->SetDamageVulnerability(CDamageVulnerability::ImmuneVulnerabilty());
|
||||||
if (desc.GetName().find("LCTR_SHEMOUTH"sv) != std::string_view::npos) {
|
if (desc.GetName() == "LCTR_SHEMOUTH"sv) {
|
||||||
xaf8_mouthCollider = desc.GetCollisionActorId();
|
xaf8_mouthCollider = desc.GetCollisionActorId();
|
||||||
colAct->SetDamageVulnerability(x98c_mouthVulnerability);
|
colAct->SetDamageVulnerability(x98c_mouthVulnerability);
|
||||||
} else if (desc.GetName().find("Jaw_end_LCTR"sv) != std::string_view::npos) {
|
} else if (desc.GetName() == "Jaw_end_LCTR"sv) {
|
||||||
colAct->SetDamageVulnerability(CDamageVulnerability::PassThroughVulnerabilty());
|
colAct->SetDamageVulnerability(CDamageVulnerability::PassThroughVulnerabilty());
|
||||||
} else if (desc.GetName().find("Ice_Shards_LCTR"sv) != std::string_view::npos) {
|
} else if (desc.GetName() == "Ice_Shards_LCTR"sv) {
|
||||||
colAct->SetWeaponCollisionResponseType(EWeaponCollisionResponseTypes::None);
|
colAct->SetWeaponCollisionResponseType(EWeaponCollisionResponseTypes::None);
|
||||||
} else if (desc.GetName().find("GillL_LCTR"sv) != std::string_view::npos ||
|
} else if (desc.GetName() == "GillL_LCTR"sv || desc.GetName() == "GillR_LCTR"sv) {
|
||||||
desc.GetName().find("GillR_LCTR"sv) != std::string_view::npos) {
|
|
||||||
xafc_.emplace_back(desc.GetCollisionActorId());
|
xafc_.emplace_back(desc.GetCollisionActorId());
|
||||||
} else {
|
} else {
|
||||||
xb04_.emplace_back(desc.GetCollisionActorId());
|
xb04_.emplace_back(desc.GetCollisionActorId());
|
||||||
|
@ -675,7 +677,43 @@ void CIceSheegoth::sub_8019eb50(CStateManager& mgr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void CIceSheegoth::PreventWorldCollisions(float dt, CStateManager& mgr) {}
|
void CIceSheegoth::PreventWorldCollisions(float dt, CStateManager& mgr) {
|
||||||
|
if (GetBodyController()->GetLocomotionType() == pas::ELocomotionType::Crouch || !IsOnGround() ||
|
||||||
|
mgr.GetPlayer().GetMorphballTransitionState() == CPlayer::EPlayerMorphBallState::Morphed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
zeus::CAABox ourBox = GetModelData()->GetBounds(GetTransform());
|
||||||
|
zeus::CAABox plBox = mgr.GetPlayer().GetBoundingBox();
|
||||||
|
if (!ourBox.intersects(plBox)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
zeus::CVector3f maxDeviation = zeus::skZero3f;
|
||||||
|
float lastMag = 0.f;
|
||||||
|
zeus::CVector3f predictedTrans = PredictMotion(dt).x0_translation;
|
||||||
|
for (CSegId uid : xb1c_) {
|
||||||
|
auto deviation = xa2c_collisionManager->GetDeviation(mgr, uid);
|
||||||
|
if (!deviation) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const zeus::CVector3f curDeviation = ((*deviation) + predictedTrans);
|
||||||
|
if (curDeviation.magnitude() > lastMag) {
|
||||||
|
maxDeviation = curDeviation;
|
||||||
|
lastMag = curDeviation.magnitude();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastMag <= (0.6f * GetModelData()->GetScale().y())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
zeus::CVector3f posDiff = GetTranslation() - mgr.GetPlayer().GetTranslation();
|
||||||
|
const zeus::CVector3f direction = GetTransform().transposeRotate(
|
||||||
|
(posDiff.dot(posDiff * maxDeviation.normalized()) / posDiff.magSquared()) * posDiff);
|
||||||
|
ApplyImpulseOR(GetMoveToORImpulseWR(direction, dt), zeus::CAxisAngle{});
|
||||||
|
}
|
||||||
|
|
||||||
void CIceSheegoth::sub_8019f680(CStateManager& mgr) {}
|
void CIceSheegoth::sub_8019f680(CStateManager& mgr) {}
|
||||||
void CIceSheegoth::sub_8019f5cc(float dt, CStateManager& mgr) {}
|
void CIceSheegoth::sub_8019f5cc(float dt, CStateManager& mgr) {}
|
||||||
void CIceSheegoth::UpdateParticleEffects(float dt, CStateManager& mgr) {}
|
void CIceSheegoth::UpdateParticleEffects(float dt, CStateManager& mgr) {}
|
||||||
|
|
|
@ -121,7 +121,8 @@ class CIceSheegoth : public CPatterned {
|
||||||
TUniqueId xaf6_ = kInvalidUniqueId;
|
TUniqueId xaf6_ = kInvalidUniqueId;
|
||||||
TUniqueId xaf8_mouthCollider = kInvalidUniqueId;
|
TUniqueId xaf8_mouthCollider = kInvalidUniqueId;
|
||||||
rstl::reserved_vector<TUniqueId, 2> xafc_;
|
rstl::reserved_vector<TUniqueId, 2> xafc_;
|
||||||
rstl::reserved_vector<TUniqueId, 11> xb04_;
|
rstl::reserved_vector<TUniqueId, 10> xb04_;
|
||||||
|
rstl::reserved_vector<CSegId, 7> xb1c_;
|
||||||
bool xb28_24_shotAt : 1;
|
bool xb28_24_shotAt : 1;
|
||||||
bool xb28_25_ : 1;
|
bool xb28_25_ : 1;
|
||||||
bool xb28_26_ : 1;
|
bool xb28_26_ : 1;
|
||||||
|
|
Loading…
Reference in New Issue