#include "../../Minecraft.World/Platform/stdafx.h" #include "XUI_MultiGameCreate.h" #include "XUI_InGameHostOptions.h" #include "../../Minecraft.Client/Minecraft.h" #include "../../Minecraft.Client/Player/MultiPlayerLocalPlayer.h" #include "../../Minecraft.Client/Network/ClientConnection.h" #include "../../Minecraft.World/Headers/net.minecraft.network.h" #include "../../Minecraft.World/Headers/net.minecraft.network.packet.h" //---------------------------------------------------------------------------------- // Performs initialization tasks - retrieves controls. //---------------------------------------------------------------------------------- HRESULT CScene_InGameHostOptions::OnInit(XUIMessageInit* pInitData, BOOL& bHandled) { m_iPad = *(int*)pInitData->pvInitData; MapChildControls(); m_focusElement = m_CheckboxFireSpreads.m_hObj; XuiControlSetText(m_CheckboxFireSpreads, app.GetString(IDS_FIRE_SPREADS)); XuiControlSetText(m_CheckboxTNTExplodes, app.GetString(IDS_TNT_EXPLODES)); if (app.GetLocalPlayerCount() > 1) { app.AdjustSplitscreenScene(m_hObj, &m_OriginalPosition, m_iPad); } m_CheckboxFireSpreads.SetEnable(TRUE); m_CheckboxTNTExplodes.SetEnable(TRUE); m_CheckboxFireSpreads.SetCheck( (app.GetGameHostOption(eGameHostOption_FireSpreads) != 0) ? TRUE : FALSE); m_CheckboxTNTExplodes.SetCheck( (app.GetGameHostOption(eGameHostOption_TNT) != 0) ? TRUE : FALSE); INetworkPlayer* localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex(m_iPad); unsigned int privs = app.GetPlayerPrivileges(localPlayer->GetSmallId()); if (app.GetGameHostOption(eGameHostOption_CheatsEnabled) && Player::getPlayerGamePrivilege( privs, Player::ePlayerGamePrivilege_CanTeleport) && (g_NetworkManager.GetPlayerCount() > 1)) { m_buttonTeleportToPlayer.SetText(app.GetString(IDS_TELEPORT_TO_PLAYER)); m_buttonTeleportToMe.SetText(app.GetString(IDS_TELEPORT_TO_ME)); } else { removeControl(m_buttonTeleportToPlayer, true); removeControl(m_buttonTeleportToMe, true); } ui.SetTooltips(m_iPad, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK); CXuiSceneBase::ShowLogo(m_iPad, FALSE); // SentientManager.RecordMenuShown(m_iPad, eUIScene_CreateWorldMenu, 0); return S_OK; } HRESULT CScene_InGameHostOptions::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: { unsigned int hostOptions = app.GetGameHostOption(eGameHostOption_All); app.SetGameHostOption(hostOptions, eGameHostOption_FireSpreads, m_CheckboxFireSpreads.IsChecked()); app.SetGameHostOption(hostOptions, eGameHostOption_TNT, m_CheckboxTNTExplodes.IsChecked()); // Send update settings packet to server if (hostOptions != app.GetGameHostOption(eGameHostOption_All)) { Minecraft* pMinecraft = Minecraft::GetInstance(); std::shared_ptr player = pMinecraft->localplayers[m_iPad]; if (player != NULL && player->connection) { player->connection->send(std::shared_ptr< ServerSettingsChangedPacket>( new ServerSettingsChangedPacket( ServerSettingsChangedPacket::HOST_IN_GAME_SETTINGS, hostOptions))); } } app.NavigateBack(pInputData->UserIndex); rfHandled = TRUE; } break; } return S_OK; } //---------------------------------------------------------------------------------- // Handler for the button press message. //---------------------------------------------------------------------------------- HRESULT CScene_InGameHostOptions::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_buttonTeleportToPlayer || hObjPressed == m_buttonTeleportToMe) { TeleportMenuInitData* initData = new TeleportMenuInitData(); initData->iPad = m_iPad; initData->teleportToPlayer = false; if (hObjPressed == m_buttonTeleportToPlayer) { initData->teleportToPlayer = true; } ui.NavigateToScene(m_iPad, eUIScene_TeleportMenu, (void*)initData); } return S_OK; } void CScene_InGameHostOptions::removeControl(HXUIOBJ hObjToRemove, bool center) { D3DXVECTOR3 pos; float fControlHeight, fTempHeight, fWidth; bool changeFocus = m_focusElement == hObjToRemove; XuiElementGetBounds(hObjToRemove, &fWidth, &fControlHeight); // Hide this control XuiControlSetEnable(hObjToRemove, FALSE); XuiElementSetShow(hObjToRemove, FALSE); // Move future downwards nav up HXUIOBJ controlToMove = hObjToRemove; while (controlToMove = XuiControlGetNavigation( controlToMove, XUI_CONTROL_NAVIGATE_DOWN, FALSE, TRUE)) { if (changeFocus && XuiElementIsShown(controlToMove)) { m_focusElement = controlToMove; XuiElementSetUserFocus(controlToMove, m_iPad); changeFocus = FALSE; } XuiElementGetPosition(controlToMove, &pos); pos.y -= fControlHeight; XuiElementSetPosition(controlToMove, &pos); } // Resize and move scene GetBounds(&fWidth, &fTempHeight); SetBounds(fWidth, fTempHeight - fControlHeight); GetPosition(&pos); pos.y += fControlHeight / 2; SetPosition(&pos); }