Files
cafeberry/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp
2026-09-13 19:41:44 -07:00

871 lines
29 KiB
C++

#include "stdafx.h"
#include "UI.h"
#include "UIScene_LaunchMoreOptionsMenu.h"
#include "DirectTextEdit.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;
#ifdef _LARGE_WORLDS
IggyDataValue value[2];
value[0].type = IGGY_DATATYPE_number;
value[0].number = m_params->bGenerateOptions ? 0 : 1;
value[1].type = IGGY_DATATYPE_boolean;
value[1].boolval = false;
if(m_params->currentWorldSize == e_worldSize_Classic ||
m_params->currentWorldSize == e_worldSize_Small ||
m_params->currentWorldSize == e_worldSize_Medium )
{
// don't show the increase world size stuff if we're already large, or the size is unknown.
value[1].boolval = true;
}
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetMenuType , 2 , value );
#else
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 );
#endif
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);
}
// Init cheats
m_bUpdateCheats = false;
// Update cheat checkboxes
UpdateCheats();
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);
m_checkboxes[eLaunchCheckbox_KeepInventory].init(app.GetString(IDS_KEEP_INVENTORY), eLaunchCheckbox_KeepInventory, m_params->bKeepInventory);
m_checkboxes[eLaunchCheckbox_MobSpawning].init(app.GetString(IDS_MOB_SPAWNING), eLaunchCheckbox_MobSpawning, m_params->bDoMobSpawning);
m_checkboxes[eLaunchCheckbox_MobLoot].init(app.GetString(IDS_MOB_LOOT), eLaunchCheckbox_MobLoot, m_params->bDoMobLoot);
m_checkboxes[eLaunchCheckbox_MobGriefing].init(app.GetString(IDS_MOB_GRIEFING), eLaunchCheckbox_MobGriefing, m_params->bMobGriefing);
m_checkboxes[eLaunchCheckbox_TileDrops].init(app.GetString(IDS_TILE_DROPS), eLaunchCheckbox_TileDrops, m_params->bDoTileDrops);
m_checkboxes[eLaunchCheckbox_NaturalRegeneration].init(app.GetString(IDS_NATURAL_REGEN), eLaunchCheckbox_NaturalRegeneration, m_params->bNaturalRegeneration);
m_checkboxes[eLaunchCheckbox_DayLightCycle].init(app.GetString(IDS_DAYLIGHT_CYCLE), eLaunchCheckbox_DayLightCycle, m_params->bDoDaylightCycle);
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);
#ifdef _LARGE_WORLDS
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 );
if(m_params->currentWorldSize != e_worldSize_Unknown)
{
m_labelWorldResize.init(app.GetString(IDS_INCREASE_WORLD_SIZE));
int min= int(m_params->currentWorldSize)-1;
int max=3;
int curr = int(m_params->newWorldSize)-1;
m_sliderWorldResize.init(app.GetString(m_iWorldSizeTitleA[curr]),eControl_WorldResize,min,max,curr);
m_checkboxes[eLaunchCheckbox_WorldResizeType].init(app.GetString(IDS_INCREASE_WORLD_SIZE_OVERWRITE_EDGES),eLaunchCheckbox_WorldResizeType,m_params->newWorldSizeOverwriteEdges);
}
#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
m_tabIndex = m_params->bGenerateOptions ? TAB_WORLD_OPTIONS : TAB_GAME_OPTIONS;
SyncTabVisibility();
// 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;
if (m_tabIndex == TAB_WORLD_OPTIONS)
m_labelDescription_WorldOptions.setLabel(wsText);
else
m_labelDescription_GameOptions.setLabel(wsText);
addTimer(GAME_CREATE_ONLINE_TIMER_ID,GAME_CREATE_ONLINE_TIMER_TIME);
#if defined(__PSVITA__) || defined(_WINDOWS64)
// initialise vita tab controls with ids
m_TouchTabWorld.init(ETouchInput_TabWorld);
m_TouchTabGame.init(ETouchInput_TabGame);
ui.TouchBoxRebuild(this);
#endif
m_bIgnoreInput = false;
m_iLastPanelSig = 0;
}
void UIScene_LaunchMoreOptionsMenu::updateTooltips()
{
int changeTabTooltip = -1;
// Set tooltip for change tab (only two tabs)
if (m_tabIndex == TAB_GAME_OPTIONS)
{
changeTabTooltip = IDS_WORLD_OPTIONS;
}
else
{
changeTabTooltip = IDS_GAME_OPTIONS;
}
// 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 bWorld = (m_tabIndex == TAB_WORLD_OPTIONS);
if (m_gameOptions.getVisible() == bWorld) m_gameOptions.setVisible(!bWorld);
if (m_worldOptions.getVisible() != bWorld) m_worldOptions.setVisible(bWorld);
}
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;
}
// Check cheats
if (m_bUpdateCheats)
{
UpdateCheats();
m_bUpdateCheats = false;
}
// check online
if(m_bUpdateOnline)
{
UpdateOnline();
m_bUpdateOnline = false;
}
#ifdef _WINDOWS64
{
m_worldOptions.UpdateControl();
m_gameOptions.UpdateControl();
int sig = m_worldOptions.getXPos();
sig = sig * 31 + m_worldOptions.getYPos();
sig = sig * 31 + m_worldOptions.getWidth();
sig = sig * 31 + m_worldOptions.getHeight();
sig = sig * 31 + m_gameOptions.getXPos();
sig = sig * 31 + m_gameOptions.getYPos();
sig = sig * 31 + m_gameOptions.getWidth();
sig = sig * 31 + m_gameOptions.getHeight();
if (sig != 0 && sig != m_iLastPanelSig)
{
m_iLastPanelSig = sig;
ui.TouchBoxRebuild(this);
}
}
{
extern int g_iWindowClientW, g_iWindowClientH;
static bool s_bTabLDownPrev = false;
static char s_szTabLog[MAX_PATH];
static bool s_bTabLogInit = false;
if (!s_bTabLogInit)
{
s_bTabLogInit = true;
s_szTabLog[0] = 0;
char szExe[MAX_PATH];
DWORD dwExe = GetModuleFileNameA(NULL, szExe, MAX_PATH);
if (dwExe > 0 && dwExe < MAX_PATH)
{
int lastSlash = -1;
for (int i = 0; szExe[i] != 0; ++i)
if (szExe[i] == '\\') lastSlash = i;
if (lastSlash > 0 && lastSlash + 32 < MAX_PATH)
{
int i = 0;
for (; i <= lastSlash; ++i) s_szTabLog[i] = szExe[i];
const char *tail = "lmo_tabs.log";
for (int j = 0; tail[j] != 0; ++j, ++i) s_szTabLog[i] = tail[j];
s_szTabLog[i] = 0;
}
}
if (!s_szTabLog[0])
{
const char *fb = "lmo_tabs.log";
int i = 0;
for (; fb[i] != 0; ++i) s_szTabLog[i] = fb[i];
s_szTabLog[i] = 0;
}
char szCwd[MAX_PATH];
szCwd[0] = 0;
GetCurrentDirectoryA(MAX_PATH, szCwd);
FILE *phead = fopen(s_szTabLog, "a");
if (phead)
{
fprintf(phead, "=== MoreOptions tick alive. exe=%s cwd=%s movie=%.0fx%.0f log=%s ===\n",
szExe, szCwd, (float)getMovieWidth(), (float)getMovieHeight(), s_szTabLog);
fclose(phead);
}
}
bool bLDown = InputManager.IsMouseLDown();
if (bLDown && !s_bTabLDownPrev)
{
float fMovieW = (float)getMovieWidth();
float fMovieH = (float)getMovieHeight();
float fx = (float)InputManager.GetMouseX();
float fy = (float)InputManager.GetMouseY();
if (fMovieW > 0.0f && fMovieH > 0.0f && g_iWindowClientW > 0 && g_iWindowClientH > 0)
{
fx = fx * (fMovieW / (float)g_iWindowClientW);
fy = fy * (fMovieH / (float)g_iWindowClientH);
}
m_labelWorldOptions.UpdateControl();
m_labelGameOptions.UpdateControl();
const float pad = 32.0f;
float wx = (float)m_labelWorldOptions.getXPos() - pad;
float wy = (float)m_labelWorldOptions.getYPos() - pad;
float ww = (float)m_labelWorldOptions.getWidth() + pad * 2.0f;
float wh = (float)m_labelWorldOptions.getHeight() + pad * 2.0f;
float gx = (float)m_labelGameOptions.getXPos() - pad;
float gy = (float)m_labelGameOptions.getYPos() - pad;
float gw = (float)m_labelGameOptions.getWidth() + pad * 2.0f;
float gh = (float)m_labelGameOptions.getHeight() + pad * 2.0f;
bool wHit = (ww > 0.0f && wh > 0.0f && fx >= wx && fx < wx + ww && fy >= wy && fy < wy + wh);
bool gHit = (gw > 0.0f && gh > 0.0f && fx >= gx && fx < gx + gw && fy >= gy && fy < gy + gh);
int iTab = -1;
if (wHit && !gHit) iTab = TAB_WORLD_OPTIONS;
else if (gHit && !wHit) iTab = TAB_GAME_OPTIONS;
else if (wHit && gHit)
{
float wdx = fx - (wx + ww * 0.5f);
float wdy = fy - (wy + wh * 0.5f);
float gdx = fx - (gx + gw * 0.5f);
float gdy = fy - (gy + gh * 0.5f);
iTab = (wdx * wdx + wdy * wdy <= gdx * gdx + gdy * gdy) ? TAB_WORLD_OPTIONS : TAB_GAME_OPTIONS;
}
{
char szCwd2[MAX_PATH];
szCwd2[0] = 0;
GetCurrentDirectoryA(MAX_PATH, szCwd2);
FILE *plog = fopen(s_szTabLog[0] ? s_szTabLog : "lmo_tabs.log", "a");
if (plog)
{
fprintf(plog, "CLICK raw=%d,%d client=%dx%d movie=%.0fx%.0f pt=%.1f,%.1f curTab=%d\n",
InputManager.GetMouseX(), InputManager.GetMouseY(),
g_iWindowClientW, g_iWindowClientH, fMovieW, fMovieH, fx, fy, m_tabIndex);
fprintf(plog, " LabelWorld x=%d y=%d w=%d h=%d | LabelGame x=%d y=%d w=%d h=%d | wHit=%d gHit=%d iTab=%d cwd=%s\n",
m_labelWorldOptions.getXPos(), m_labelWorldOptions.getYPos(),
m_labelWorldOptions.getWidth(), m_labelWorldOptions.getHeight(),
m_labelGameOptions.getXPos(), m_labelGameOptions.getYPos(),
m_labelGameOptions.getWidth(), m_labelGameOptions.getHeight(),
(int)wHit, (int)gHit, iTab, szCwd2);
fclose(plog);
}
}
if (iTab != -1 && iTab != m_tabIndex)
{
m_tabIndex = iTab;
updateTooltips();
IggyDataValue result;
IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcChangeTab, 0, NULL);
SyncTabVisibility();
ui.TouchBoxRebuild(this);
}
}
s_bTabLDownPrev = bLDown;
}
#endif
}
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.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad);
}
}
#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)
{
// Toggle tab index
m_tabIndex = m_tabIndex == 0 ? 1 : 0;
updateTooltips();
IggyDataValue result;
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcChangeTab , 0 , NULL );
SyncTabVisibility();
}
break;
}
}
#if defined(__PSVITA__) || defined(_WINDOWS64)
void UIScene_LaunchMoreOptionsMenu::handleTouchInput(unsigned int iPad, S32 x, S32 y, int iId, bool bPressed, bool bRepeat, bool bReleased)
{
if(bPressed || bReleased)
{
switch(iId)
{
case ETouchInput_TabWorld:
case ETouchInput_TabGame:
// Toggle tab index
int iNewTabIndex = (iId == ETouchInput_TabWorld) ? 0 : 1;
if(m_tabIndex != iNewTabIndex)
{
m_tabIndex = iNewTabIndex;
updateTooltips();
IggyDataValue result;
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcChangeTab , 0 , NULL );
SyncTabVisibility();
}
ui.TouchBoxRebuild(this);
break;
}
}
}
UIControl* UIScene_LaunchMoreOptionsMenu::GetMainPanel()
{
if(m_tabIndex == 0)
return &m_worldOptions;
else
return &m_gameOptions;
}
#if defined(__PSVITA__) || defined(_WINDOWS64)
bool UIScene_LaunchMoreOptionsMenu::isControlActiveForTouch(UIControl *control)
{
if (control == &m_TouchTabWorld || control == &m_TouchTabGame)
return true;
bool bWorld = (m_tabIndex == TAB_WORLD_OPTIONS);
if (control == &m_labelDescription_GameOptions)
return !bWorld;
{
static const int gameBoxes[] =
{
eLaunchCheckbox_Online, eLaunchCheckbox_InviteOnly, eLaunchCheckbox_AllowFoF,
eLaunchCheckbox_PVP, eLaunchCheckbox_HostPrivileges, eLaunchCheckbox_DayLightCycle,
eLaunchCheckbox_KeepInventory, eLaunchCheckbox_MobSpawning, eLaunchCheckbox_MobGriefing,
eLaunchCheckbox_MobLoot, eLaunchCheckbox_TileDrops, eLaunchCheckbox_NaturalRegeneration
};
for (int i = 0; i < sizeof(gameBoxes) / sizeof(gameBoxes[0]); ++i)
{
if (control == &m_checkboxes[gameBoxes[i]])
return !bWorld;
}
}
if (control == &m_labelDescription_WorldOptions
|| control == &m_editSeed
|| control == &m_sliderWorldSize
|| control == &m_sliderWorldResize)
return bWorld;
{
static const int worldBoxes[] =
{
eLaunchCheckbox_ResetNether, eLaunchCheckbox_Structures, eLaunchCheckbox_FlatWorld,
eLaunchCheckbox_BonusChest, eLaunchCheckbox_DisableSaving, eLaunchCheckbox_WorldResizeType,
eLaunchCheckbox_TrustSystem, eLaunchCheckbox_FireSpreads, eLaunchCheckbox_TNT
};
for (int i = 0; i < sizeof(worldBoxes) / sizeof(worldBoxes[0]); ++i)
{
if (control == &m_checkboxes[worldBoxes[i]])
return bWorld;
}
}
return true;
}
#endif
#endif
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;
m_bUpdateOnline = true;
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;
m_bUpdateCheats = true;
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;
#ifdef _LARGE_WORLDS
case eLaunchCheckbox_DisableSaving:
m_params->bDisableSaving = selected;
break;
case eLaunchCheckbox_WorldResizeType:
m_params->newWorldSizeOverwriteEdges = selected;
break;
#endif
case eLaunchCheckbox_KeepInventory:
m_params->bKeepInventory = selected;
break;
case eLaunchCheckbox_MobSpawning:
m_params->bDoMobSpawning = selected;
break;
case eLaunchCheckbox_MobLoot:
m_params->bDoMobLoot = selected;
case eLaunchCheckbox_MobGriefing:
m_params->bMobGriefing = selected;
break;
case eLaunchCheckbox_TileDrops:
m_params->bDoTileDrops = selected;
break;
case eLaunchCheckbox_NaturalRegeneration:
m_params->bNaturalRegeneration = selected;
break;
case eLaunchCheckbox_DayLightCycle:
m_params->bDoDaylightCycle = 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;
case eLaunchCheckbox_KeepInventory:
stringId = IDS_GAMEOPTION_KEEP_INVENTORY;
break;
case eLaunchCheckbox_MobSpawning:
stringId = IDS_GAMEOPTION_MOB_SPAWNING;
break;
case eLaunchCheckbox_MobLoot:
stringId = IDS_GAMEOPTION_MOB_LOOT; // PLACEHOLDER
break;
case eLaunchCheckbox_MobGriefing:
stringId = IDS_GAMEOPTION_MOB_GRIEFING; // PLACEHOLDER
break;
case eLaunchCheckbox_TileDrops:
stringId = IDS_GAMEOPTION_TILE_DROPS;
break;
case eLaunchCheckbox_NaturalRegeneration:
stringId = IDS_GAMEOPTION_NATURAL_REGEN;
break;
case eLaunchCheckbox_DayLightCycle:
stringId = IDS_GAMEOPTION_DAYLIGHT_CYCLE;
break;
case eControl_EditSeed:
stringId = IDS_GAMEOPTION_SEED;
break;
#ifdef _LARGE_WORLDS
case eControl_WorldSize:
stringId = IDS_GAMEOPTION_WORLD_SIZE;
break;
case eControl_WorldResize:
stringId = IDS_GAMEOPTION_INCREASE_WORLD_SIZE;
break;
case eLaunchCheckbox_DisableSaving:
stringId = IDS_GAMEOPTION_DISABLE_SAVING;
break;
case eLaunchCheckbox_WorldResizeType:
stringId = IDS_GAMEOPTION_INCREASE_WORLD_SIZE_OVERWRITE_EDGES;
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;
if (m_tabIndex == TAB_WORLD_OPTIONS)
m_labelDescription_WorldOptions.setLabel(wsText);
else
m_labelDescription_GameOptions.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)
{
#ifdef __PSVITA__
//CD - Changed to 2048 [SCE_IME_MAX_TEXT_LENGTH]
uint16_t pchText[2048];
ZeroMemory(pchText, 2048 * sizeof(uint16_t) );
#else
uint16_t pchText[128];
ZeroMemory(pchText, 128 * sizeof(uint16_t) );
#endif
#ifdef _WINDOWS64
if (!DirectTextEdit::TakeText(pchText, 128))
#endif
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:
{
#ifdef _WINDOWS64
DirectTextEdit::Begin(&m_editSeed, &m_worldOptions, m_editSeed.getLabel(), 60,
C_4JInput::EKeyboardMode_Default,
&UIScene_LaunchMoreOptionsMenu::KeyboardCompleteSeedCallback, this);
#else
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
#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;
case eControl_WorldResize:
#ifdef _LARGE_WORLDS
EGameHostOptionWorldSize changedSize = EGameHostOptionWorldSize(value+1);
if(changedSize >= m_params->currentWorldSize)
{
m_sliderWorldResize.handleSliderMove(value);
m_params->newWorldSize = EGameHostOptionWorldSize(value+1);
m_sliderWorldResize.setLabel(app.GetString(m_iWorldSizeTitleA[value]));
}
#endif
break;
}
}
void UIScene_LaunchMoreOptionsMenu::UpdateCheats()
{
bool cheatsOn = m_params->bHostPrivileges;
m_checkboxes[eLaunchCheckbox_KeepInventory].SetEnable(cheatsOn);
m_checkboxes[eLaunchCheckbox_MobSpawning].SetEnable(cheatsOn);
m_checkboxes[eLaunchCheckbox_MobGriefing].SetEnable(cheatsOn);
m_checkboxes[eLaunchCheckbox_DayLightCycle].SetEnable(cheatsOn);
if (!cheatsOn)
{
// Set defaults
m_params->bMobGriefing = true;
m_params->bKeepInventory = false;
m_params->bDoMobSpawning = true;
m_params->bDoDaylightCycle = true;
m_checkboxes[eLaunchCheckbox_KeepInventory].setChecked(m_params->bKeepInventory);
m_checkboxes[eLaunchCheckbox_MobSpawning].setChecked(m_params->bDoMobSpawning);
m_checkboxes[eLaunchCheckbox_MobGriefing].setChecked(m_params->bMobGriefing);
m_checkboxes[eLaunchCheckbox_DayLightCycle].setChecked(m_params->bDoDaylightCycle);
}
}
void UIScene_LaunchMoreOptionsMenu::UpdateOnline()
{
bool bOnline = m_params->bOnlineGame;
m_checkboxes[eLaunchCheckbox_InviteOnly].SetEnable(bOnline);
m_checkboxes[eLaunchCheckbox_AllowFoF].SetEnable(bOnline);
}
void UIScene_LaunchMoreOptionsMenu::SyncTabVisibility()
{
bool bWorld = (m_tabIndex == TAB_WORLD_OPTIONS);
m_gameOptions.getVisible();
m_worldOptions.getVisible();
m_gameOptions.setVisible(!bWorld);
m_worldOptions.setVisible(bWorld);
}