CHudMissileInterface: Make use of std::array where applicable

This commit is contained in:
Lioncash 2020-03-14 17:54:24 -04:00
parent 9fafb24fb9
commit c4796ed090
1 changed files with 24 additions and 17 deletions

View File

@ -1,5 +1,7 @@
#include "Runtime/GuiSys/CHudMissileInterface.hpp" #include "Runtime/GuiSys/CHudMissileInterface.hpp"
#include <array>
#include "Runtime/CStateManager.hpp" #include "Runtime/CStateManager.hpp"
#include "Runtime/GameGlobalObjects.hpp" #include "Runtime/GameGlobalObjects.hpp"
#include "Runtime/GuiSys/CAuiEnergyBarT01.hpp" #include "Runtime/GuiSys/CAuiEnergyBarT01.hpp"
@ -10,11 +12,14 @@
namespace urde { namespace urde {
static const CAuiEnergyBarT01::FCoordFunc CoordFuncs[] = {CHudMissileInterface::CombatMissileBarCoordFunc, nullptr, constexpr std::array<CAuiEnergyBarT01::FCoordFunc, 5> CoordFuncs{
CHudMissileInterface::XRayMissileBarCoordFunc, CHudMissileInterface::CombatMissileBarCoordFunc, nullptr, CHudMissileInterface::XRayMissileBarCoordFunc,
CHudMissileInterface::ThermalMissileBarCoordFunc, nullptr}; CHudMissileInterface::ThermalMissileBarCoordFunc, nullptr,
};
static const float IconTranslateRanges[] = {6.05f, 0.f, 0.f, 8.4f, 0.f}; constexpr std::array IconTranslateRanges{
6.05f, 0.f, 0.f, 8.4f, 0.f,
};
CHudMissileInterface::CHudMissileInterface(CGuiFrame& selHud, int missileCapacity, int numMissiles, float chargeFactor, CHudMissileInterface::CHudMissileInterface(CGuiFrame& selHud, int missileCapacity, int numMissiles, float chargeFactor,
bool missilesActive, EHudType hudType, const CStateManager& mgr) bool missilesActive, EHudType hudType, const CStateManager& mgr)
@ -45,7 +50,7 @@ CHudMissileInterface::CHudMissileInterface(CGuiFrame& selHud, int missileCapacit
x64_energybart01_missilebar->SetEmptyColor(g_tweakGuiColors->GetMissileBarEmpty()); x64_energybart01_missilebar->SetEmptyColor(g_tweakGuiColors->GetMissileBarEmpty());
x64_energybart01_missilebar->SetFilledColor(g_tweakGuiColors->GetMissileBarFilled()); x64_energybart01_missilebar->SetFilledColor(g_tweakGuiColors->GetMissileBarFilled());
x64_energybart01_missilebar->SetShadowColor(g_tweakGuiColors->GetMissileBarShadow()); x64_energybart01_missilebar->SetShadowColor(g_tweakGuiColors->GetMissileBarShadow());
x64_energybart01_missilebar->SetCoordFunc(CoordFuncs[int(hudType)]); x64_energybart01_missilebar->SetCoordFunc(CoordFuncs[size_t(hudType)]);
x64_energybart01_missilebar->SetTesselation(hudType == EHudType::Combat ? 1.f : 0.1f); x64_energybart01_missilebar->SetTesselation(hudType == EHudType::Combat ? 1.f : 0.1f);
x64_energybart01_missilebar->SetMaxEnergy(5.f); x64_energybart01_missilebar->SetMaxEnergy(5.f);
x64_energybart01_missilebar->SetFilledDrainSpeed(g_tweakGui->GetEnergyBarFilledSpeed()); x64_energybart01_missilebar->SetFilledDrainSpeed(g_tweakGui->GetEnergyBarFilledSpeed());
@ -121,8 +126,8 @@ void CHudMissileInterface::Update(float dt, const CStateManager& mgr) {
if (x58_28_notXRay) { if (x58_28_notXRay) {
x74_basewidget_missileicon->SetLocalTransform( x74_basewidget_missileicon->SetLocalTransform(
x10_missleIconXf * x10_missleIconXf *
zeus::CTransform::Translate(0.f, 0.f, zeus::CTransform::Translate(
x8_numMissles * IconTranslateRanges[int(x0_hudType)] / float(x4_missileCapacity))); 0.f, 0.f, x8_numMissles * IconTranslateRanges[size_t(x0_hudType)] / float(x4_missileCapacity)));
} }
if (x58_27_hasArrows) { if (x58_27_hasArrows) {
@ -236,28 +241,30 @@ CHudMissileInterface::EInventoryStatus CHudMissileInterface::GetMissileInventory
} }
std::pair<zeus::CVector3f, zeus::CVector3f> CHudMissileInterface::CombatMissileBarCoordFunc(float t) { std::pair<zeus::CVector3f, zeus::CVector3f> CHudMissileInterface::CombatMissileBarCoordFunc(float t) {
float z = t * IconTranslateRanges[int(EHudType::Combat)]; const float z = t * IconTranslateRanges[size_t(EHudType::Combat)];
return {zeus::CVector3f(0.f, 0.f, z), zeus::CVector3f(0.3f, 0.f, z)}; return {zeus::CVector3f(0.f, 0.f, z), zeus::CVector3f(0.3f, 0.f, z)};
} }
std::pair<zeus::CVector3f, zeus::CVector3f> CHudMissileInterface::XRayMissileBarCoordFunc(float t) { std::pair<zeus::CVector3f, zeus::CVector3f> CHudMissileInterface::XRayMissileBarCoordFunc(float t) {
float theta = 0.8f * (t - 0.5f); const float theta = 0.8f * (t - 0.5f);
float x = 9.55f * std::cos(theta); const float x = 9.55f * std::cos(theta);
float z = 9.55f * std::sin(theta); const float z = 9.55f * std::sin(theta);
return {zeus::CVector3f(x - 0.4f, 0.f, z), zeus::CVector3f(x, 0.f, z)}; return {zeus::CVector3f(x - 0.4f, 0.f, z), zeus::CVector3f(x, 0.f, z)};
} }
std::pair<zeus::CVector3f, zeus::CVector3f> CHudMissileInterface::ThermalMissileBarCoordFunc(float t) { std::pair<zeus::CVector3f, zeus::CVector3f> CHudMissileInterface::ThermalMissileBarCoordFunc(float t) {
float transRange = IconTranslateRanges[int(EHudType::Thermal)]; const float transRange = IconTranslateRanges[size_t(EHudType::Thermal)];
float a = 0.08f * transRange; const float a = 0.08f * transRange;
float b = t * transRange; const float b = t * transRange;
float c; float c;
if (b < a) if (b < a) {
c = b / a; c = b / a;
else if (b < transRange - a) } else if (b < transRange - a) {
c = 1.f; c = 1.f;
else } else {
c = 1.f - (b - (transRange - a)) / a; c = 1.f - (b - (transRange - a)) / a;
}
return {zeus::CVector3f(-0.5f * c - 0.1f, 0.f, b), zeus::CVector3f(-0.1f, 0.f, b)}; return {zeus::CVector3f(-0.5f * c - 0.1f, 0.f, b), zeus::CVector3f(-0.1f, 0.f, b)};
} }