Merge pull request #65 from Istador/pr-gravity-toggle
don't close the H&S menu after toggling the gravity button
This commit is contained in:
commit
b2d444b2b9
|
@ -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;
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;}
|
||||
|
||||
|
|
|
@ -10,12 +10,11 @@ public:
|
|||
|
||||
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;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
@ -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()) {
|
||||
|
@ -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();
|
||||
|
@ -274,7 +270,6 @@ void StageSceneStateServerConfig::exeGamemodeSelect() {
|
|||
}
|
||||
|
||||
void StageSceneStateServerConfig::exeSaveData() {
|
||||
|
||||
if (al::isFirstStep(this)) {
|
||||
SaveDataAccessFunction::startSaveDataWrite(mGameDataHolder);
|
||||
}
|
||||
|
@ -303,15 +298,9 @@ void StageSceneStateServerConfig::subMenuStart() {
|
|||
|
||||
mCurrentMenu->kill();
|
||||
|
||||
mInput->reset();
|
||||
|
||||
mCurrentList->activate();
|
||||
|
||||
mCurrentList->appearCursor();
|
||||
activateInput();
|
||||
|
||||
mCurrentMenu->startAppear("Appear");
|
||||
|
||||
mIsDecideConfig = false;
|
||||
}
|
||||
|
||||
void StageSceneStateServerConfig::subMenuUpdate() {
|
||||
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue