#include "../../Minecraft.World/Platform/stdafx.h" #include "XUI_MultiGameCreate.h" #include "XUI_MultiGameLaunchMoreOptions.h" #include "../../Minecraft.Client/Textures/Packs/TexturePackRepository.h" #include "../../Minecraft.Client/Minecraft.h" #define GAME_CREATE_ONLINE_TIMER_ID 0 #define GAME_CREATE_ONLINE_TIMER_TIME 100 //---------------------------------------------------------------------------------- // Performs initialization tasks - retrieves controls. //---------------------------------------------------------------------------------- HRESULT CScene_MultiGameLaunchMoreOptions::OnInit(XUIMessageInit* pInitData, BOOL& bHandled) { MapChildControls(); XuiControlSetText(m_CheckboxOnline, app.GetString(IDS_ONLINE_GAME)); XuiControlSetText(m_CheckboxInviteOnly, app.GetString(IDS_INVITE_ONLY)); XuiControlSetText(m_CheckboxAllowFoF, app.GetString(IDS_ALLOWFRIENDSOFFRIENDS)); XuiControlSetText(m_CheckboxPVP, app.GetString(IDS_PLAYER_VS_PLAYER)); XuiControlSetText(m_CheckboxTrustPlayers, app.GetString(IDS_TRUST_PLAYERS)); XuiControlSetText(m_CheckboxFireSpreads, app.GetString(IDS_FIRE_SPREADS)); XuiControlSetText(m_CheckboxTNTExplodes, app.GetString(IDS_TNT_EXPLODES)); XuiControlSetText(m_CheckboxHostPrivileges, app.GetString(IDS_HOST_PRIVILEGES)); XuiControlSetText(m_CheckboxResetNether, app.GetString(IDS_RESET_NETHER)); XuiControlSetText(m_LabelWorldOptions, app.GetString(IDS_WORLD_OPTIONS)); XuiControlSetText(m_CheckboxStructures, app.GetString(IDS_GENERATE_STRUCTURES)); XuiControlSetText(m_CheckboxFlatWorld, app.GetString(IDS_SUPERFLAT_WORLD)); XuiControlSetText(m_CheckboxBonusChest, app.GetString(IDS_BONUS_CHEST)); m_params = (LaunchMoreOptionsMenuInitData*)pInitData->pvInitData; if (m_params->bGenerateOptions) { m_CheckboxStructures.SetEnable(TRUE); m_CheckboxFlatWorld.SetEnable(TRUE); m_CheckboxBonusChest.SetEnable(TRUE); m_CheckboxStructures.SetCheck(m_params->bStructures); m_CheckboxFlatWorld.SetCheck(m_params->bFlatWorld); m_CheckboxBonusChest.SetCheck(m_params->bBonusChest); // This is a create world, so don't need Reset Nether float fHeight, fCheckboxHeight, fWidth; m_CheckboxResetNether.GetBounds(&fWidth, &fCheckboxHeight); m_HostOptionGroup.GetBounds(&fWidth, &fHeight); m_HostOptionGroup.SetBounds(fWidth, fHeight - fCheckboxHeight); GetBounds(&fWidth, &fHeight); SetBounds(fWidth, fHeight - fCheckboxHeight); D3DXVECTOR3 pos; GetPosition(&pos); pos.y += (fCheckboxHeight / 2); SetPosition(&pos); m_GenerationGroup.GetPosition(&pos); pos.y -= fCheckboxHeight; m_GenerationGroup.SetPosition(&pos); m_CheckboxResetNether.SetShow(FALSE); } else { float fHeight, fGroupHeight, fWidth; m_GenerationGroup.GetBounds(&fWidth, &fGroupHeight); m_GenerationGroup.SetShow(FALSE); m_GenerationGroup.SetEnable(FALSE); m_CheckboxStructures.SetShow(FALSE); m_CheckboxFlatWorld.SetShow(FALSE); m_CheckboxBonusChest.SetShow(FALSE); GetBounds(&fWidth, &fHeight); SetBounds(fWidth, fHeight + 10 - fGroupHeight); D3DXVECTOR3 pos; GetPosition(&pos); pos.y += (fGroupHeight / 2); SetPosition(&pos); m_CheckboxResetNether.SetEnable(TRUE); m_CheckboxResetNether.SetCheck(m_params->bResetNether); } m_CheckboxPVP.SetEnable(TRUE); m_CheckboxTrustPlayers.SetEnable(TRUE); m_CheckboxFireSpreads.SetEnable(TRUE); m_CheckboxTNTExplodes.SetEnable(TRUE); m_CheckboxHostPrivileges.SetEnable(TRUE); m_CheckboxPVP.SetCheck(m_params->bPVP); m_CheckboxTrustPlayers.SetCheck(m_params->bTrust); m_CheckboxFireSpreads.SetCheck(m_params->bFireSpreads); m_CheckboxTNTExplodes.SetCheck(m_params->bTNT); m_CheckboxHostPrivileges.SetCheck(m_params->bHostPrivileges); m_CheckboxOnline.SetCheck(m_params->bOnlineGame); m_CheckboxInviteOnly.SetCheck(m_params->bInviteOnly); m_CheckboxAllowFoF.SetCheck(m_params->bAllowFriendsOfFriends); m_bMultiplayerAllowed = ProfileManager.IsSignedInLive(m_params->iPad) && ProfileManager.AllowedToPlayMultiplayer(m_params->iPad); if (m_params->bOnlineSettingChangedBySystem) { m_CheckboxOnline.SetCheck(FALSE); m_CheckboxOnline.SetEnable(FALSE); m_CheckboxInviteOnly.SetCheck(FALSE); m_CheckboxInviteOnly.SetEnable(FALSE); m_CheckboxAllowFoF.SetCheck(FALSE); m_CheckboxAllowFoF.SetEnable(FALSE); } else if (!m_params->bOnlineGame) { m_CheckboxInviteOnly.SetEnable(FALSE); m_CheckboxAllowFoF.SetEnable(FALSE); } XuiSetTimer(m_hObj, GAME_CREATE_ONLINE_TIMER_ID, GAME_CREATE_ONLINE_TIMER_TIME); ui.SetTooltips(DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK); CXuiSceneBase::ShowLogo(DEFAULT_XUI_MENU_USER, FALSE); // SentientManager.RecordMenuShown(m_params->iPad, eUIScene_CreateWorldMenu, // 0); return S_OK; } HRESULT CScene_MultiGameLaunchMoreOptions::OnKeyDown( XUIMessageInput* pInputData, BOOL& rfHandled) { ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); // Explicitly handle B button presses switch (pInputData->dwKeyCode) { case VK_PAD_B: case VK_ESCAPE: m_params->bOnlineGame = m_CheckboxOnline.IsChecked(); m_params->bInviteOnly = m_CheckboxInviteOnly.IsChecked(); m_params->bAllowFriendsOfFriends = m_CheckboxAllowFoF.IsChecked(); m_params->bStructures = m_CheckboxStructures.IsChecked(); m_params->bFlatWorld = m_CheckboxFlatWorld.IsChecked(); m_params->bBonusChest = m_CheckboxBonusChest.IsChecked(); m_params->bPVP = m_CheckboxPVP.IsChecked(); m_params->bTrust = m_CheckboxTrustPlayers.IsChecked(); m_params->bFireSpreads = m_CheckboxFireSpreads.IsChecked(); m_params->bTNT = m_CheckboxTNTExplodes.IsChecked(); m_params->bHostPrivileges = m_CheckboxHostPrivileges.IsChecked(); m_params->bResetNether = m_CheckboxResetNether.IsChecked(); app.NavigateBack(pInputData->UserIndex); rfHandled = TRUE; break; } return S_OK; } HRESULT CScene_MultiGameLaunchMoreOptions::OnNotifySetFocus( HXUIOBJ hObjSource, XUINotifyFocus* pNotifyFocusData, BOOL& bHandled) { int stringId = 0; if (hObjSource == m_CheckboxStructures) { stringId = IDS_GAMEOPTION_STRUCTURES; } else if (hObjSource == m_CheckboxOnline) { stringId = IDS_GAMEOPTION_ONLINE; } else if (hObjSource == m_CheckboxInviteOnly) { stringId = IDS_GAMEOPTION_INVITEONLY; } else if (hObjSource == m_CheckboxAllowFoF) { stringId = IDS_GAMEOPTION_ALLOWFOF; } else if (hObjSource == m_CheckboxFlatWorld) { stringId = IDS_GAMEOPTION_SUPERFLAT; } else if (hObjSource == m_CheckboxBonusChest) { stringId = IDS_GAMEOPTION_BONUS_CHEST; } else if (hObjSource == m_CheckboxPVP) { stringId = IDS_GAMEOPTION_PVP; } else if (hObjSource == m_CheckboxTrustPlayers) { stringId = IDS_GAMEOPTION_TRUST; } else if (hObjSource == m_CheckboxFireSpreads) { stringId = IDS_GAMEOPTION_FIRE_SPREADS; } else if (hObjSource == m_CheckboxTNTExplodes) { stringId = IDS_GAMEOPTION_TNT_EXPLODES; } else if (hObjSource == m_CheckboxHostPrivileges) { stringId = IDS_GAMEOPTION_HOST_PRIVILEGES; } else if (hObjSource == m_CheckboxResetNether) { stringId = IDS_GAMEOPTION_RESET_NETHER; } std::wstring wsText = app.GetString(stringId); int size = 14; if (!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) { size = 12; } wchar_t startTags[64]; swprintf(startTags, 64, L"", app.GetHTMLColour(eHTMLColor_White), size); wsText = startTags + wsText; m_Description.SetText(wsText.c_str()); return S_OK; } HRESULT CScene_MultiGameLaunchMoreOptions::OnControlNavigate( XUIMessageControlNavigate* pControlNavigateData, BOOL& bHandled) { pControlNavigateData->hObjDest = XuiControlGetNavigation( pControlNavigateData->hObjSource, pControlNavigateData->nControlNavigate, TRUE, TRUE); if (pControlNavigateData->hObjDest != NULL) { bHandled = TRUE; } return S_OK; } //---------------------------------------------------------------------------------- // Handler for the button press message. //---------------------------------------------------------------------------------- HRESULT CScene_MultiGameLaunchMoreOptions::OnNotifyPressEx( HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled) { // This assumes all buttons can only be pressed with the A button ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A); if (hObjPressed == m_CheckboxOnline) { if (m_CheckboxOnline.IsChecked()) { m_CheckboxInviteOnly.SetEnable(TRUE); m_CheckboxAllowFoF.SetEnable(TRUE); } else { m_CheckboxInviteOnly.SetCheck(FALSE); m_CheckboxInviteOnly.SetEnable(FALSE); m_CheckboxAllowFoF.SetCheck(FALSE); m_CheckboxAllowFoF.SetEnable(FALSE); } } return S_OK; } HRESULT CScene_MultiGameLaunchMoreOptions::OnTimer(XUIMessageTimer* pTimer, BOOL& bHandled) { // 4J-PB - TODO - Don't think we can do this - if a 2nd player signs in here // with an offline profile, the signed in LIVE player gets re-logged in, and // bMultiplayerAllowed is false briefly if (pTimer->nId == GAME_CREATE_ONLINE_TIMER_ID) { bool bMultiplayerAllowed = ProfileManager.IsSignedInLive(m_params->iPad) && ProfileManager.AllowedToPlayMultiplayer(m_params->iPad); if (bMultiplayerAllowed != m_bMultiplayerAllowed) { if (bMultiplayerAllowed) { bool bGameSetting_Online = (app.GetGameSettings(m_params->iPad, eGameSetting_Online) != 0); m_CheckboxOnline.SetCheck(bGameSetting_Online ? TRUE : FALSE); if (bGameSetting_Online) { m_CheckboxInviteOnly.SetCheck( (app.GetGameSettings(m_params->iPad, eGameSetting_InviteOnly) != 0) ? TRUE : FALSE); m_CheckboxAllowFoF.SetCheck( (app.GetGameSettings(m_params->iPad, eGameSetting_FriendsOfFriends) != 0) ? TRUE : FALSE); } else { m_CheckboxInviteOnly.SetCheck(FALSE); m_CheckboxAllowFoF.SetCheck(FALSE); } } else { m_CheckboxOnline.SetCheck(FALSE); m_CheckboxOnline.SetEnable(FALSE); m_CheckboxInviteOnly.SetCheck(FALSE); m_CheckboxInviteOnly.SetEnable(FALSE); m_CheckboxAllowFoF.SetCheck(FALSE); } m_bMultiplayerAllowed = bMultiplayerAllowed; } } return S_OK; }