#include "stdafx.h" #include "XUI_MultiGameCreate.h" #include "XUI_MultiGameLaunchMoreOptions.h" #include "..\..\TexturePackRepository.h" #include "..\..\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; } 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; }