metaforce/Runtime/GuiSys/CScanDisplay.hpp

109 lines
3.4 KiB
C++
Raw Normal View History

2018-10-07 03:42:33 +00:00
#pragma once
2016-08-14 21:38:05 +00:00
#include "RetroTypes.hpp"
#include "zeus/CColor.hpp"
#include "zeus/CVector2f.hpp"
#include "zeus/CQuaternion.hpp"
#include "CScannableObjectInfo.hpp"
2016-08-15 20:43:04 +00:00
#include "Graphics/CTexture.hpp"
2017-05-17 05:04:38 +00:00
#include "Graphics/Shaders/CTexturedQuadFilter.hpp"
2016-08-14 21:38:05 +00:00
namespace urde
{
class CGuiTextPane;
class CGuiWidget;
2017-04-02 03:03:37 +00:00
class CGuiModel;
2018-02-04 06:46:47 +00:00
struct CFinalInput;
2017-05-17 05:04:38 +00:00
class CGuiFrame;
class CAuiImagePane;
class CStringTable;
2016-08-14 21:38:05 +00:00
class CScanDisplay
{
2017-04-02 03:03:37 +00:00
friend class CHudDecoInterfaceScan;
2016-08-14 21:38:05 +00:00
public:
class CDataDot
{
public:
enum class EDotState
{
2017-05-17 05:04:38 +00:00
Hidden,
Seek,
Hold,
RevealPane,
Done
2016-08-14 21:38:05 +00:00
};
private:
2017-05-17 05:04:38 +00:00
EDotState x0_dotState = EDotState::Hidden;
zeus::CVector2f x4_startPos;
zeus::CVector2f xc_curPos;
zeus::CVector2f x14_targetPos;
float x1c_transDur = 0.f;
float x20_remTime = 0.f;
float x24_alpha = 0.f;
float x28_desiredAlpha = 0.f;
CTexturedQuadFilter m_quad;
2016-08-14 21:38:05 +00:00
public:
2017-05-17 05:04:38 +00:00
CDataDot(const TLockedToken<CTexture>& dataDotTex)
2017-06-01 05:34:24 +00:00
: m_quad(EFilterType::Add, dataDotTex) {}
2017-05-17 05:04:38 +00:00
void Update(float dt);
void Draw(const zeus::CColor& color, float radius) const;
float GetTransitionFactor() const { return x1c_transDur > 0.f ? x20_remTime / x1c_transDur : 0.f; }
2016-08-15 01:29:07 +00:00
void StartTransitionTo(const zeus::CVector2f&, float);
2016-08-14 21:38:05 +00:00
void SetDestPosition(const zeus::CVector2f&);
2017-05-17 05:04:38 +00:00
void SetDesiredAlpha(float a) { x28_desiredAlpha = a; }
void SetDotState(EDotState s) { x0_dotState = s; }
void SetAlpha(float a) { x24_alpha = a; }
const zeus::CVector2f& GetCurrPosition() const { return xc_curPos; }
EDotState GetDotState() const { return x0_dotState; }
2016-08-14 21:38:05 +00:00
};
2017-05-17 05:04:38 +00:00
enum class EScanState
2016-08-14 21:38:05 +00:00
{
2017-05-17 05:04:38 +00:00
Inactive,
Downloading,
DownloadComplete,
ViewingScan,
Done
2016-08-14 21:38:05 +00:00
};
2016-08-15 20:43:04 +00:00
2017-04-02 03:03:37 +00:00
private:
2017-05-17 05:04:38 +00:00
TLockedToken<CTexture> x0_dataDot;
EScanState xc_state = EScanState::Inactive;
TUniqueId x10_objId = kInvalidUniqueId;
std::experimental::optional<CScannableObjectInfo> x14_scannableInfo;
const CGuiFrame& xa0_selHud;
CGuiWidget* xa4_textGroup = nullptr;
CGuiTextPane* xa8_message = nullptr;
CGuiTextPane* xac_scrollMessage = nullptr;
CGuiModel* xb0_xmark = nullptr;
CGuiModel* xb4_abutton = nullptr;
CGuiModel* xb8_dash = nullptr;
rstl::reserved_vector<CDataDot, 4> xbc_dataDots;
rstl::reserved_vector<std::pair<float, CAuiImagePane*>, 4> x170_paneStates;
TLockedToken<CStringTable> x194_scanStr; // Used to be optional
float x1a4_xAlpha = 0.f;
float x1a8_bodyAlpha = 0.f;
int x1ac_pageCounter = 0;
float x1b0_aPulse = 1.f;
bool x1b4_scanComplete = false;
float GetDownloadStartTime(int idx) const;
float GetDownloadFraction(int idx, float scanningTime) const;
static void SetScanMessageTypeEffect(CGuiTextPane* pane, bool type);
2017-04-02 03:03:37 +00:00
2016-08-14 21:38:05 +00:00
public:
2017-05-17 05:04:38 +00:00
CScanDisplay(const CGuiFrame& selHud);
2017-04-02 03:03:37 +00:00
void ProcessInput(const CFinalInput& input);
void StartScan(TUniqueId id, const CScannableObjectInfo& scanInfo, CGuiTextPane* message,
CGuiTextPane* scrollMessage, CGuiWidget* textGroup, CGuiModel* xmark,
CGuiModel* abutton, CGuiModel* dash, float scanTime);
2016-08-14 21:38:05 +00:00
void StopScan();
2017-05-17 05:04:38 +00:00
void Update(float dt, float scanningTime);
2016-08-14 21:38:05 +00:00
void Draw() const;
2017-05-17 05:04:38 +00:00
EScanState GetScanState() const { return xc_state; }
TUniqueId ScanTarget() const { return x10_objId; }
2016-08-14 21:38:05 +00:00
};
2017-05-17 05:04:38 +00:00
2016-08-14 21:38:05 +00:00
}