mirror of https://github.com/AxioDL/metaforce.git
Import CAmbientAI fixes from decomp
This commit is contained in:
parent
d6e8d373ac
commit
c55289143f
|
@ -29,31 +29,36 @@ void CAmbientAI::Think(float dt, CStateManager& mgr) {
|
||||||
if (!GetActive())
|
if (!GetActive())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (GetModelData() && GetModelData()->GetAnimationData()) {
|
if (GetModelData() && GetModelData()->GetAnimationData() != nullptr) {
|
||||||
bool hasAnimTime = GetModelData()->GetAnimationData()->IsAnimTimeRemaining(dt - FLT_EPSILON, "Whole Body"sv);
|
bool hasAnimTime = GetModelData()->GetAnimationData()->IsAnimTimeRemaining(
|
||||||
|
dt - FLT_EPSILON, "Whole Body"sv);
|
||||||
bool isLooping = GetModelData()->GetIsLoop();
|
bool isLooping = GetModelData()->GetIsLoop();
|
||||||
|
|
||||||
if (hasAnimTime || isLooping) {
|
if (hasAnimTime || isLooping) {
|
||||||
x2e8_25_animating = true;
|
x2e8_25_animating = true;
|
||||||
SAdvancementDeltas deltas = UpdateAnimation(dt, mgr, x2e8_25_animating);
|
SAdvancementDeltas deltas = UpdateAnimation(dt, mgr, true);
|
||||||
MoveToOR(deltas.x0_posDelta, dt);
|
MoveToOR(deltas.x0_posDelta, dt);
|
||||||
RotateToOR(deltas.xc_rotDelta, dt);
|
RotateToOR(deltas.xc_rotDelta, dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasAnimTime || (x2e8_25_animating && !isLooping)) {
|
if (hasAnimTime) {
|
||||||
|
} else if (x2e8_25_animating && !isLooping) {
|
||||||
SendScriptMsgs(EScriptObjectState::MaxReached, mgr, EScriptObjectMessage::None);
|
SendScriptMsgs(EScriptObjectState::MaxReached, mgr, EScriptObjectMessage::None);
|
||||||
x2e8_25_animating = false;
|
x2e8_25_animating = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool inAlertRange = (mgr.GetPlayer().GetTranslation() - GetTranslation()).magnitude() < x2d4_alertRange;
|
bool inAlertRange =
|
||||||
bool inImpactRange = (mgr.GetPlayer().GetTranslation() - GetTranslation()).magnitude() < x2d8_impactRange;
|
(mgr.GetPlayer().GetTranslation() - GetTranslation()).magnitude() < x2d4_alertRange;
|
||||||
|
bool inImpactRange =
|
||||||
|
(mgr.GetPlayer().GetTranslation() - GetTranslation()).magnitude() < x2d8_impactRange;
|
||||||
|
|
||||||
switch (x2d0_animState) {
|
switch (x2d0_animState) {
|
||||||
case EAnimationState::Ready: {
|
case EAnimationState::Ready: {
|
||||||
if (inAlertRange) {
|
if (inAlertRange) {
|
||||||
x2d0_animState = EAnimationState::Alert;
|
x2d0_animState = EAnimationState::Alert;
|
||||||
GetModelData()->GetAnimationData()->SetAnimation(CAnimPlaybackParms(x2e0_alertAnim, -1, 1.f, true), false);
|
GetModelData()->GetAnimationData()->SetAnimation(CAnimPlaybackParms(x2e0_alertAnim, -1, 1.f, true),
|
||||||
|
false);
|
||||||
GetModelData()->EnableLooping(true);
|
GetModelData()->EnableLooping(true);
|
||||||
RandomizePlaybackRate(mgr);
|
RandomizePlaybackRate(mgr);
|
||||||
}
|
}
|
||||||
|
@ -62,11 +67,13 @@ void CAmbientAI::Think(float dt, CStateManager& mgr) {
|
||||||
case EAnimationState::Alert: {
|
case EAnimationState::Alert: {
|
||||||
if (!inAlertRange) {
|
if (!inAlertRange) {
|
||||||
x2d0_animState = EAnimationState::Ready;
|
x2d0_animState = EAnimationState::Ready;
|
||||||
GetModelData()->GetAnimationData()->SetAnimation(CAnimPlaybackParms(x2dc_defaultAnim, -1, 1.f, true), false);
|
GetModelData()->GetAnimationData()->SetAnimation(
|
||||||
|
CAnimPlaybackParms(x2dc_defaultAnim, -1, 1.f, true), false);
|
||||||
GetModelData()->EnableLooping(true);
|
GetModelData()->EnableLooping(true);
|
||||||
RandomizePlaybackRate(mgr);
|
RandomizePlaybackRate(mgr);
|
||||||
} else if (inImpactRange) {
|
} else if (inImpactRange) {
|
||||||
SendScriptMsgs(EScriptObjectState::Dead, mgr, EScriptObjectMessage::None);
|
SendScriptMsgs(EScriptObjectState::Dead, mgr, EScriptObjectMessage::None);
|
||||||
|
RemoveEmitter();
|
||||||
SetActive(false);
|
SetActive(false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -74,7 +81,8 @@ void CAmbientAI::Think(float dt, CStateManager& mgr) {
|
||||||
case EAnimationState::Impact: {
|
case EAnimationState::Impact: {
|
||||||
if (!x2e8_25_animating) {
|
if (!x2e8_25_animating) {
|
||||||
x2d0_animState = EAnimationState::Ready;
|
x2d0_animState = EAnimationState::Ready;
|
||||||
GetModelData()->GetAnimationData()->SetAnimation(CAnimPlaybackParms(x2dc_defaultAnim, -1, 1.f, true), false);
|
GetModelData()->GetAnimationData()->SetAnimation(
|
||||||
|
CAnimPlaybackParms(x2dc_defaultAnim, -1, 1.f, true), false);
|
||||||
GetModelData()->EnableLooping(true);
|
GetModelData()->EnableLooping(true);
|
||||||
RandomizePlaybackRate(mgr);
|
RandomizePlaybackRate(mgr);
|
||||||
}
|
}
|
||||||
|
@ -82,14 +90,15 @@ void CAmbientAI::Think(float dt, CStateManager& mgr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!x2e8_24_dead) {
|
if (x2e8_24_dead) {
|
||||||
CHealthInfo* hInfo = HealthInfo(mgr);
|
return;
|
||||||
if (hInfo->GetHP() <= 0.f) {
|
}
|
||||||
x2e8_24_dead = true;
|
CHealthInfo* hInfo = HealthInfo(mgr);
|
||||||
SendScriptMsgs(EScriptObjectState::Dead, mgr, EScriptObjectMessage::None);
|
if (hInfo->GetHP() <= 0.f) {
|
||||||
RemoveEmitter();
|
x2e8_24_dead = true;
|
||||||
SetActive(false);
|
SendScriptMsgs(EScriptObjectState::Dead, mgr, EScriptObjectMessage::None);
|
||||||
}
|
RemoveEmitter();
|
||||||
|
SetActive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,6 +115,9 @@ void CAmbientAI::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CState
|
||||||
x260_healthInfo = x258_initialHealthInfo;
|
x260_healthInfo = x258_initialHealthInfo;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case EScriptObjectMessage::InitializedInArea:
|
||||||
|
RandomizePlaybackRate(mgr);
|
||||||
|
break;
|
||||||
case EScriptObjectMessage::Damage: {
|
case EScriptObjectMessage::Damage: {
|
||||||
if (GetActive()) {
|
if (GetActive()) {
|
||||||
x2d0_animState = EAnimationState::Impact;
|
x2d0_animState = EAnimationState::Impact;
|
||||||
|
@ -115,9 +127,6 @@ void CAmbientAI::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CState
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EScriptObjectMessage::InitializedInArea:
|
|
||||||
RandomizePlaybackRate(mgr);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue