aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp')
-rw-r--r--Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp462
1 files changed, 462 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp
new file mode 100644
index 00000000..6d472b50
--- /dev/null
+++ b/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp
@@ -0,0 +1,462 @@
+#include "stdafx.h"
+#include "UI.h"
+#include "UIScene_LaunchMoreOptionsMenu.h"
+
+#define GAME_CREATE_ONLINE_TIMER_ID 0
+#define GAME_CREATE_ONLINE_TIMER_TIME 100
+
+#ifdef _LARGE_WORLDS
+int m_iWorldSizeTitleA[4] =
+{
+ IDS_WORLD_SIZE_TITLE_CLASSIC,
+ IDS_WORLD_SIZE_TITLE_SMALL,
+ IDS_WORLD_SIZE_TITLE_MEDIUM,
+ IDS_WORLD_SIZE_TITLE_LARGE,
+};
+#endif
+
+UIScene_LaunchMoreOptionsMenu::UIScene_LaunchMoreOptionsMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
+{
+ // Setup all the Iggy references we need for this scene
+ initialiseMovie();
+
+ m_params = (LaunchMoreOptionsMenuInitData *)initData;
+
+ m_labelWorldOptions.init(app.GetString(IDS_WORLD_OPTIONS));
+
+ IggyDataValue result;
+ IggyDataValue value[1];
+ value[0].type = IGGY_DATATYPE_number;
+ value[0].number = m_params->bGenerateOptions?0:1;
+ IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetMenuType , 1 , value );
+
+ m_bMultiplayerAllowed = ProfileManager.IsSignedInLive( m_params->iPad ) && ProfileManager.AllowedToPlayMultiplayer(m_params->iPad);
+
+ bool bOnlineGame, bInviteOnly, bAllowFriendsOfFriends;
+ bOnlineGame = m_params->bOnlineGame;
+ bInviteOnly = m_params->bInviteOnly;
+ bAllowFriendsOfFriends = m_params->bAllowFriendsOfFriends;
+
+ // 4J-PB - to stop an offline game being able to select the online flag
+ if(ProfileManager.IsSignedInLive(m_params->iPad) == false)
+ {
+ m_checkboxes[eLaunchCheckbox_Online].SetEnable(false);
+ }
+
+ if ( m_params->bOnlineSettingChangedBySystem && !m_bMultiplayerAllowed )
+ {
+ // 4J-JEV: Disable and uncheck these boxes if they can't play multiplayer.
+ m_checkboxes[eLaunchCheckbox_Online].SetEnable(false);
+ m_checkboxes[eLaunchCheckbox_InviteOnly].SetEnable(false);
+ m_checkboxes[eLaunchCheckbox_AllowFoF].SetEnable(false);
+
+ bOnlineGame = bInviteOnly = bAllowFriendsOfFriends = false;
+ }
+ else if(!m_params->bOnlineGame)
+ {
+
+ m_checkboxes[eLaunchCheckbox_InviteOnly].SetEnable(false);
+ m_checkboxes[eLaunchCheckbox_AllowFoF].SetEnable(false);
+ }
+
+ m_checkboxes[eLaunchCheckbox_Online].init(app.GetString(IDS_ONLINE_GAME),eLaunchCheckbox_Online,bOnlineGame);
+ m_checkboxes[eLaunchCheckbox_InviteOnly].init(app.GetString(IDS_INVITE_ONLY),eLaunchCheckbox_InviteOnly,bInviteOnly);
+ m_checkboxes[eLaunchCheckbox_AllowFoF].init(app.GetString(IDS_ALLOWFRIENDSOFFRIENDS),eLaunchCheckbox_AllowFoF,bAllowFriendsOfFriends);
+ m_checkboxes[eLaunchCheckbox_PVP].init(app.GetString(IDS_PLAYER_VS_PLAYER),eLaunchCheckbox_PVP,m_params->bPVP);
+ m_checkboxes[eLaunchCheckbox_TrustSystem].init(app.GetString(IDS_TRUST_PLAYERS),eLaunchCheckbox_TrustSystem,m_params->bTrust);
+ m_checkboxes[eLaunchCheckbox_FireSpreads].init(app.GetString(IDS_FIRE_SPREADS),eLaunchCheckbox_FireSpreads,m_params->bFireSpreads);
+ m_checkboxes[eLaunchCheckbox_TNT].init(app.GetString(IDS_TNT_EXPLODES),eLaunchCheckbox_TNT,m_params->bTNT);
+ m_checkboxes[eLaunchCheckbox_HostPrivileges].init(app.GetString(IDS_HOST_PRIVILEGES),eLaunchCheckbox_HostPrivileges,m_params->bHostPrivileges);
+ m_checkboxes[eLaunchCheckbox_ResetNether].init(app.GetString(IDS_RESET_NETHER),eLaunchCheckbox_ResetNether,m_params->bResetNether);
+ m_checkboxes[eLaunchCheckbox_Structures].init(app.GetString(IDS_GENERATE_STRUCTURES),eLaunchCheckbox_Structures,m_params->bStructures);
+ m_checkboxes[eLaunchCheckbox_FlatWorld].init(app.GetString(IDS_SUPERFLAT_WORLD),eLaunchCheckbox_FlatWorld,m_params->bFlatWorld);
+ m_checkboxes[eLaunchCheckbox_BonusChest].init(app.GetString(IDS_BONUS_CHEST),eLaunchCheckbox_BonusChest,m_params->bBonusChest);
+
+ if(m_loadedResolution == eSceneResolution_1080)
+ {
+#ifdef _LARGE_WORLDS
+ m_labelGameOptions.init( app.GetString(IDS_GAME_OPTIONS) );
+ m_labelSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_SEED));
+ m_labelRandomSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_RANDOM_SEED));
+ m_editSeed.init(m_params->seed, eControl_EditSeed);
+ m_labelWorldSize.init(app.GetString(IDS_WORLD_SIZE));
+ m_sliderWorldSize.init(app.GetString(m_iWorldSizeTitleA[m_params->worldSize]),eControl_WorldSize,0,3,m_params->worldSize);
+
+ m_checkboxes[eLaunchCheckbox_DisableSaving].init( app.GetString(IDS_DISABLE_SAVING), eLaunchCheckbox_DisableSaving, m_params->bDisableSaving );
+#endif
+ }
+
+ // Only the Xbox 360 needs a reset nether
+ // 4J-PB - PS3 needs it now
+ // #ifndef _XBOX
+ // if(!m_params->bGenerateOptions) removeControl( &m_checkboxes[eLaunchCheckbox_ResetNether], false );
+ // #endif
+
+ // set the default text
+#ifdef _LARGE_WORLDS
+ wstring wsText=L"";
+ if(m_params->bGenerateOptions)
+ {
+ wsText = app.GetString(IDS_GAMEOPTION_SEED);
+ }
+ else
+ {
+ wsText = app.GetString(IDS_GAMEOPTION_ONLINE);
+ }
+#else
+ wstring wsText=app.GetString(IDS_GAMEOPTION_ONLINE);
+#endif
+ EHTMLFontSize size = eHTMLSize_Normal;
+ if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen())
+ {
+ size = eHTMLSize_Splitscreen;
+ }
+ wchar_t startTags[64];
+ swprintf(startTags,64,L"<font color=\"#%08x\">",app.GetHTMLColour(eHTMLColor_White));
+ wsText= startTags + wsText;
+ m_labelDescription.init(wsText);
+
+ addTimer(GAME_CREATE_ONLINE_TIMER_ID,GAME_CREATE_ONLINE_TIMER_TIME);
+
+#ifdef __PSVITA__
+ ui.TouchBoxRebuild(this);
+#endif
+
+ m_bIgnoreInput = false;
+ m_tabIndex = 0;
+}
+
+void UIScene_LaunchMoreOptionsMenu::updateTooltips()
+{
+ int changeTabTooltip = -1;
+
+#ifdef _LARGE_WORLDS
+ if (m_loadedResolution == eSceneResolution_1080 && m_params->bGenerateOptions)
+ {
+ // Set tooltip for change tab (only two tabs)
+ if (m_tabIndex == 0)
+ {
+ changeTabTooltip = IDS_GAME_OPTIONS;
+ }
+ else
+ {
+ changeTabTooltip = IDS_WORLD_OPTIONS;
+ }
+ }
+#endif
+
+ // If there's a change tab tooltip, left bumper symbol should show but not the text (-2)
+ int lb = changeTabTooltip == -1 ? -1 : -2;
+
+ ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK, -1, -1, -1, -1, lb, changeTabTooltip);
+}
+
+void UIScene_LaunchMoreOptionsMenu::updateComponents()
+{
+ m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,true);
+#ifdef _LARGE_WORLDS
+ m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true);
+#else
+ m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,false);
+#endif
+}
+
+wstring UIScene_LaunchMoreOptionsMenu::getMoviePath()
+{
+ return L"LaunchMoreOptionsMenu";
+}
+
+void UIScene_LaunchMoreOptionsMenu::tick()
+{
+ UIScene::tick();
+
+ bool bMultiplayerAllowed = ProfileManager.IsSignedInLive(m_params->iPad) && ProfileManager.AllowedToPlayMultiplayer(m_params->iPad);
+
+ if (bMultiplayerAllowed != m_bMultiplayerAllowed)
+ {
+ m_checkboxes[ eLaunchCheckbox_Online].SetEnable(bMultiplayerAllowed);
+ m_checkboxes[eLaunchCheckbox_InviteOnly].SetEnable(bMultiplayerAllowed);
+ m_checkboxes[ eLaunchCheckbox_AllowFoF].SetEnable(bMultiplayerAllowed);
+
+ if (bMultiplayerAllowed)
+ {
+ m_checkboxes[ eLaunchCheckbox_Online].setChecked(true);
+ m_checkboxes[eLaunchCheckbox_AllowFoF].setChecked(true);
+ }
+
+ m_bMultiplayerAllowed = bMultiplayerAllowed;
+ }
+}
+
+void UIScene_LaunchMoreOptionsMenu::handleDestroy()
+{
+#ifdef __PSVITA__
+ app.DebugPrintf("missing InputManager.DestroyKeyboard on Vita !!!!!!\n");
+#endif
+
+ // so shut down the keyboard if it is displayed
+#if ( defined __PS3__ || defined __ORBIS__ || defined _DURANGO)
+ InputManager.DestroyKeyboard();
+#endif
+}
+
+void UIScene_LaunchMoreOptionsMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled)
+{
+ if(m_bIgnoreInput) return;
+
+ //app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE");
+ ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
+
+ switch(key)
+ {
+ case ACTION_MENU_CANCEL:
+ if(pressed)
+ {
+ navigateBack();
+ handled = true;
+ }
+ break;
+ case ACTION_MENU_OK:
+#ifdef __ORBIS__
+ case ACTION_MENU_TOUCHPAD_PRESS:
+#endif
+ // 4J-JEV: Inform user why their game must be offline.
+#if defined _XBOX_ONE
+ {
+ UIControl_CheckBox *checkboxOnline = &m_checkboxes[eLaunchCheckbox_Online];
+ if ( pressed && controlHasFocus( checkboxOnline->getId()) && !checkboxOnline->IsEnabled() )
+ {
+ UINT uiIDA[1] = { IDS_CONFIRM_OK };
+ ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable());
+ }
+ }
+#endif
+
+ case ACTION_MENU_UP:
+ case ACTION_MENU_DOWN:
+ case ACTION_MENU_LEFT:
+ case ACTION_MENU_RIGHT:
+ case ACTION_MENU_PAGEUP:
+ case ACTION_MENU_PAGEDOWN:
+ case ACTION_MENU_OTHER_STICK_UP:
+ case ACTION_MENU_OTHER_STICK_DOWN:
+ sendInputToMovie(key, repeat, pressed, released);
+ handled = true;
+ break;
+ case ACTION_MENU_LEFT_SCROLL:
+ case ACTION_MENU_RIGHT_SCROLL:
+ if(pressed && m_loadedResolution == eSceneResolution_1080)
+ {
+ // Toggle tab index
+ m_tabIndex = m_tabIndex == 0 ? 1 : 0;
+ updateTooltips();
+ IggyDataValue result;
+ IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcChangeTab , 0 , NULL );
+ }
+ break;
+ }
+}
+
+void UIScene_LaunchMoreOptionsMenu::handleCheckboxToggled(F64 controlId, bool selected)
+{
+ //CD - Added for audio
+ ui.PlayUISFX(eSFX_Press);
+
+ switch((EControls)((int)controlId))
+ {
+ case eLaunchCheckbox_Online:
+ m_params->bOnlineGame = selected;
+ break;
+ case eLaunchCheckbox_InviteOnly:
+ m_params->bInviteOnly = selected;
+ break;
+ case eLaunchCheckbox_AllowFoF:
+ m_params->bAllowFriendsOfFriends = selected;
+ break;
+ case eLaunchCheckbox_PVP:
+ m_params->bPVP = selected;
+ break;
+ case eLaunchCheckbox_TrustSystem:
+ m_params->bTrust = selected;
+ break;
+ case eLaunchCheckbox_FireSpreads:
+ m_params->bFireSpreads = selected;
+ break;
+ case eLaunchCheckbox_TNT:
+ m_params->bTNT = selected;
+ break;
+ case eLaunchCheckbox_HostPrivileges:
+ m_params->bHostPrivileges = selected;
+ break;
+ case eLaunchCheckbox_ResetNether:
+ m_params->bResetNether = selected;
+ break;
+ case eLaunchCheckbox_Structures:
+ m_params->bStructures = selected;
+ break;
+ case eLaunchCheckbox_FlatWorld:
+ m_params->bFlatWorld = selected;
+ break;
+ case eLaunchCheckbox_BonusChest:
+ m_params->bBonusChest = selected;
+ break;
+ case eLaunchCheckbox_DisableSaving:
+ m_params->bDisableSaving = selected;
+ break;
+ };
+}
+
+void UIScene_LaunchMoreOptionsMenu::handleFocusChange(F64 controlId, F64 childId)
+{
+ int stringId = 0;
+ switch((int)controlId)
+ {
+ case eLaunchCheckbox_Online:
+ stringId = IDS_GAMEOPTION_ONLINE;
+ break;
+ case eLaunchCheckbox_InviteOnly:
+ stringId = IDS_GAMEOPTION_INVITEONLY;
+ break;
+ case eLaunchCheckbox_AllowFoF:
+ stringId = IDS_GAMEOPTION_ALLOWFOF;
+ break;
+ case eLaunchCheckbox_PVP:
+ stringId = IDS_GAMEOPTION_PVP;
+ break;
+ case eLaunchCheckbox_TrustSystem:
+ stringId = IDS_GAMEOPTION_TRUST;
+ break;
+ case eLaunchCheckbox_FireSpreads:
+ stringId = IDS_GAMEOPTION_FIRE_SPREADS;
+ break;
+ case eLaunchCheckbox_TNT:
+ stringId = IDS_GAMEOPTION_TNT_EXPLODES;
+ break;
+ case eLaunchCheckbox_HostPrivileges:
+ stringId = IDS_GAMEOPTION_HOST_PRIVILEGES;
+ break;
+ case eLaunchCheckbox_ResetNether:
+ stringId = IDS_GAMEOPTION_RESET_NETHER;
+ break;
+ case eLaunchCheckbox_Structures:
+ stringId = IDS_GAMEOPTION_STRUCTURES;
+ break;
+ case eLaunchCheckbox_FlatWorld:
+ stringId = IDS_GAMEOPTION_SUPERFLAT;
+ break;
+ case eLaunchCheckbox_BonusChest:
+ stringId = IDS_GAMEOPTION_BONUS_CHEST;
+ break;
+#ifdef _LARGE_WORLDS
+ case eControl_EditSeed:
+ stringId = IDS_GAMEOPTION_SEED;
+ break;
+ case eControl_WorldSize:
+ stringId = IDS_GAMEOPTION_WORLD_SIZE;
+ break;
+ case eLaunchCheckbox_DisableSaving:
+ stringId = IDS_GAMEOPTION_DISABLE_SAVING;
+ break;
+#endif
+ };
+
+ wstring wsText=app.GetString(stringId);
+ EHTMLFontSize size = eHTMLSize_Normal;
+ if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen())
+ {
+ size = eHTMLSize_Splitscreen;
+ }
+ wchar_t startTags[64];
+ swprintf(startTags,64,L"<font color=\"#%08x\">",app.GetHTMLColour(eHTMLColor_White));
+ wsText= startTags + wsText;
+
+ m_labelDescription.setLabel(wsText);
+}
+
+void UIScene_LaunchMoreOptionsMenu::handleTimerComplete(int id)
+{
+ /*switch(id) //4J-JEV: Moved this over to the tick.
+ {
+ case GAME_CREATE_ONLINE_TIMER_ID:
+ {
+ bool bMultiplayerAllowed
+ = ProfileManager.IsSignedInLive(m_params->iPad)
+ && ProfileManager.AllowedToPlayMultiplayer(m_params->iPad);
+
+ if (bMultiplayerAllowed != m_bMultiplayerAllowed)
+ {
+ m_checkboxes[ eLaunchCheckbox_Online].SetEnable(bMultiplayerAllowed);
+ m_checkboxes[eLaunchCheckbox_InviteOnly].SetEnable(bMultiplayerAllowed);
+ m_checkboxes[ eLaunchCheckbox_AllowFoF].SetEnable(bMultiplayerAllowed);
+
+ m_checkboxes[eLaunchCheckbox_Online].setChecked(bMultiplayerAllowed);
+
+ m_bMultiplayerAllowed = bMultiplayerAllowed;
+ }
+ }
+ break;
+ };*/
+}
+
+int UIScene_LaunchMoreOptionsMenu::KeyboardCompleteSeedCallback(LPVOID lpParam,bool bRes)
+{
+ UIScene_LaunchMoreOptionsMenu *pClass=(UIScene_LaunchMoreOptionsMenu *)lpParam;
+ pClass->m_bIgnoreInput=false;
+ // 4J HEG - No reason to set value if keyboard was cancelled
+ if (bRes)
+ {
+ uint16_t pchText[128];
+ ZeroMemory(pchText, 128 * sizeof(uint16_t) );
+ InputManager.GetText(pchText);
+ pClass->m_editSeed.setLabel((wchar_t *)pchText);
+ pClass->m_params->seed = (wchar_t *)pchText;
+ }
+ return 0;
+}
+
+void UIScene_LaunchMoreOptionsMenu::handlePress(F64 controlId, F64 childId)
+{
+ if(m_bIgnoreInput) return;
+
+ switch((int)controlId)
+ {
+ case eControl_EditSeed:
+ {
+ m_bIgnoreInput=true;
+#ifdef __PS3__
+ int language = XGetLanguage();
+ switch(language)
+ {
+ case XC_LANGUAGE_JAPANESE:
+ case XC_LANGUAGE_KOREAN:
+ case XC_LANGUAGE_TCHINESE:
+ InputManager.RequestKeyboard(app.GetString(IDS_CREATE_NEW_WORLD_SEED),m_editSeed.getLabel(),(DWORD)0,60,&UIScene_LaunchMoreOptionsMenu::KeyboardCompleteSeedCallback,this,C_4JInput::EKeyboardMode_Default);
+ break;
+ default:
+ // 4J Stu - Use a different keyboard for non-asian languages so we don't have prediction on
+ InputManager.RequestKeyboard(app.GetString(IDS_CREATE_NEW_WORLD_SEED),m_editSeed.getLabel(),(DWORD)0,60,&UIScene_LaunchMoreOptionsMenu::KeyboardCompleteSeedCallback,this,C_4JInput::EKeyboardMode_Alphabet_Extended);
+ break;
+ }
+#else
+ InputManager.RequestKeyboard(app.GetString(IDS_CREATE_NEW_WORLD_SEED),m_editSeed.getLabel(),(DWORD)0,60,&UIScene_LaunchMoreOptionsMenu::KeyboardCompleteSeedCallback,this,C_4JInput::EKeyboardMode_Default);
+#endif
+ }
+ break;
+ }
+}
+
+
+void UIScene_LaunchMoreOptionsMenu::handleSliderMove(F64 sliderId, F64 currentValue)
+{
+ int value = (int)currentValue;
+ switch((int)sliderId)
+ {
+ case eControl_WorldSize:
+#ifdef _LARGE_WORLDS
+ m_sliderWorldSize.handleSliderMove(value);
+ m_params->worldSize = value;
+ m_sliderWorldSize.setLabel(app.GetString(m_iWorldSizeTitleA[value]));
+#endif
+ break;
+ }
+}