Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/games/cc/backlogmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,7 @@ void BacklogMenu::MenuButtonOnClick(Widgets::BacklogEntry* target) {
}

void BacklogMenu::Show() {
if (State == Hidden) {
CommonMenu::OnShow(FadeInDuration, FadeOutDuration, FadeAnimation);
}

CommonMenu::OnShow(FadeInDuration, FadeOutDuration, FadeAnimation);
UI::BacklogMenu<BacklogEntry>::Show();
}

Expand All @@ -40,10 +37,12 @@ void BacklogMenu::Hide() {
}

void BacklogMenu::UpdateVisibility() {
if (ScrWork[SW_SYSSUBMENUCT] < 32 && State == Shown) {
if (LastSubMenuCt > ScrWork[SW_SYSSUBMENUCT] &&
ScrWork[SW_SYSSUBMENUCT] < 32 && State != Hidden && State != Hiding) {
Hide();
} else if (ScrWork[SW_SYSSUBMENUCT] > 0 && State == Hidden &&
ScrWork[SW_SYSSUBMENUNO] == 1) {
} else if (LastSubMenuCt < ScrWork[SW_SYSSUBMENUCT] &&
ScrWork[SW_SYSSUBMENUCT] > 0 && ScrWork[SW_SYSSUBMENUNO] == 1 &&
State != Shown && State != Showing) {
Show();
}

Expand All @@ -60,6 +59,7 @@ void BacklogMenu::UpdateVisibility() {
entry.Hide();
}
}
LastSubMenuCt = ScrWork[SW_SYSSUBMENUCT];
}

void BacklogMenu::Update(float dt) {
Expand Down
1 change: 1 addition & 0 deletions src/games/cc/backlogmenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class BacklogMenu : public UI::BacklogMenu<Widgets::CC::BacklogEntry>,

private:
void UpdateVisibility() override;
int LastSubMenuCt = 0;
};

} // namespace CC
Expand Down
9 changes: 6 additions & 3 deletions src/games/cclcc/optionsmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,10 +246,12 @@ void OptionsMenu::Hide() {
}

void OptionsMenu::UpdateVisibility() {
if (ScrWork[SW_SYSSUBMENUCT] < 32 && State == Shown) {
if (LastSubMenuCt > ScrWork[SW_SYSSUBMENUCT] &&
ScrWork[SW_SYSSUBMENUCT] < 32 && State != Hidden && State != Hiding) {
Hide();
} else if (ScrWork[SW_SYSSUBMENUCT] > 0 && State == Hidden &&
ScrWork[SW_SYSSUBMENUNO] == 5) {
} else if (LastSubMenuCt < ScrWork[SW_SYSSUBMENUCT] &&
ScrWork[SW_SYSSUBMENUCT] > 0 && ScrWork[SW_SYSSUBMENUNO] == 5 &&
State != Shown && State != Showing) {
Show();
}

Expand All @@ -261,6 +263,7 @@ void OptionsMenu::UpdateVisibility() {
Pages[CurrentPage]->Hide();
if (OpenedAsDirect) PoleAnimation.Finish(AnimationDirection::Out);
}
LastSubMenuCt = ScrWork[SW_SYSSUBMENUCT];
}

void OptionsMenu::Update(float dt) {
Expand Down
1 change: 1 addition & 0 deletions src/games/cclcc/optionsmenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class OptionsMenu : public UI::OptionsMenu, public CommonMenu {
SpriteAnimation PoleAnimation;

std::vector<Widgets::ClickArea> PageButtons;
int LastSubMenuCt = 0;
};

} // namespace CCLCC
Expand Down
12 changes: 8 additions & 4 deletions src/games/cclcc/savemenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ SaveMenu::SaveMenu() : UI::SaveMenu(), CommonMenu(FadeAnimation) {
}

void SaveMenu::Show() {
if (State == Shown) return;
auto onClick = [this](auto* btn) { return MenuButtonOnClick(btn); };

OpenedAsDirect = GetFlag(SF_SYSTEMMENUDIRECT);
Expand Down Expand Up @@ -188,7 +189,7 @@ void SaveMenu::Show() {
}
}
void SaveMenu::Hide() {
if (State != Hiding) {
if (State != Hidden) {
State = Hiding;
FadeAnimation.StartOut();
if (LastFocusedMenu != 0) {
Expand Down Expand Up @@ -252,14 +253,16 @@ void SaveMenu::UpdateInput(float dt) {
}

void SaveMenu::Update(float dt) {
if (ScrWork[SW_SYSSUBMENUCT] < 32 && State == Shown) {
if (LastSubMenuCt > ScrWork[SW_SYSSUBMENUCT] &&
ScrWork[SW_SYSSUBMENUCT] < 32 && State != Hidden && State != Hiding) {
Hide();
} else if (ScrWork[SW_SYSSUBMENUCT] > 0 && State == Hidden &&
} else if (LastSubMenuCt < ScrWork[SW_SYSSUBMENUCT] &&
ScrWork[SW_SYSSUBMENUCT] > 0 && State != Shown &&
State != Showing &&
(ScrWork[SW_SYSSUBMENUNO] == 0 || ScrWork[SW_SYSSUBMENUNO] == 3 ||
ScrWork[SW_SYSSUBMENUNO] == 4)) {
Show();
}

if (State != Hidden) {
FadeAnimation.Update(dt);
PageAnimation.Update(dt);
Expand Down Expand Up @@ -314,6 +317,7 @@ void SaveMenu::Update(float dt) {
IsFocused = true;
if (CurrentlyFocusedElement) CurrentlyFocusedElement->HasFocus = true;
}
LastSubMenuCt = ScrWork[SW_SYSSUBMENUCT];
}

void SaveMenu::Render() {
Expand Down
1 change: 1 addition & 0 deletions src/games/cclcc/savemenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class SaveMenu : public UI::SaveMenu, public CommonMenu {
Animation FadeAnimation;
Animation PageAnimation;
bool HasCleared = true;
int LastSubMenuCt = 0;
};

} // namespace CCLCC
Expand Down
40 changes: 20 additions & 20 deletions src/games/cclcc/systemmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,7 @@ void SystemMenu::UpdateInput(float dt) {
PADinputButtonWentDown = 0;
PADinputMouseWentDown = 0;
}

if (!IsFocused) return;
if (!IsFocused || ScrWork[SW_SYSSUBMENUCT] > 0) return;
const auto* const prevSelected = CurrentlyFocusedElement;
Menu::UpdateInput(dt);
MainItems->UpdateInput(dt);
Expand Down Expand Up @@ -90,10 +89,10 @@ SystemMenu::SystemMenu() : CommonMenu(FadeAnimation) {
void SystemMenu::Show() {
if (State != Shown) {
OpenedAsDirect = GetFlag(SF_SYSTEMMENUDIRECT);
State = Showing;

CommonMenu::OnShow(FadeInDuration, FadeOutDuration, FadeAnimation);
FadeAnimation.StartIn();

if (State != Showing) FadeAnimation.StartIn();

// If the function was called due to a submenu opening directly,
// then don't take over focus
if (!((ScrWork[SW_SYSMENUCT] == 32 && ScrWork[SW_SYSSUBMENUCT]) ||
Expand All @@ -104,7 +103,7 @@ void SystemMenu::Show() {
}
IsFocused = true;
UI::FocusedMenu = this;
ItemsFade.StartIn();
if (State != Showing) ItemsFade.StartIn();
MainItems->Show();
if (LastFocusedButtonId && *LastFocusedButtonId < MenuEntriesNum) {
CurrentlyFocusedElement = MainItems->Children[*LastFocusedButtonId];
Expand All @@ -113,6 +112,7 @@ void SystemMenu::Show() {
AdvanceFocus(FDIR_DOWN);
}
}
State = Showing;
}
}

Expand All @@ -124,9 +124,11 @@ void SystemMenu::Hide() {
LastFocusedButtonId = btn->Id;
}
}
if (State != Hiding) {
FadeAnimation.StartOut();
ItemsFade.StartOut();
}
State = Hiding;
FadeAnimation.StartOut();
ItemsFade.StartOut();
if (LastFocusedMenu != 0) {
UI::FocusedMenu = LastFocusedMenu;
LastFocusedMenu->IsFocused = true;
Expand All @@ -141,27 +143,25 @@ void SystemMenu::Update(float dt) {
CommonMenu::Update(dt);
UpdateInput(dt);

if (State == Shown &&
((GetFlag(SF_TITLEMODE) || ScrWork[SW_SYSMENUCT] < 32) ||
if (State != Hidden && State != Hiding &&
(GetFlag(SF_TITLEMODE) ||
(LastSysMenuCt > ScrWork[SW_SYSMENUCT] && ScrWork[SW_SYSMENUCT] < 32) ||
ScrWork[SW_SYSMENUALPHA] == 0)) {
Hide();
return;
}
if (State == Hidden && !GetFlag(SF_TITLEMODE) &&
((ScrWork[SW_SYSMENUCT] > 0) || ScrWork[SW_SYSMENUALPHA] > 0)) {
} else if (State != Shown && State != Showing && !GetFlag(SF_TITLEMODE) &&
((LastSysMenuCt < ScrWork[SW_SYSMENUCT] &&
ScrWork[SW_SYSMENUCT] > 0))) {
Show();
return;
}

if (State == Showing && ScrWork[SW_SYSMENUCT] == 32) {
State = Shown;
return;
}
if (State == Hiding && FadeAnimation.IsOut() && ItemsFade.IsOut() &&
ScrWork[SW_SYSMENUCT] == 0) {
} else if (State == Hiding && FadeAnimation.IsOut() && ItemsFade.IsOut() &&
ScrWork[SW_SYSMENUCT] == 0) {
State = Hidden;
MainItems->Hide();
return;
}
LastSysMenuCt = ScrWork[SW_SYSMENUCT];

if (State != Hidden) {
FadeAnimation.Update(dt);
Expand Down
1 change: 1 addition & 0 deletions src/games/cclcc/systemmenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class SystemMenu : public Menu, public CommonMenu {
Animation ItemsFade;
bool ItemsFadeComplete = false;
std::optional<int> LastFocusedButtonId;
int LastSysMenuCt = 0;

enum class MenuItems : size_t {
Backlog,
Expand Down
9 changes: 6 additions & 3 deletions src/games/cclcc/tipsmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,12 @@ void TipsMenu::UpdateInput(float dt) {

void TipsMenu::Update(float dt) {
if (!HasInitialized) return;
if (ScrWork[SW_SYSSUBMENUCT] < 32 && State == Shown) {
if (LastSubMenuCt > ScrWork[SW_SYSSUBMENUCT] &&
ScrWork[SW_SYSSUBMENUCT] < 32 && State != Hidden && State != Hiding) {
Hide();
} else if (ScrWork[SW_SYSSUBMENUCT] > 0 && State == Hidden &&
(ScrWork[SW_SYSSUBMENUNO] == 2)) {
} else if (LastSubMenuCt < ScrWork[SW_SYSSUBMENUCT] &&
ScrWork[SW_SYSSUBMENUCT] > 0 && State != Shown &&
State != Showing && (ScrWork[SW_SYSSUBMENUNO] == 2)) {
Show();
}

Expand Down Expand Up @@ -239,6 +241,7 @@ void TipsMenu::Update(float dt) {
float move = -LastYPos;
Move({0, move});
}
LastSubMenuCt = ScrWork[SW_SYSSUBMENUCT];
}

void TipsMenu::Render() {
Expand Down
1 change: 1 addition & 0 deletions src/games/cclcc/tipsmenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class TipsMenu : public UI::TipsMenu, public CommonMenu {
float LastYPos = 0.0f;

Animation TransitionAnimation;
int LastSubMenuCt = 0;
};

} // namespace CCLCC
Expand Down
8 changes: 4 additions & 4 deletions src/ui/backlogmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ BacklogMenu<EntryType>::BacklogMenu()

template <typename EntryType>
void BacklogMenu<EntryType>::Show() {
if (State == Hidden) {
if (State != Shown) {
if (State != Showing) FadeAnimation.StartIn();
State = Showing;
FadeAnimation.StartIn();

for (auto& entry : Entries) {
entry.Show();
Expand Down Expand Up @@ -104,9 +104,9 @@ void BacklogMenu<EntryType>::Show() {

template <typename EntryType>
void BacklogMenu<EntryType>::Hide() {
if (State == Shown) {
if (State != Hidden) {
if (State != Hiding) FadeAnimation.StartOut();
State = Hiding;
FadeAnimation.StartOut();

if (LastFocusedMenu != nullptr) {
UI::FocusedMenu = LastFocusedMenu;
Expand Down
4 changes: 4 additions & 0 deletions src/vm/inst_dialogue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,8 @@ VmInstruction(InstMesRev) {
PopUint8(type);
switch (type) {
case 0: // DispInit
if (Profile::Vm::GameInstructionSet == InstructionSet::MO6TW)
UI::BacklogMenuPtr->Show();
ImpLogSlow(LogLevel::Warning, LogChannel::VMStub,
"STUB instruction SetMesModeFormat(type: DispInit)\n");
break;
Expand All @@ -807,6 +809,8 @@ VmInstruction(InstMesRev) {
"STUB instruction SetMesModeFormat(type: Main)\n");
break;
case 2: // AllCls
if (Profile::Vm::GameInstructionSet == InstructionSet::MO6TW)
UI::BacklogMenuPtr->Hide();
ImpLogSlow(LogLevel::Warning, LogChannel::VMStub,
"STUB instruction SetMesModeFormat(type: AllCls)\n");
break;
Expand Down
Loading