diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Common/XUI/XUI_InGameHostOptions.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/XUI/XUI_InGameHostOptions.cpp')
| -rw-r--r-- | Minecraft.Client/Common/XUI/XUI_InGameHostOptions.cpp | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/XUI/XUI_InGameHostOptions.cpp b/Minecraft.Client/Common/XUI/XUI_InGameHostOptions.cpp new file mode 100644 index 00000000..f0561745 --- /dev/null +++ b/Minecraft.Client/Common/XUI/XUI_InGameHostOptions.cpp @@ -0,0 +1,150 @@ +#include "stdafx.h" +#include "XUI_MultiGameCreate.h" +#include "XUI_InGameHostOptions.h" +#include "..\..\Minecraft.h" +#include "..\..\MultiPlayerLocalPlayer.h" +#include "..\..\ClientConnection.h" +#include "..\..\..\Minecraft.World\net.minecraft.network.h" +#include "..\..\..\Minecraft.World\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(); + shared_ptr<MultiplayerLocalPlayer> player = pMinecraft->localplayers[m_iPad]; + if(player != NULL && player->connection) + { + player->connection->send( 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); +}
\ No newline at end of file |
