mirror of https://github.com/AxioDL/metaforce.git
Merge branch 'master' of ssh://git.axiodl.com:6431/AxioDL/urde
This commit is contained in:
commit
3e07a06355
|
@ -98,7 +98,7 @@ CHudVisorBeamMenu::CHudVisorBeamMenu(CGuiFrame& baseHud, EHudVisorBeamMenu type,
|
||||||
x20_textpane_menu->TextSupport().SetText(
|
x20_textpane_menu->TextSupport().SetText(
|
||||||
g_MainStringTable->GetString(MenuStringIdx[size_t(x4_type)][x8_selectedItem]));
|
g_MainStringTable->GetString(MenuStringIdx[size_t(x4_type)][x8_selectedItem]));
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < x28_menuItems.size(); ++i) {
|
||||||
SMenuItem& item = x28_menuItems[i];
|
SMenuItem& item = x28_menuItems[i];
|
||||||
item.x0_model_loz->SetColor(g_tweakGuiColors->GetVisorBeamMenuLozColor());
|
item.x0_model_loz->SetColor(g_tweakGuiColors->GetVisorBeamMenuLozColor());
|
||||||
UpdateMenuWidgetTransform(i, *item.x0_model_loz, 1.f);
|
UpdateMenuWidgetTransform(i, *item.x0_model_loz, 1.f);
|
||||||
|
@ -107,20 +107,22 @@ CHudVisorBeamMenu::CHudVisorBeamMenu(CGuiFrame& baseHud, EHudVisorBeamMenu type,
|
||||||
Update(0.f, true);
|
Update(0.f, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHudVisorBeamMenu::UpdateMenuWidgetTransform(int idx, CGuiWidget& w, float t) {
|
void CHudVisorBeamMenu::UpdateMenuWidgetTransform(size_t idx, CGuiWidget& w, float t) {
|
||||||
float translate = t * g_tweakGui->GetVisorBeamMenuItemTranslate();
|
const float translate = t * g_tweakGui->GetVisorBeamMenuItemTranslate();
|
||||||
float scale =
|
const float scale =
|
||||||
t * g_tweakGui->GetVisorBeamMenuItemInactiveScale() + (1.f - t) * g_tweakGui->GetVisorBeamMenuItemActiveScale();
|
t * g_tweakGui->GetVisorBeamMenuItemInactiveScale() + (1.f - t) * g_tweakGui->GetVisorBeamMenuItemActiveScale();
|
||||||
if (x4_type == EHudVisorBeamMenu::Visor) {
|
if (x4_type == EHudVisorBeamMenu::Visor) {
|
||||||
if (idx == 2)
|
if (idx == 2) {
|
||||||
idx = 3;
|
idx = 3;
|
||||||
else if (idx == 3)
|
} else if (idx == 3) {
|
||||||
idx = 2;
|
idx = 2;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (idx == 1)
|
if (idx == 1) {
|
||||||
idx = 2;
|
idx = 2;
|
||||||
else if (idx == 2)
|
} else if (idx == 2) {
|
||||||
idx = 1;
|
idx = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (idx) {
|
switch (idx) {
|
||||||
|
@ -159,13 +161,13 @@ void CHudVisorBeamMenu::Update(float dt, bool init) {
|
||||||
x20_textpane_menu = static_cast<CGuiTextPane*>(x0_baseHud.FindWidget(TextNames[size_t(swappedType)]));
|
x20_textpane_menu = static_cast<CGuiTextPane*>(x0_baseHud.FindWidget(TextNames[size_t(swappedType)]));
|
||||||
x1c_basewidget_menutitle = x0_baseHud.FindWidget(BaseTitleNames[size_t(swappedType)]);
|
x1c_basewidget_menutitle = x0_baseHud.FindWidget(BaseTitleNames[size_t(swappedType)]);
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < x28_menuItems.size(); ++i) {
|
||||||
SMenuItem& item = x28_menuItems[i];
|
SMenuItem& item = x28_menuItems[i];
|
||||||
UpdateMenuWidgetTransform(i, *item.x4_model_icon, item.x8_positioner);
|
UpdateMenuWidgetTransform(i, *item.x4_model_icon, item.x8_positioner);
|
||||||
UpdateMenuWidgetTransform(i, *item.x0_model_loz, 1.f);
|
UpdateMenuWidgetTransform(i, *item.x0_model_loz, 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateMenuWidgetTransform(x8_selectedItem, *x24_model_ghost, x28_menuItems[x8_selectedItem].x8_positioner);
|
UpdateMenuWidgetTransform(size_t(x8_selectedItem), *x24_model_ghost, x28_menuItems[x8_selectedItem].x8_positioner);
|
||||||
}
|
}
|
||||||
|
|
||||||
zeus::CColor activeColor = g_tweakGuiColors->GetVisorBeamMenuItemActive();
|
zeus::CColor activeColor = g_tweakGuiColors->GetVisorBeamMenuItemActive();
|
||||||
|
@ -173,24 +175,30 @@ void CHudVisorBeamMenu::Update(float dt, bool init) {
|
||||||
zeus::CColor lozColor = g_tweakGuiColors->GetVisorBeamMenuLozColor();
|
zeus::CColor lozColor = g_tweakGuiColors->GetVisorBeamMenuLozColor();
|
||||||
std::array<zeus::CColor, 4> tmpColors;
|
std::array<zeus::CColor, 4> tmpColors;
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < x28_menuItems.size(); ++i) {
|
||||||
SMenuItem& item = x28_menuItems[i];
|
SMenuItem& item = x28_menuItems[i];
|
||||||
if (item.xc_opacity > 0.f)
|
if (item.xc_opacity > 0.f) {
|
||||||
item.xc_opacity = std::min(item.xc_opacity + dt, 1.f);
|
item.xc_opacity = std::min(item.xc_opacity + dt, 1.f);
|
||||||
|
}
|
||||||
tmpColors[i] = zeus::CColor::lerp(activeColor, zeus::skClear, item.xc_opacity);
|
tmpColors[i] = zeus::CColor::lerp(activeColor, zeus::skClear, item.xc_opacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (x6c_animPhase) {
|
switch (x6c_animPhase) {
|
||||||
case EAnimPhase::Steady:
|
case EAnimPhase::Steady:
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < x28_menuItems.size(); ++i) {
|
||||||
SMenuItem& item = x28_menuItems[i];
|
SMenuItem& item = x28_menuItems[i];
|
||||||
zeus::CColor& color0 = (x8_selectedItem == i) ? activeColor : inactiveColor;
|
|
||||||
zeus::CColor& color1 = (x8_selectedItem == i) ? lozColor : inactiveColor;
|
const bool isSelectedItem = x8_selectedItem == int(i);
|
||||||
zeus::CColor iconColor = (item.xc_opacity == 0.f) ? zeus::skClear : color0 + tmpColors[i];
|
const bool isClear = item.xc_opacity == 0.0f;
|
||||||
zeus::CColor lColor = (item.xc_opacity == 0.f) ? lozColor : color1 + tmpColors[i];
|
|
||||||
|
const zeus::CColor& color0 = isSelectedItem ? activeColor : inactiveColor;
|
||||||
|
const zeus::CColor& color1 = isSelectedItem ? lozColor : inactiveColor;
|
||||||
|
const zeus::CColor iconColor = isClear ? zeus::skClear : color0 + tmpColors[i];
|
||||||
|
const zeus::CColor lColor = isClear ? lozColor : color1 + tmpColors[i];
|
||||||
|
|
||||||
item.x4_model_icon->SetColor(iconColor);
|
item.x4_model_icon->SetColor(iconColor);
|
||||||
item.x0_model_loz->SetColor(lColor);
|
item.x0_model_loz->SetColor(lColor);
|
||||||
item.x8_positioner = (x8_selectedItem == i) ? 0.f : 1.f;
|
item.x8_positioner = isSelectedItem ? 0.f : 1.f;
|
||||||
}
|
}
|
||||||
x24_model_ghost->SetColor(activeColor);
|
x24_model_ghost->SetColor(activeColor);
|
||||||
break;
|
break;
|
||||||
|
@ -210,20 +218,25 @@ void CHudVisorBeamMenu::Update(float dt, bool init) {
|
||||||
item1.x4_model_icon->SetColor(color);
|
item1.x4_model_icon->SetColor(color);
|
||||||
item1.x0_model_loz->SetColor(lozColor);
|
item1.x0_model_loz->SetColor(lozColor);
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i)
|
for (size_t i = 0; i < x28_menuItems.size(); ++i) {
|
||||||
x28_menuItems[i].x8_positioner = (x8_selectedItem == i) ? 1.f - x10_interp : 1.f;
|
const bool isSelectedItem = x8_selectedItem == int(i);
|
||||||
|
x28_menuItems[i].x8_positioner = isSelectedItem ? 1.f - x10_interp : 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
x24_model_ghost->SetColor(zeus::CColor::lerp(activeColor, inactiveColor, item1.x8_positioner));
|
x24_model_ghost->SetColor(zeus::CColor::lerp(activeColor, inactiveColor, item1.x8_positioner));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EAnimPhase::Animate:
|
case EAnimPhase::Animate:
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < x28_menuItems.size(); ++i) {
|
||||||
SMenuItem& item = x28_menuItems[i];
|
SMenuItem& item = x28_menuItems[i];
|
||||||
zeus::CColor& color0 = (x8_selectedItem == i) ? activeColor : inactiveColor;
|
const bool isSelectedItem = x8_selectedItem == int(i);
|
||||||
zeus::CColor iconColor = (item.xc_opacity == 0.f) ? zeus::skClear : color0 + tmpColors[i];
|
const bool isClear = item.xc_opacity == 0.f;
|
||||||
|
const zeus::CColor& color0 = isSelectedItem ? activeColor : inactiveColor;
|
||||||
|
const zeus::CColor iconColor = isClear ? zeus::skClear : color0 + tmpColors[i];
|
||||||
|
|
||||||
item.x4_model_icon->SetColor(iconColor);
|
item.x4_model_icon->SetColor(iconColor);
|
||||||
item.x0_model_loz->SetColor((item.xc_opacity == 0.f || x8_selectedItem == i) ? lozColor : inactiveColor);
|
item.x0_model_loz->SetColor((isClear || isSelectedItem) ? lozColor : inactiveColor);
|
||||||
item.x8_positioner = (x8_selectedItem == i) ? 1.f - x10_interp : 1.f;
|
item.x8_positioner = isSelectedItem ? 1.f - x10_interp : 1.f;
|
||||||
}
|
}
|
||||||
x24_model_ghost->SetColor(
|
x24_model_ghost->SetColor(
|
||||||
zeus::CColor::lerp(activeColor, inactiveColor, x28_menuItems[x8_selectedItem].x8_positioner));
|
zeus::CColor::lerp(activeColor, inactiveColor, x28_menuItems[x8_selectedItem].x8_positioner));
|
||||||
|
@ -241,11 +254,11 @@ void CHudVisorBeamMenu::Update(float dt, bool init) {
|
||||||
|
|
||||||
if (x14_26_dirty || init) {
|
if (x14_26_dirty || init) {
|
||||||
x14_26_dirty = false;
|
x14_26_dirty = false;
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < x28_menuItems.size(); ++i) {
|
||||||
SMenuItem& item = x28_menuItems[i];
|
SMenuItem& item = x28_menuItems[i];
|
||||||
UpdateMenuWidgetTransform(i, *item.x4_model_icon, item.x8_positioner);
|
UpdateMenuWidgetTransform(i, *item.x4_model_icon, item.x8_positioner);
|
||||||
}
|
}
|
||||||
UpdateMenuWidgetTransform(x8_selectedItem, *x24_model_ghost, x28_menuItems[x8_selectedItem].x8_positioner);
|
UpdateMenuWidgetTransform(size_t(x8_selectedItem), *x24_model_ghost, x28_menuItems[x8_selectedItem].x8_positioner);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!x14_24_visibleDebug || !x14_25_visibleGame)
|
if (!x14_24_visibleDebug || !x14_25_visibleGame)
|
||||||
|
@ -254,8 +267,7 @@ void CHudVisorBeamMenu::Update(float dt, bool init) {
|
||||||
x1c_basewidget_menutitle->SetVisibility(x1c_basewidget_menutitle->GetGeometryColor().a() != 0.f,
|
x1c_basewidget_menutitle->SetVisibility(x1c_basewidget_menutitle->GetGeometryColor().a() != 0.f,
|
||||||
ETraversalMode::Children);
|
ETraversalMode::Children);
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (SMenuItem& item : x28_menuItems) {
|
||||||
SMenuItem& item = x28_menuItems[i];
|
|
||||||
item.x4_model_icon->SetIsVisible(item.x4_model_icon->GetGeometryColor().a() != 0.f);
|
item.x4_model_icon->SetIsVisible(item.x4_model_icon->GetGeometryColor().a() != 0.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -275,10 +287,11 @@ void CHudVisorBeamMenu::SetIsVisibleGame(bool v) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHudVisorBeamMenu::SetPlayerHas(const rstl::reserved_vector<bool, 4>& enables) {
|
void CHudVisorBeamMenu::SetPlayerHas(const rstl::reserved_vector<bool, 4>& enables) {
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (size_t i = 0; i < x28_menuItems.size(); ++i) {
|
||||||
SMenuItem& item = x28_menuItems[i];
|
SMenuItem& item = x28_menuItems[i];
|
||||||
if (item.xc_opacity == 0.f && enables[i])
|
if (item.xc_opacity == 0.f && enables[i]) {
|
||||||
item.xc_opacity = FLT_EPSILON;
|
item.xc_opacity = FLT_EPSILON;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ private:
|
||||||
float x7c_animDur;
|
float x7c_animDur;
|
||||||
bool x80_24_swapBeamControls : 1;
|
bool x80_24_swapBeamControls : 1;
|
||||||
|
|
||||||
void UpdateMenuWidgetTransform(int, CGuiWidget& w, float);
|
void UpdateMenuWidgetTransform(size_t idx, CGuiWidget& w, float t);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CHudVisorBeamMenu(CGuiFrame& baseHud, EHudVisorBeamMenu type, const rstl::reserved_vector<bool, 4>& enables);
|
CHudVisorBeamMenu(CGuiFrame& baseHud, EHudVisorBeamMenu type, const rstl::reserved_vector<bool, 4>& enables);
|
||||||
|
@ -53,7 +53,7 @@ public:
|
||||||
void UpdateHudAlpha(float alpha);
|
void UpdateHudAlpha(float alpha);
|
||||||
void SetIsVisibleGame(bool v);
|
void SetIsVisibleGame(bool v);
|
||||||
void SetPlayerHas(const rstl::reserved_vector<bool, 4>& enables);
|
void SetPlayerHas(const rstl::reserved_vector<bool, 4>& enables);
|
||||||
void SetSelection(int, int, float);
|
void SetSelection(int selection, int pending, float interp);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace urde
|
} // namespace urde
|
||||||
|
|
Loading…
Reference in New Issue