2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-08 22:27:43 +00:00

zeus constexpr refactor and thermal visor fixes

This commit is contained in:
Jack Andersen
2019-02-23 21:15:54 -10:00
parent 1186b8097c
commit 8df0a4913c
226 changed files with 1339 additions and 1305 deletions

View File

@@ -24,8 +24,8 @@ CSamusHud::CSamusHud(CStateManager& stateMgr)
, m_energyDrainFilter(g_tweakGui->GetEnergyDrainFilterAdditive() ? EFilterType::Add : EFilterType::Blend) {
x2e0_26_latestFirstPerson = true;
x2e0_27_energyLow = stateMgr.GetPlayer().IsEnergyLow(stateMgr);
x33c_lights = std::make_unique<CActorLights>(8, zeus::CVector3f::skZero, 4, 1, true, 0, 0, 0.1f);
x340_hudLights.resize(3, SCachedHudLight(zeus::CVector3f::skZero, zeus::CColor::skWhite, 0.f, 0.f, 0.f, 0.f));
x33c_lights = std::make_unique<CActorLights>(8, zeus::skZero3f, 4, 1, true, 0, 0, 0.1f);
x340_hudLights.resize(3, SCachedHudLight(zeus::skZero3f, zeus::skWhite, 0.f, 0.f, 0.f, 0.f));
x46c_.resize(3);
x568_fpCamDir = stateMgr.GetCameraManager()->GetFirstPersonCamera()->GetTransform().basis[1];
x5a4_videoBands.resize(4);
@@ -102,7 +102,7 @@ void CSamusHud::InitializeFrameGluePermanent(const CStateManager& mgr) {
x5a0_base_model_abutton = static_cast<CGuiModel*>(x274_loadedFrmeBaseHud->FindWidget("model_abutton"));
for (int i = 0; i < 4; ++i)
x5d8_guiLights[i] = x264_loadedFrmeHelmet->GetFrameLight(i);
x5d8_guiLights[3]->SetColor(zeus::CColor::skBlack);
x5d8_guiLights[3]->SetColor(zeus::skBlack);
for (int i = 0; i < 4; ++i) {
SVideoBand& band = x5a4_videoBands[i];
band.x0_videoband =
@@ -292,10 +292,10 @@ void CSamusHud::InitializeDamageLight() {
false, false);
std::shared_ptr<CGuiLight> light = std::make_shared<CGuiLight>(
parms, CLight::BuildSpot(zeus::CVector3f::skZero, zeus::CVector3f::skForward, zeus::CColor::skWhite,
parms, CLight::BuildSpot(zeus::skZero3f, zeus::skForward, zeus::skWhite,
g_tweakGui->GetHudDamageLightSpotAngle()));
x3d4_damageLight = light.get();
x3d4_damageLight->SetColor(zeus::CColor::skBlack);
x3d4_damageLight->SetColor(zeus::skBlack);
zeus::CColor lightColor = g_tweakGuiColors->GetHudFrameColor();
lightColor *= lightColor.a();
@@ -309,7 +309,7 @@ void CSamusHud::InitializeDamageLight() {
x3d4_damageLight->SetAngleQ(g_tweakGui->GetDamageLightAngleQ());
x3d4_damageLight->SetLightId(4);
x3d4_damageLight->SetLocalTransform(zeus::CTransform::Identity());
x3d4_damageLight->SetLocalTransform(zeus::CTransform());
x288_loadedSelectedHud->RegisterLight(std::move(light));
x288_loadedSelectedHud->FindWidget(parentId)->AddChildWidget(x3d4_damageLight, false, true);
@@ -516,7 +516,7 @@ void CSamusHud::UpdateThreatAssessment(float dt, const CStateManager& mgr) {
CMaterialFilter::EFilterType::Include);
CPlayer& player = mgr.GetPlayer();
zeus::CAABox playerAABB = zeus::CAABox::skNullBox;
zeus::CAABox playerAABB = zeus::skNullBox;
if (rstl::optional<zeus::CAABox> aabb = player.GetTouchBounds())
playerAABB = *aabb;
@@ -600,14 +600,14 @@ void CSamusHud::UpdateEnergyLow(float dt, const CStateManager& mgr) {
void CSamusHud::ApplyClassicLag(const zeus::CUnitVector3f& lookDir, zeus::CQuaternion& rot, const CStateManager& mgr,
float dt, bool invert) {
zeus::CQuaternion lookRot = zeus::CQuaternion::lookAt(lookDir, zeus::CVector3f::skForward, 2.f * M_PIF);
zeus::CQuaternion lookRot = zeus::CQuaternion::lookAt(lookDir, zeus::skForward, 2.f * M_PIF);
zeus::CQuaternion lookRot2;
if (invert) {
zeus::CUnitVector3f v1(lookRot.transform(x2f8_fpCamDir));
lookRot2 = zeus::CQuaternion::lookAt(v1, zeus::CVector3f::skForward, 2.f * M_PIF);
lookRot2 = zeus::CQuaternion::lookAt(v1, zeus::skForward, 2.f * M_PIF);
} else {
zeus::CUnitVector3f v1(lookRot.transform(x2f8_fpCamDir));
lookRot2 = zeus::CQuaternion::lookAt(zeus::CVector3f::skForward, v1, 2.f * M_PIF);
lookRot2 = zeus::CQuaternion::lookAt(zeus::skForward, v1, 2.f * M_PIF);
}
zeus::CQuaternion doubleRot = lookRot2 * lookRot2;
@@ -632,19 +632,19 @@ void CSamusHud::UpdateHudLag(float dt, const CStateManager& mgr) {
if (!g_GameState->GameOptions().GetHUDLag()) {
if (x2a0_helmetIntf) {
x2a0_helmetIntf->SetHudLagRotation(zeus::CMatrix3f::skIdentityMatrix3f);
x2a0_helmetIntf->SetHudLagOffset(zeus::CVector3f::skZero);
x2a0_helmetIntf->SetHudLagRotation(zeus::CMatrix3f());
x2a0_helmetIntf->SetHudLagOffset(zeus::skZero3f);
}
if (x29c_decoIntf) {
x29c_decoIntf->SetReticuleTransform(zeus::CMatrix3f::skIdentityMatrix3f);
x29c_decoIntf->SetHudRotation(zeus::CQuaternion::skNoRotation);
x29c_decoIntf->SetHudOffset(zeus::CVector3f::skZero);
x29c_decoIntf->SetReticuleTransform(zeus::CMatrix3f());
x29c_decoIntf->SetHudRotation(zeus::CQuaternion());
x29c_decoIntf->SetHudOffset(zeus::skZero3f);
}
x588_base_basewidget_pivot->SetTransform(
zeus::CTransform::Translate(x588_base_basewidget_pivot->GetWorldPosition()));
x274_loadedFrmeBaseHud->GetFrameCamera()->SetO2WTransform(
BuildFinalCameraTransform(zeus::CQuaternion::skNoRotation, x304_basewidgetIdlePos, x310_cameraPos));
x8_targetingMgr.CompoundTargetReticle().SetLeadingOrientation(zeus::CQuaternion::skNoRotation);
BuildFinalCameraTransform(zeus::CQuaternion(), x304_basewidgetIdlePos, x310_cameraPos));
x8_targetingMgr.CompoundTargetReticle().SetLeadingOrientation(zeus::CQuaternion());
} else {
zeus::CVector3f fpCamDir = x2f8_fpCamDir;
if (TCastToConstPtr<CFirstPersonCamera> fpCam = mgr.GetCameraManager()->GetCurrentCamera(mgr))
@@ -712,7 +712,7 @@ zeus::CColor CSamusHud::GetVisorHudLightColor(const zeus::CColor& color, const C
float t = playerState.GetVisorTransitionFactor();
switch (playerState.GetCurrentVisor()) {
case CPlayerState::EPlayerVisor::Scan:
ret *= zeus::CColor::lerp(zeus::CColor::skWhite, g_tweakGuiColors->GetScanVisorHudLightMultiply(), t);
ret *= zeus::CColor::lerp(zeus::skWhite, g_tweakGuiColors->GetScanVisorHudLightMultiply(), t);
break;
case CPlayerState::EPlayerVisor::Thermal:
ret *= g_tweakGuiColors->GetThermalVisorHudLightMultiply();
@@ -792,20 +792,20 @@ void CSamusHud::UpdateHudDynamicLights(float dt, const CStateManager& mgr) {
dist * light.x14_distL * g_tweakGui->GetHudLightAttMulLinear() +
light.x10_distC * g_tweakGui->GetHudLightAttMulConstant());
falloffMul = std::min(falloffMul, 1.f);
lightWidget->SetO2WTransform(zeus::lookAt(zeus::CVector3f::skZero, lightNormal));
lightWidget->SetO2WTransform(zeus::lookAt(zeus::skZero3f, lightNormal));
float fadedFalloff = falloffMul * std::fabs(light.x1c_fader);
zeus::CColor lightColor = GetVisorHudLightColor(light.xc_color * zeus::CColor(fadedFalloff), mgr);
lightWidget->SetColor(lightColor);
lightAdd += lightColor * lightMul;
float greyscale =
fadedFalloff * zeus::CVector3f::skForward.dot(-lightNormal) * lightAdd.rgbDot(zeus::CColor(0.3f, 0.6f, 0.1f));
fadedFalloff * zeus::skForward.dot(-lightNormal) * lightAdd.rgbDot(zeus::CColor(0.3f, 0.6f, 0.1f));
if (greyscale > maxIntensity) {
maxIntensity = greyscale;
maxIntensityIdx = i;
}
}
CLight brightestGameLight = CLight::BuildPoint(zeus::CVector3f::skZero, zeus::CColor::skBlack);
CLight brightestGameLight = CLight::BuildPoint(zeus::skZero3f, zeus::skBlack);
for (CEntity* ent : mgr.GetLightObjectList()) {
if (!ent || !ent->GetActive())
continue;
@@ -844,9 +844,9 @@ void CSamusHud::UpdateHudDynamicLights(float dt, const CStateManager& mgr) {
const CGuiLight& brightestLight = *x5d8_guiLights[maxIntensityIdx];
lightAdd += x33c_lights->GetAmbientColor() * zeus::CColor(0.25f, 1.f);
zeus::CVector3f revDir = -brightestLight.GetWorldTransform().basis[1];
float foreDot = revDir.dot(zeus::CVector3f::skForward);
float foreDot = revDir.dot(zeus::skForward);
x5d8_guiLights[3]->SetO2WTransform(
zeus::lookAt(zeus::CVector3f::skZero, zeus::CVector3f::skForward * 2.f * foreDot - revDir));
zeus::lookAt(zeus::skZero3f, zeus::skForward * 2.f * foreDot - revDir));
x5d8_guiLights[3]->SetColor(g_tweakGui->GetHudReflectivityLightColor() * brightestLight.GetIntermediateColor());
x5d8_guiLights[3]->SetAmbientLightColor(lightAdd);
}
@@ -937,13 +937,13 @@ void CSamusHud::UpdateHudDamage(float dt, const CStateManager& mgr, DataSpec::IT
}
if (x460_decoShakeAmt > 0.f) {
x460_decoShakeAmt = std::max(0.f, x460_decoShakeAmt - dt);
x44c_hudLagShakeRot = zeus::CQuaternion::skNoRotation;
x44c_hudLagShakeRot = zeus::CQuaternion();
float rotMul = std::min(g_tweakGui->GetMaxDecoDamageShakeRotate(),
x460_decoShakeAmt / x45c_decoShakeAmtInit * x464_decoShakeAmtGain);
float rotAng = rotMul * (2.f * M_PIF / 10.f);
x44c_hudLagShakeRot.rotateX(rand() / float(RAND_MAX) * rotAng);
x44c_hudLagShakeRot.rotateZ(rand() / float(RAND_MAX) * rotAng);
zeus::CVector3f vecs[] = {zeus::CVector3f::skRight, zeus::CVector3f::skForward, zeus::CVector3f::skUp};
zeus::CVector3f vecs[] = {zeus::skRight, zeus::skForward, zeus::skUp};
for (int i = 0; i < 4; ++i) {
int sel = rand() % 9;
vecs[sel % 3][sel / 3] += (rand() / float(RAND_MAX) - dt) * rotMul;
@@ -993,7 +993,7 @@ void CSamusHud::UpdateStaticInterference(float dt, const CStateManager& mgr) {
UpdateStaticSfx(x50c_staticSfxLo, x518_staticCycleTimerLo, SFXui_static_lo, dt, oldStaticInterp, 0.5f);
if (x510_staticInterp > 0.f) {
zeus::CColor color = zeus::CColor::skWhite;
zeus::CColor color = zeus::skWhite;
color.a() = x510_staticInterp;
x51c_camFilter2.SetFilter(EFilterType::Blend, EFilterShape::RandomStatic, 0.f, color, -1);
} else {
@@ -1019,7 +1019,7 @@ int CSamusHud::GetRelativeDirection(const zeus::CVector3f& position, const CStat
zeus::CVector3f camToPosNorm = camToPosLocal.normalized();
zeus::CQuaternion quat;
quat.rotateY(2.f * M_PIF / 8.f);
zeus::CVector3f vec = zeus::CVector3f::skUp;
zeus::CVector3f vec = zeus::skUp;
float maxDot = -1.f;
int ret = -1;
for (int i = 0; i < 8; ++i) {
@@ -1205,7 +1205,7 @@ void CSamusHud::Update(float dt, const CStateManager& mgr, CInGameGuiManager::EH
x584_abuttonPulse -= 2.f;
}
zeus::CColor abuttonColor = zeus::CColor::skWhite;
zeus::CColor abuttonColor = zeus::skWhite;
abuttonColor.a() = std::fabs(x584_abuttonPulse);
x5a0_base_model_abutton->SetColor(abuttonColor);
@@ -1248,7 +1248,7 @@ void CSamusHud::Update(float dt, const CStateManager& mgr, CInGameGuiManager::EH
else
messageWidget = x59c_base_textpane_message;
zeus::CColor messageColor = zeus::CColor::skWhite;
zeus::CColor messageColor = zeus::skWhite;
float textScale = 1.f;
messageColor.a() = std::min(allTextAlpha, messageTextAlpha);
messageWidget->SetColor(messageColor);
@@ -1288,7 +1288,7 @@ void CSamusHud::Update(float dt, const CStateManager& mgr, CInGameGuiManager::EH
x594_base_textpane_counter->TextSupport().SetText(timeStr);
x594_base_textpane_counter->SetIsVisible(true);
zeus::CColor counterColor = zeus::CColor::skWhite;
zeus::CColor counterColor = zeus::skWhite;
counterColor.a() = zeus::clamp(0.f, std::min(1.f - std::min(x558_messageTextTime, 1.f), allTextAlpha), 1.f);
x594_base_textpane_counter->SetColor(counterColor);
} else {
@@ -1389,20 +1389,20 @@ void CSamusHud::Draw(const CStateManager& mgr, float alpha, CInGameGuiManager::E
if (helmetVis != CInGameGuiManager::EHelmetVisMode::ReducedUpdate &&
helmetVis < CInGameGuiManager::EHelmetVisMode::HelmetOnly) {
if (alpha < 1.f)
const_cast<CCookieCutterDepthRandomStaticFilter&>(m_cookieCutterStatic).draw(zeus::CColor::skWhite, 1.f - alpha);
const_cast<CCookieCutterDepthRandomStaticFilter&>(m_cookieCutterStatic).draw(zeus::skWhite, 1.f - alpha);
if (x288_loadedSelectedHud) {
if (mgr.GetPlayer().GetDeathTime() > 0.f) {
if (mgr.GetPlayer().GetMorphballTransitionState() != CPlayer::EPlayerMorphBallState::Unmorphed) {
CGuiWidgetDrawParms parms(x2c8_transT * zeus::clamp(0.f, 1.f - mgr.GetPlayer().GetDeathTime() / 6.f, 1.f),
zeus::CVector3f::skZero);
zeus::skZero3f);
x288_loadedSelectedHud->Draw(parms);
} else {
CGuiWidgetDrawParms parms(x2c8_transT, zeus::CVector3f::skZero);
CGuiWidgetDrawParms parms(x2c8_transT, zeus::skZero3f);
x288_loadedSelectedHud->Draw(parms);
}
} else {
CGuiWidgetDrawParms parms(x2c8_transT, zeus::CVector3f::skZero);
CGuiWidgetDrawParms parms(x2c8_transT, zeus::skZero3f);
x288_loadedSelectedHud->Draw(parms);
}
}
@@ -1589,7 +1589,7 @@ void CSamusHud::SetMessage(std::u16string_view text, const CHUDMemoParms& info)
CSfxManager::SfxStart(SFXui_hide_hint_memo, 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
return;
}
x598_base_basewidget_message->SetColor(zeus::CColor::skWhite);
x598_base_basewidget_message->SetColor(zeus::skWhite);
x598_base_basewidget_message->SetVisibility(false, ETraversalMode::Children);
CGuiWidget* pane = info.IsHintMemo() ? x598_base_basewidget_message : x59c_base_textpane_message;
pane->SetVisibility(true, ETraversalMode::Children);
@@ -1605,8 +1605,8 @@ void CSamusHud::SetMessage(std::u16string_view text, const CHUDMemoParms& info)
x59c_base_textpane_message->TextSupport().AddText(std::u16string(u"\n") + text.data());
}
x59c_base_textpane_message->SetColor(zeus::CColor::skWhite);
x598_base_basewidget_message->SetColor(zeus::CColor::skWhite);
x59c_base_textpane_message->SetColor(zeus::skWhite);
x598_base_basewidget_message->SetColor(zeus::skWhite);
x558_messageTextTime = info.GetDisplayTime();
if (info.IsHintMemo()) {
if (!isWidgetVisible) {