2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-05-14 14:31:22 +00:00
metaforce/Runtime/GuiSys/CAuiEnergyBarT01.hpp
Lioncash 40fc3f9dd8 CModelBoo: Remove usages of const_cast
Many functions are modifying internals of CBooModel and const-casting
is performed in order to work around functions being const when they
really shouldn't be.

This amends the function signatures in order to allow these functions to
exist without const_cast, making code much nicer to read.
2020-03-25 02:01:46 -04:00

70 lines
2.6 KiB
C++

#pragma once
#include <array>
#include <memory>
#include <vector>
#include "Runtime/CToken.hpp"
#include "Runtime/Graphics/CTexture.hpp"
#include "Runtime/Graphics/Shaders/CEnergyBarShader.hpp"
#include "Runtime/GuiSys/CGuiWidget.hpp"
#include <zeus/CColor.hpp>
#include <zeus/CVector3f.hpp>
namespace urde {
class CSimplePool;
class CAuiEnergyBarT01 : public CGuiWidget {
public:
using FCoordFunc = std::pair<zeus::CVector3f, zeus::CVector3f> (*)(float t);
enum class ESetMode { Normal, Wrapped, Insta };
private:
CAssetId xb8_txtrId;
TLockedToken<CTexture> xbc_tex; // Used to be optional
zeus::CColor xcc_emptyColor;
zeus::CColor xd0_filledColor;
zeus::CColor xd4_shadowColor;
FCoordFunc xd8_coordFunc = nullptr;
float xdc_tesselation = 1.f;
float xe0_maxEnergy = 0.f;
float xe4_filledSpeed = 1000.f;
float xe8_shadowSpeed = 1000.f;
float xec_shadowDrainDelay = 0.f;
bool xf0_alwaysResetDelayTimer = false;
bool xf1_wrapping = false;
float xf4_setEnergy = 0.f;
float xf8_filledEnergy = 0.f;
float xfc_shadowEnergy = 0.f;
float x100_shadowDrainDelayTimer = 0.f;
CEnergyBarShader m_energyBarShader;
std::array<std::vector<CEnergyBarShader::Vertex>, 3> m_verts;
public:
CAuiEnergyBarT01(const CGuiWidgetParms& parms, CSimplePool* sp, CAssetId txtrId);
FourCC GetWidgetTypeID() const override { return FOURCC('ENRG'); }
static std::pair<zeus::CVector3f, zeus::CVector3f> DownloadBarCoordFunc(float t);
void Update(float dt) override;
void Draw(const CGuiWidgetDrawParms& drawParms) override;
float GetActualFraction() const { return xe0_maxEnergy == 0.f ? 0.f : xf4_setEnergy / xe0_maxEnergy; }
float GetSetEnergy() const { return xf4_setEnergy; }
float GetMaxEnergy() const { return xe0_maxEnergy; }
float GetFilledEnergy() const { return xf8_filledEnergy; }
void SetCurrEnergy(float e, ESetMode mode);
void SetCoordFunc(FCoordFunc func) { xd8_coordFunc = func; }
void SetEmptyColor(const zeus::CColor& c) { xcc_emptyColor = c; }
void SetFilledColor(const zeus::CColor& c) { xd0_filledColor = c; }
void SetShadowColor(const zeus::CColor& c) { xd4_shadowColor = c; }
void SetMaxEnergy(float maxEnergy);
void ResetMaxEnergy() { SetMaxEnergy(xdc_tesselation); }
void SetTesselation(float t) { xdc_tesselation = t; }
void SetIsAlwaysResetTimer(bool b) { xf0_alwaysResetDelayTimer = b; }
void SetFilledDrainSpeed(float s) { xe4_filledSpeed = s; }
void SetShadowDrainSpeed(float s) { xe8_shadowSpeed = s; }
void SetShadowDrainDelay(float d) { xec_shadowDrainDelay = d; }
static std::shared_ptr<CGuiWidget> Create(CGuiFrame* frame, CInputStream& in, CSimplePool* sp);
};
} // namespace urde