mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-08 22:27:43 +00:00
Finish CScriptActor
This commit is contained in:
@@ -22,12 +22,12 @@ CScriptActor::CScriptActor(TUniqueId uid, const std::string& name, const CEntity
|
||||
, x2d8_(w1)
|
||||
, x2dc_xrayAlpha(f3)
|
||||
, x2e2_24_(b2)
|
||||
, x2e2_25_(false)
|
||||
, x2e2_26_(true)
|
||||
, x2e2_25_dead(false)
|
||||
, x2e2_26_animating(true)
|
||||
, x2e2_27_(std::fabs(f3 - 1.f) > 0.00001)
|
||||
, x2e2_28_(false)
|
||||
, x2e2_29_((x2e2_24_ && x2e2_25_ && x2d8_ != 0))
|
||||
, x2e2_30_(b4)
|
||||
, x2e2_29_((x2e2_24_ && x2e2_25_dead && x2d8_ != 0))
|
||||
, x2e2_30_transposeRotate(b4)
|
||||
, x2e2_31_(b5)
|
||||
{
|
||||
if (x64_modelData && (x64_modelData->HasAnimData() || x64_modelData->HasNormalModel()) && castsShadow)
|
||||
@@ -45,17 +45,17 @@ void CScriptActor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CSta
|
||||
{
|
||||
if (msg == EScriptObjectMessage::Reset)
|
||||
{
|
||||
x2e2_25_ = false;
|
||||
x2e2_25_dead = false;
|
||||
x260_currentHealth = x258_initialHealth;
|
||||
}
|
||||
else if (msg == EScriptObjectMessage::Increment && !GetActive())
|
||||
{
|
||||
mgr.SendScriptMsg(this, x8_uid, EScriptObjectMessage::Activate);
|
||||
CScriptColorModulate::FadeInHelper(mgr, x8_uid, x2d0_);
|
||||
CScriptColorModulate::FadeInHelper(mgr, x8_uid, x2d0_alphaMax);
|
||||
}
|
||||
else if (msg == EScriptObjectMessage::Decrement)
|
||||
{
|
||||
CScriptColorModulate::FadeOutHelper(mgr, x8_uid, x2d4_);
|
||||
CScriptColorModulate::FadeOutHelper(mgr, x8_uid, x2d4_alphaMin);
|
||||
}
|
||||
else if (msg == EScriptObjectMessage::InternalMessage13)
|
||||
{
|
||||
@@ -89,14 +89,87 @@ void CScriptActor::Think(float dt, CStateManager& mgr)
|
||||
|
||||
if (HasModelData() && x64_modelData->HasAnimData())
|
||||
{
|
||||
bool animTimeRemaining = x64_modelData->GetAnimationData()->IsAnimTimeRemaining(dt - FLT_EPSILON, "Whole Body");
|
||||
bool timeRemaining = x64_modelData->GetAnimationData()->IsAnimTimeRemaining(dt - FLT_EPSILON, "Whole Body");
|
||||
bool loop = x64_modelData->GetIsLoop();
|
||||
|
||||
CActor::UpdateAnimation(dt, mgr, true);
|
||||
SAdvancementDeltas deltas = CActor::UpdateAnimation(dt, mgr, true);
|
||||
|
||||
if (timeRemaining || loop)
|
||||
{
|
||||
x2e2_26_animating = true;
|
||||
|
||||
if (x2e2_30_transposeRotate)
|
||||
MoveToOR(
|
||||
x34_transform.rotate(x64_modelData->GetScale() * x34_transform.transposeRotate(deltas.x0_posDelta)),
|
||||
dt);
|
||||
else
|
||||
MoveToOR(deltas.x0_posDelta, dt);
|
||||
|
||||
RotateToOR(deltas.xc_rotDelta, dt);
|
||||
}
|
||||
|
||||
if (!timeRemaining && x2e2_26_animating && !loop)
|
||||
{
|
||||
SendScriptMsgs(EScriptObjectState::MaxReached, mgr, EScriptObjectMessage::None);
|
||||
x2e2_26_animating = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!x2e2_25_dead && HealthInfo()->GetHP() <= 0.f)
|
||||
{
|
||||
x2e2_25_dead = true;
|
||||
SendScriptMsgs(EScriptObjectState::Dead, mgr, EScriptObjectMessage::None);
|
||||
}
|
||||
}
|
||||
|
||||
void CScriptActor::PreRender(CStateManager& mgr, const zeus::CFrustum& frustum) {}
|
||||
void CScriptActor::PreRender(CStateManager& mgr, const zeus::CFrustum& frustum)
|
||||
{
|
||||
CActor::PreRender(mgr, frustum);
|
||||
|
||||
if (xe4_30_ && TCastToPtr<CCinematicCamera>(mgr.GetCameraManager()->GetCurrentCamera(mgr)))
|
||||
xe4_30_ = false;
|
||||
|
||||
if (xe4_30_ && !x2e2_29_ && !x2e2_27_)
|
||||
{
|
||||
zeus::CColor col(1.f, 1.f, x2dc_xrayAlpha);
|
||||
if (mgr.GetPlayerState()->GetActiveVisor(mgr) == CPlayerState::EPlayerVisor::XRay)
|
||||
{
|
||||
xb4_ = 5;
|
||||
xb5_ = 0;
|
||||
xb6_ = 3;
|
||||
xb8_ = col;
|
||||
x2e2_28_ = true;
|
||||
}
|
||||
|
||||
if (x2e2_28_)
|
||||
{
|
||||
x2e2_28_ = false;
|
||||
if (xb4_ != 5 && xb5_ != 0 && xb4_ != 3 && xb8_ != col)
|
||||
{
|
||||
xb4_ = 5;
|
||||
xb5_ = 0;
|
||||
xb6_ = 3;
|
||||
xb8_ = col;
|
||||
}
|
||||
}
|
||||
|
||||
if (!x2e2_24_ && xe6_27_ == 2 &&
|
||||
mgr.GetPlayerState()->GetActiveVisor(mgr) == CPlayerState::EPlayerVisor::XRay)
|
||||
{
|
||||
xb6_ &= ~3;
|
||||
}
|
||||
else
|
||||
{
|
||||
xb6_ |= 3;
|
||||
}
|
||||
|
||||
if (x2d8_ != 0)
|
||||
xb5_ = 0;
|
||||
}
|
||||
|
||||
if (mgr.GetObjectById(x2e0_triggerId) == nullptr)
|
||||
x2e0_triggerId = kInvalidUniqueId;
|
||||
}
|
||||
|
||||
zeus::CAABox CScriptActor::GetSortingBounds(const CStateManager& mgr) const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user