mirror of https://github.com/AxioDL/metaforce.git
CScanDisplay: Eliminate implicit sign conversions
Removes implicit sign conversions and also dehardcodes quite a bit of sizes.
This commit is contained in:
parent
8000fb9e42
commit
0a01a30bf5
|
@ -12,6 +12,8 @@ class CScannableObjectInfo {
|
||||||
public:
|
public:
|
||||||
enum class EPanelType {};
|
enum class EPanelType {};
|
||||||
|
|
||||||
|
static constexpr size_t NumBuckets = 4;
|
||||||
|
|
||||||
struct SBucket {
|
struct SBucket {
|
||||||
CAssetId x0_texture;
|
CAssetId x0_texture;
|
||||||
float x4_appearanceRange = 0.f;
|
float x4_appearanceRange = 0.f;
|
||||||
|
@ -29,14 +31,14 @@ private:
|
||||||
float x8_totalDownloadTime = 0.f;
|
float x8_totalDownloadTime = 0.f;
|
||||||
u32 xc_category = 0;
|
u32 xc_category = 0;
|
||||||
bool x10_important = false;
|
bool x10_important = false;
|
||||||
rstl::reserved_vector<SBucket, 4> x14_buckets;
|
rstl::reserved_vector<SBucket, NumBuckets> x14_buckets;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CScannableObjectInfo(CInputStream&, CAssetId);
|
CScannableObjectInfo(CInputStream&, CAssetId);
|
||||||
CAssetId GetScannableObjectId() const { return x0_scannableObjectId; }
|
CAssetId GetScannableObjectId() const { return x0_scannableObjectId; }
|
||||||
CAssetId GetStringTableId() const { return x4_stringId; }
|
CAssetId GetStringTableId() const { return x4_stringId; }
|
||||||
float GetTotalDownloadTime() const { return x8_totalDownloadTime; }
|
float GetTotalDownloadTime() const { return x8_totalDownloadTime; }
|
||||||
const SBucket& GetBucket(s32 idx) const { return x14_buckets[idx]; }
|
const SBucket& GetBucket(size_t idx) const { return x14_buckets[idx]; }
|
||||||
u32 GetCategory() const { return xc_category; }
|
u32 GetCategory() const { return xc_category; }
|
||||||
bool IsImportant() const { return x10_important; }
|
bool IsImportant() const { return x10_important; }
|
||||||
};
|
};
|
||||||
|
|
|
@ -71,9 +71,10 @@ void CScanDisplay::CDataDot::SetDestPosition(const zeus::CVector2f& pos) {
|
||||||
|
|
||||||
CScanDisplay::CScanDisplay(const CGuiFrame& selHud) : xa0_selHud(selHud) {
|
CScanDisplay::CScanDisplay(const CGuiFrame& selHud) : xa0_selHud(selHud) {
|
||||||
x0_dataDot = g_SimplePool->GetObj("TXTR_DataDot");
|
x0_dataDot = g_SimplePool->GetObj("TXTR_DataDot");
|
||||||
for (int i = 0; i < 4; ++i)
|
for (size_t i = 0; i < xbc_dataDots.capacity(); ++i) {
|
||||||
xbc_dataDots.emplace_back(x0_dataDot);
|
xbc_dataDots.emplace_back(x0_dataDot);
|
||||||
x170_paneStates.resize(4);
|
}
|
||||||
|
x170_paneStates.resize(x170_paneStates.capacity());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScanDisplay::ProcessInput(const CFinalInput& input) {
|
void CScanDisplay::ProcessInput(const CFinalInput& input) {
|
||||||
|
@ -139,26 +140,34 @@ void CScanDisplay::ProcessInput(const CFinalInput& input) {
|
||||||
xb8_dash->SetColor(zeus::CColor(0.53f, 0.84f, 1.f, dashAlpha));
|
xb8_dash->SetColor(zeus::CColor(0.53f, 0.84f, 1.f, dashAlpha));
|
||||||
}
|
}
|
||||||
|
|
||||||
float CScanDisplay::GetDownloadStartTime(int idx) const {
|
float CScanDisplay::GetDownloadStartTime(size_t idx) const {
|
||||||
if (!x14_scannableInfo)
|
if (!x14_scannableInfo) {
|
||||||
return 0.f;
|
return 0.f;
|
||||||
float nTime = x14_scannableInfo->GetBucket(idx).x4_appearanceRange;
|
}
|
||||||
|
|
||||||
|
const float nTime = x14_scannableInfo->GetBucket(idx).x4_appearanceRange;
|
||||||
float maxTime = 0.f;
|
float maxTime = 0.f;
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < CScannableObjectInfo::NumBuckets; ++i) {
|
||||||
float iTime = x14_scannableInfo->GetBucket(i).x4_appearanceRange;
|
const float iTime = x14_scannableInfo->GetBucket(i).x4_appearanceRange;
|
||||||
if (iTime < nTime)
|
if (iTime < nTime) {
|
||||||
maxTime = std::max(iTime, maxTime);
|
maxTime = std::max(iTime, maxTime);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return maxTime + g_tweakGui->GetScanAppearanceDuration();
|
return maxTime + g_tweakGui->GetScanAppearanceDuration();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CScanDisplay::GetDownloadFraction(int idx, float scanningTime) const {
|
float CScanDisplay::GetDownloadFraction(size_t idx, float scanningTime) const {
|
||||||
if (!x14_scannableInfo)
|
if (!x14_scannableInfo) {
|
||||||
return 0.f;
|
return 0.f;
|
||||||
float appearTime = GetDownloadStartTime(idx);
|
}
|
||||||
float appearRange = x14_scannableInfo->GetBucket(idx).x4_appearanceRange;
|
|
||||||
if (appearTime == appearRange)
|
const float appearTime = GetDownloadStartTime(idx);
|
||||||
|
const float appearRange = x14_scannableInfo->GetBucket(idx).x4_appearanceRange;
|
||||||
|
if (appearTime == appearRange) {
|
||||||
return 1.f;
|
return 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
return zeus::clamp(0.f, (scanningTime - appearTime) / (appearRange - appearTime), 1.f);
|
return zeus::clamp(0.f, (scanningTime - appearTime) / (appearRange - appearTime), 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,26 +191,26 @@ void CScanDisplay::StartScan(TUniqueId id, const CScannableObjectInfo& scanInfo,
|
||||||
xa8_message->TextSupport().SetText(u"");
|
xa8_message->TextSupport().SetText(u"");
|
||||||
xac_scrollMessage->TextSupport().SetText(u"");
|
xac_scrollMessage->TextSupport().SetText(u"");
|
||||||
|
|
||||||
for (int i = 0; i < 20; ++i) {
|
for (size_t i = 0; i < 20; ++i) {
|
||||||
CAuiImagePane* pane =
|
auto* pane = static_cast<CAuiImagePane*>(xa0_selHud.FindWidget(MP1::CPauseScreenBase::GetImagePaneName(i)));
|
||||||
static_cast<CAuiImagePane*>(xa0_selHud.FindWidget(MP1::CPauseScreenBase::GetImagePaneName(i)));
|
|
||||||
zeus::CColor color = g_tweakGuiColors->GetScanDisplayImagePaneColor();
|
zeus::CColor color = g_tweakGuiColors->GetScanDisplayImagePaneColor();
|
||||||
color.a() = 0.f;
|
color.a() = 0.f;
|
||||||
pane->SetColor(color);
|
pane->SetColor(color);
|
||||||
pane->SetTextureID0({}, g_SimplePool);
|
pane->SetTextureID0({}, g_SimplePool);
|
||||||
pane->SetAnimationParms(zeus::skZero2f, 0.f, 0.f);
|
pane->SetAnimationParms(zeus::skZero2f, 0.f, 0.f);
|
||||||
int pos = -1;
|
size_t pos = SIZE_MAX;
|
||||||
for (int j = 0; j < 4; ++j) {
|
for (size_t j = 0; j < CScannableObjectInfo::NumBuckets; ++j) {
|
||||||
if (x14_scannableInfo->GetBucket(j).x8_imagePos == i) {
|
if (x14_scannableInfo->GetBucket(j).x8_imagePos == i) {
|
||||||
pos = j;
|
pos = j;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pos >= 0)
|
if (pos != SIZE_MAX) {
|
||||||
x170_paneStates[pos].second = pane;
|
x170_paneStates[pos].second = pane;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < x170_paneStates.size(); ++i) {
|
for (size_t i = 0; i < x170_paneStates.size(); ++i) {
|
||||||
std::pair<float, CAuiImagePane*>& state = x170_paneStates[i];
|
std::pair<float, CAuiImagePane*>& state = x170_paneStates[i];
|
||||||
if (state.second) {
|
if (state.second) {
|
||||||
const CScannableObjectInfo::SBucket& bucket = x14_scannableInfo->GetBucket(i);
|
const CScannableObjectInfo::SBucket& bucket = x14_scannableInfo->GetBucket(i);
|
||||||
|
@ -211,22 +220,25 @@ void CScanDisplay::StartScan(TUniqueId id, const CScannableObjectInfo& scanInfo,
|
||||||
}
|
}
|
||||||
state.second->SetTextureID0(bucket.x0_texture, g_SimplePool);
|
state.second->SetTextureID0(bucket.x0_texture, g_SimplePool);
|
||||||
state.second->SetFlashFactor(0.f);
|
state.second->SetFlashFactor(0.f);
|
||||||
float startTime = GetDownloadStartTime(i);
|
|
||||||
if (scanTime >= startTime)
|
const float startTime = GetDownloadStartTime(i);
|
||||||
|
if (scanTime >= startTime) {
|
||||||
x170_paneStates[i].first = 0.f;
|
x170_paneStates[i].first = 0.f;
|
||||||
else
|
} else {
|
||||||
x170_paneStates[i].first = -1.f;
|
x170_paneStates[i].first = -1.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CAssetId strId = x14_scannableInfo->GetStringTableId();
|
const CAssetId strId = x14_scannableInfo->GetStringTableId();
|
||||||
if (strId.IsValid())
|
if (strId.IsValid()) {
|
||||||
x194_scanStr = g_SimplePool->GetObj({FOURCC('STRG'), strId});
|
x194_scanStr = g_SimplePool->GetObj({FOURCC('STRG'), strId});
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < CScannableObjectInfo::NumBuckets; ++i) {
|
||||||
int pos = x14_scannableInfo->GetBucket(i).x8_imagePos;
|
const u32 pos = x14_scannableInfo->GetBucket(i).x8_imagePos;
|
||||||
CDataDot& dot = xbc_dataDots[i];
|
CDataDot& dot = xbc_dataDots[i];
|
||||||
if (pos != -1) {
|
if (pos != UINT32_MAX) {
|
||||||
if (GetDownloadStartTime(i) - g_tweakGui->GetScanAppearanceDuration() < scanTime) {
|
if (GetDownloadStartTime(i) - g_tweakGui->GetScanAppearanceDuration() < scanTime) {
|
||||||
dot.SetAlpha(0.f);
|
dot.SetAlpha(0.f);
|
||||||
dot.SetDotState(CDataDot::EDotState::Done);
|
dot.SetDotState(CDataDot::EDotState::Done);
|
||||||
|
@ -243,12 +255,14 @@ void CScanDisplay::StartScan(TUniqueId id, const CScannableObjectInfo& scanInfo,
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScanDisplay::StopScan() {
|
void CScanDisplay::StopScan() {
|
||||||
if (xc_state == EScanState::Done || xc_state == EScanState::Inactive)
|
if (xc_state == EScanState::Done || xc_state == EScanState::Inactive) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
xc_state = EScanState::Done;
|
xc_state = EScanState::Done;
|
||||||
for (int i = 0; i < 4; ++i)
|
for (auto& dataDot : xbc_dataDots) {
|
||||||
xbc_dataDots[i].SetDesiredAlpha(0.f);
|
dataDot.SetDesiredAlpha(0.f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScanDisplay::SetScanMessageTypeEffect(CGuiTextPane* pane, bool type) {
|
void CScanDisplay::SetScanMessageTypeEffect(CGuiTextPane* pane, bool type) {
|
||||||
|
@ -310,25 +324,30 @@ void CScanDisplay::Update(float dt, float scanningTime) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < x170_paneStates.size(); ++i) {
|
||||||
if (x170_paneStates[i].second == nullptr)
|
if (x170_paneStates[i].second == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (x170_paneStates[i].first > 0.f) {
|
if (x170_paneStates[i].first > 0.f) {
|
||||||
x170_paneStates[i].first = std::max(0.f, x170_paneStates[i].first - dt);
|
x170_paneStates[i].first = std::max(0.f, x170_paneStates[i].first - dt);
|
||||||
float tmp;
|
float tmp;
|
||||||
if (x170_paneStates[i].first > g_tweakGui->GetScanPaneFadeOutTime())
|
if (x170_paneStates[i].first > g_tweakGui->GetScanPaneFadeOutTime()) {
|
||||||
tmp = 1.f -
|
tmp = 1.f -
|
||||||
(x170_paneStates[i].first - g_tweakGui->GetScanPaneFadeOutTime()) / g_tweakGui->GetScanPaneFadeInTime();
|
(x170_paneStates[i].first - g_tweakGui->GetScanPaneFadeOutTime()) / g_tweakGui->GetScanPaneFadeInTime();
|
||||||
else
|
} else {
|
||||||
tmp = x170_paneStates[i].first / g_tweakGui->GetScanPaneFadeOutTime();
|
tmp = x170_paneStates[i].first / g_tweakGui->GetScanPaneFadeOutTime();
|
||||||
|
}
|
||||||
x170_paneStates[i].second->SetFlashFactor(tmp * g_tweakGui->GetScanPaneFlashFactor() * x1a8_bodyAlpha);
|
x170_paneStates[i].second->SetFlashFactor(tmp * g_tweakGui->GetScanPaneFlashFactor() * x1a8_bodyAlpha);
|
||||||
}
|
}
|
||||||
float alphaMul =
|
|
||||||
|
const float alphaMul =
|
||||||
((xc_state == EScanState::Downloading) ? GetDownloadFraction(i, scanningTime) : 1.f) * x1a8_bodyAlpha;
|
((xc_state == EScanState::Downloading) ? GetDownloadFraction(i, scanningTime) : 1.f) * x1a8_bodyAlpha;
|
||||||
zeus::CColor color = g_tweakGuiColors->GetScanDisplayImagePaneColor();
|
zeus::CColor color = g_tweakGuiColors->GetScanDisplayImagePaneColor();
|
||||||
color.a() *= alphaMul;
|
color.a() *= alphaMul;
|
||||||
x170_paneStates[i].second->SetColor(color);
|
x170_paneStates[i].second->SetColor(color);
|
||||||
x170_paneStates[i].second->SetDeResFactor(1.f - alphaMul);
|
x170_paneStates[i].second->SetDeResFactor(1.f - alphaMul);
|
||||||
|
|
||||||
if (GetDownloadStartTime(i) - g_tweakGui->GetScanAppearanceDuration() < scanningTime) {
|
if (GetDownloadStartTime(i) - g_tweakGui->GetScanAppearanceDuration() < scanningTime) {
|
||||||
CDataDot& dot = xbc_dataDots[i];
|
CDataDot& dot = xbc_dataDots[i];
|
||||||
switch (dot.GetDotState()) {
|
switch (dot.GetDotState()) {
|
||||||
|
@ -338,7 +357,7 @@ void CScanDisplay::Update(float dt, float scanningTime) {
|
||||||
dot.StartTransitionTo(zeus::skZero2f, g_tweakGui->GetScanAppearanceDuration());
|
dot.StartTransitionTo(zeus::skZero2f, g_tweakGui->GetScanAppearanceDuration());
|
||||||
break;
|
break;
|
||||||
case CDataDot::EDotState::RevealPane: {
|
case CDataDot::EDotState::RevealPane: {
|
||||||
float tmp = dot.GetTransitionFactor();
|
const float tmp = dot.GetTransitionFactor();
|
||||||
if (tmp == 0.f) {
|
if (tmp == 0.f) {
|
||||||
dot.SetDotState(CDataDot::EDotState::Done);
|
dot.SetDotState(CDataDot::EDotState::Done);
|
||||||
dot.SetDesiredAlpha(0.f);
|
dot.SetDesiredAlpha(0.f);
|
||||||
|
@ -353,7 +372,7 @@ void CScanDisplay::Update(float dt, float scanningTime) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < xbc_dataDots.size(); ++i) {
|
||||||
CDataDot& dot = xbc_dataDots[i];
|
CDataDot& dot = xbc_dataDots[i];
|
||||||
switch (dot.GetDotState()) {
|
switch (dot.GetDotState()) {
|
||||||
case CDataDot::EDotState::Hidden:
|
case CDataDot::EDotState::Hidden:
|
||||||
|
|
|
@ -79,8 +79,8 @@ private:
|
||||||
float x1b0_aPulse = 1.f;
|
float x1b0_aPulse = 1.f;
|
||||||
bool x1b4_scanComplete = false;
|
bool x1b4_scanComplete = false;
|
||||||
|
|
||||||
float GetDownloadStartTime(int idx) const;
|
float GetDownloadStartTime(size_t idx) const;
|
||||||
float GetDownloadFraction(int idx, float scanningTime) const;
|
float GetDownloadFraction(size_t idx, float scanningTime) const;
|
||||||
static void SetScanMessageTypeEffect(CGuiTextPane* pane, bool type);
|
static void SetScanMessageTypeEffect(CGuiTextPane* pane, bool type);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -214,10 +214,11 @@ void CLogBookScreen::UpdateBodyImagesAndText() {
|
||||||
pane->SetAnimationParms(zeus::skZero2f, 0.f, 0.f);
|
pane->SetAnimationParms(zeus::skZero2f, 0.f, 0.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < CScannableObjectInfo::NumBuckets; ++i) {
|
||||||
const CScannableObjectInfo::SBucket& bucket = scan->GetBucket(i);
|
const CScannableObjectInfo::SBucket& bucket = scan->GetBucket(i);
|
||||||
if (bucket.x8_imagePos == UINT32_MAX)
|
if (bucket.x8_imagePos == UINT32_MAX) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
CAuiImagePane* pane = xf0_imagePanes[bucket.x8_imagePos];
|
CAuiImagePane* pane = xf0_imagePanes[bucket.x8_imagePos];
|
||||||
if (bucket.x14_interval > 0.f) {
|
if (bucket.x14_interval > 0.f) {
|
||||||
pane->SetAnimationParms(zeus::CVector2f(bucket.xc_size.x, bucket.xc_size.y), bucket.x14_interval,
|
pane->SetAnimationParms(zeus::CVector2f(bucket.xc_size.x, bucket.xc_size.y), bucket.x14_interval,
|
||||||
|
|
|
@ -536,7 +536,7 @@ void CPauseScreenBase::OnWidgetScroll(CGuiWidget* widget, const boo::SScrollDelt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CPauseScreenBase::GetImagePaneName(u32 i) {
|
std::string CPauseScreenBase::GetImagePaneName(size_t i) {
|
||||||
static constexpr std::array PaneSuffixes{
|
static constexpr std::array PaneSuffixes{
|
||||||
"0", "1", "2", "3", "01", "12", "23", "012", "123", "0123",
|
"0", "1", "2", "3", "01", "12", "23", "012", "123", "0123",
|
||||||
"4", "5", "6", "7", "45", "56", "67", "456", "567", "4567",
|
"4", "5", "6", "7", "45", "56", "67", "456", "567", "4567",
|
||||||
|
|
|
@ -102,7 +102,7 @@ protected:
|
||||||
void OnWidgetScroll(CGuiWidget* widget, const boo::SScrollDelta& delta, int accumX, int accumY);
|
void OnWidgetScroll(CGuiWidget* widget, const boo::SScrollDelta& delta, int accumX, int accumY);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static std::string GetImagePaneName(u32 i);
|
static std::string GetImagePaneName(size_t i);
|
||||||
|
|
||||||
CPauseScreenBase(const CStateManager& mgr, CGuiFrame& frame, const CStringTable& pauseStrg, bool isLogBook = false);
|
CPauseScreenBase(const CStateManager& mgr, CGuiFrame& frame, const CStringTable& pauseStrg, bool isLogBook = false);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue