Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

don't close the H&S menu after toggling the gravity button #65

Merged
merged 4 commits into from
Jun 25, 2024
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
7 changes: 5 additions & 2 deletions include/game/StageScene/StageSceneStateServerConfig.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ class StageSceneStateServerConfig : public al::HostStateBase<al::Scene>, public
void endSubMenu();

private:

inline void subMenuStart();
inline void subMenuUpdate();

inline void subMenuRefresh();

al::MessageSystem* mMsgSystem = nullptr;
FooterParts* mFooterParts = nullptr;
GameDataHolder* mGameDataHolder = nullptr;
Expand All @@ -76,6 +76,9 @@ class StageSceneStateServerConfig : public al::HostStateBase<al::Scene>, public
sead::SafeArray<GameModeEntry, GameModeConfigMenuFactory::getMenuCount()> mGamemodeConfigMenus;
GameModeEntry *mGamemodeConfigMenu = nullptr;

inline void activateInput();
inline void deactivateInput();

bool mIsDecideConfig = false;
};

Expand Down
8 changes: 7 additions & 1 deletion include/server/gamemode/GameModeConfigMenu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,17 @@

class GameModeConfigMenu {
public:
enum UpdateAction {
NOOP,
CLOSE,
REFRESH,
};

GameModeConfigMenu() = default;

virtual void initMenu(const al::LayoutInitInfo &initInfo) {return;}

virtual bool updateMenu(int selectIndex) {return false;}
virtual UpdateAction updateMenu(int selectIndex) {return UpdateAction::NOOP;}

virtual const sead::WFixedSafeString<0x200>* getStringData() {return nullptr;}

Expand Down
5 changes: 2 additions & 3 deletions include/server/hns/HideAndSeekConfigMenu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ class HideAndSeekConfigMenu : public GameModeConfigMenu {

void initMenu(const al::LayoutInitInfo &initInfo) override;
const sead::WFixedSafeString<0x200>* getStringData() override;
bool updateMenu(int selectIndex) override;
GameModeConfigMenu::UpdateAction updateMenu(int selectIndex) override;

const int getMenuSize() override { return mItemCount; }

private:
static constexpr int mItemCount = 1;
sead::SafeArray<sead::WFixedSafeString<0x200>, mItemCount>* gravityOn = nullptr;
sead::SafeArray<sead::WFixedSafeString<0x200>, mItemCount>* gravityOff = nullptr;
sead::SafeArray<sead::WFixedSafeString<0x200>, mItemCount>* mItems = nullptr;
};
39 changes: 16 additions & 23 deletions source/server/hns/HideAndSeekConfigMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,49 +6,42 @@
#include "server/Client.hpp"

HideAndSeekConfigMenu::HideAndSeekConfigMenu() : GameModeConfigMenu() {
gravityOn = new sead::SafeArray<sead::WFixedSafeString<0x200>, mItemCount>();
gravityOn->mBuffer[0].copy(u"Toggle H&S Gravity (ON)");

gravityOff = new sead::SafeArray<sead::WFixedSafeString<0x200>, mItemCount>();
gravityOff->mBuffer[0].copy(u"Toggle H&S Gravity (OFF)");
mItems = new sead::SafeArray<sead::WFixedSafeString<0x200>, mItemCount>();
mItems->mBuffer[0].copy(u"Toggle H&S Gravity (OFF)"); // TBD
}

void HideAndSeekConfigMenu::initMenu(const al::LayoutInitInfo &initInfo) {

}
void HideAndSeekConfigMenu::initMenu(const al::LayoutInitInfo &initInfo) {}

const sead::WFixedSafeString<0x200>* HideAndSeekConfigMenu::getStringData() {
HideAndSeekInfo *curMode = GameModeManager::instance()->getInfo<HideAndSeekInfo>();
return (
mItems->mBuffer[0].copy(
GameModeManager::instance()->isMode(GameMode::HIDEANDSEEK)
&& curMode != nullptr
&& curMode->mIsUseGravity
? gravityOn->mBuffer
: gravityOff->mBuffer
? u"Toggle H&S Gravity (ON) "
: u"Toggle H&S Gravity (OFF)"
);
return mItems->mBuffer;
}

bool HideAndSeekConfigMenu::updateMenu(int selectIndex) {

HideAndSeekInfo *curMode = GameModeManager::instance()->getInfo<HideAndSeekInfo>();

GameModeConfigMenu::UpdateAction HideAndSeekConfigMenu::updateMenu(int selectIndex) {
Logger::log("Setting Gravity Mode.\n");

if (!curMode) {
Logger::log("Unable to Load Mode info!\n");
return true;
}

switch (selectIndex) {
case 0: {
HideAndSeekInfo *curMode = GameModeManager::instance()->getInfo<HideAndSeekInfo>();
if (!curMode) {
Logger::log("Unable to Load Mode info!\n");
return UpdateAction::NOOP;
}
if (GameModeManager::instance()->isMode(GameMode::HIDEANDSEEK)) {
curMode->mIsUseGravity = !curMode->mIsUseGravity;
return UpdateAction::REFRESH;
}
return true;
return UpdateAction::NOOP;
}
default:
Logger::log("Failed to interpret Index!\n");
return false;
return UpdateAction::NOOP;
}

}
65 changes: 36 additions & 29 deletions source/states/StageSceneStateServerConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,15 +136,7 @@ al::MessageSystem* StageSceneStateServerConfig::getMessageSystem(void) const {

void StageSceneStateServerConfig::exeMainMenu() {
if (al::isFirstStep(this)) {

mInput->reset();

mCurrentList->activate();

mCurrentList->appearCursor();

mIsDecideConfig = false;

activateInput();
}

mInput->update();
Expand All @@ -163,10 +155,7 @@ void StageSceneStateServerConfig::exeMainMenu() {
}

if (rs::isTriggerUiDecide(mHost)) {
al::startHitReaction(mCurrentMenu, "決定", 0);
mCurrentList->endCursor();
mCurrentList->decide();
mIsDecideConfig = true;
deactivateInput();
}

if (mIsDecideConfig && mCurrentList->isDecideEnd()) {
Expand Down Expand Up @@ -248,20 +237,27 @@ void StageSceneStateServerConfig::exeGamemodeConfig() {
subMenuUpdate();

if (mIsDecideConfig && mCurrentList->isDecideEnd()) {
if (mGamemodeConfigMenu->mMenu->updateMenu(mCurrentList->mCurSelected)) {
endSubMenu();
GameModeConfigMenu::UpdateAction action = mGamemodeConfigMenu->mMenu->updateMenu(mCurrentList->mCurSelected);
switch (action) {
case GameModeConfigMenu::UpdateAction::CLOSE:
endSubMenu();
break;
case GameModeConfigMenu::UpdateAction::REFRESH:
subMenuRefresh();
break;
case GameModeConfigMenu::UpdateAction::NOOP:
activateInput();
break;
}
}
}

void StageSceneStateServerConfig::exeGamemodeSelect() {
if (al::isFirstStep(this)) {

mCurrentList = mModeSelectList;
mCurrentMenu = mModeSelect;

subMenuStart();

}

subMenuUpdate();
Expand All @@ -274,7 +270,6 @@ void StageSceneStateServerConfig::exeGamemodeSelect() {
}

void StageSceneStateServerConfig::exeSaveData() {

if (al::isFirstStep(this)) {
SaveDataAccessFunction::startSaveDataWrite(mGameDataHolder);
}
Expand Down Expand Up @@ -303,15 +298,9 @@ void StageSceneStateServerConfig::subMenuStart() {

mCurrentMenu->kill();

mInput->reset();

mCurrentList->activate();

mCurrentList->appearCursor();
activateInput();

mCurrentMenu->startAppear("Appear");

mIsDecideConfig = false;
}

void StageSceneStateServerConfig::subMenuUpdate() {
Expand All @@ -332,13 +321,31 @@ void StageSceneStateServerConfig::subMenuUpdate() {
}

if (rs::isTriggerUiDecide(mHost)) {
al::startHitReaction(mCurrentMenu, "決定", 0);
mCurrentList->endCursor();
mCurrentList->decide();
mIsDecideConfig = true;
deactivateInput();
}
}

void StageSceneStateServerConfig::subMenuRefresh() {
mGamemodeConfigMenu = &mGamemodeConfigMenus[GameModeManager::instance()->getGameMode()];
mGamemodeConfigMenu->mList->initDataNoResetSelected(mGamemodeConfigMenu->mMenu->getMenuSize());
mGamemodeConfigMenu->mList->addStringData(mGamemodeConfigMenu->mMenu->getStringData(), "TxtContent");
mGamemodeConfigMenu->mList->updateParts();
activateInput();
}

void StageSceneStateServerConfig::activateInput() {
mInput->reset();
mCurrentList->activate();
mCurrentList->appearCursor();
mIsDecideConfig = false;
}

void StageSceneStateServerConfig::deactivateInput() {
al::startHitReaction(mCurrentMenu, "決定", 0);
mCurrentList->endCursor();
mCurrentList->decide();
mIsDecideConfig = true;
}

namespace {
NERVE_IMPL(StageSceneStateServerConfig, MainMenu)
Expand Down
Loading