aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/XUI/XUI_InGamePlayerOptions.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Common/XUI/XUI_InGamePlayerOptions.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/XUI/XUI_InGamePlayerOptions.cpp')
-rw-r--r--Minecraft.Client/Common/XUI/XUI_InGamePlayerOptions.cpp499
1 files changed, 499 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/XUI/XUI_InGamePlayerOptions.cpp b/Minecraft.Client/Common/XUI/XUI_InGamePlayerOptions.cpp
new file mode 100644
index 00000000..156cd092
--- /dev/null
+++ b/Minecraft.Client/Common/XUI/XUI_InGamePlayerOptions.cpp
@@ -0,0 +1,499 @@
+#include "stdafx.h"
+#include "XUI_MultiGameCreate.h"
+#include "XUI_InGamePlayerOptions.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"
+#include "..\..\..\Minecraft.World\net.minecraft.world.entity.player.h"
+#include "XUI_InGameInfo.h"
+
+
+
+//----------------------------------------------------------------------------------
+// Performs initialization tasks - retrieves controls.
+//----------------------------------------------------------------------------------
+HRESULT CScene_InGamePlayerOptions::OnInit( XUIMessageInit* pInitData, BOOL& bHandled )
+{
+ m_iPad = *(int *)pInitData->pvInitData;
+
+ InGamePlayerOptionsInitData *initData = (InGamePlayerOptionsInitData *)pInitData->pvInitData;
+ m_iPad = initData->iPad;
+ m_networkSmallId = initData->networkSmallId;
+ m_playerPrivileges = initData->playerPrivileges;
+
+ MapChildControls();
+
+ m_focusElement = m_checkboxes[eControl_BuildAndMine].m_hObj;
+
+ m_TeleportGroup.SetShow(false);
+
+ INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad );
+ INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
+
+ if(editingPlayer != NULL)
+ {
+ m_Gamertag.SetText(editingPlayer->GetOnlineName());
+ }
+
+ bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0;
+ bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
+ m_editingSelf = (localPlayer != NULL && localPlayer == editingPlayer);
+
+ if( m_editingSelf || trustPlayers || editingPlayer->IsHost())
+ {
+ removeControl( m_checkboxes[eControl_BuildAndMine], true );
+ removeControl( m_checkboxes[eControl_UseDoorsAndSwitches], true );
+ removeControl( m_checkboxes[eControl_UseContainers], true );
+ removeControl( m_checkboxes[eControl_AttackPlayers], true );
+ removeControl( m_checkboxes[eControl_AttackAnimals], true );
+ }
+ else
+ {
+ bool checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotMine)==0 && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotBuild)==0);
+ m_checkboxes[eControl_BuildAndMine].SetText( app.GetString(IDS_CAN_BUILD_AND_MINE) );
+ m_checkboxes[eControl_BuildAndMine].SetCheck(checked);
+
+ checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches)!=0);
+ m_checkboxes[eControl_UseDoorsAndSwitches].SetText( app.GetString(IDS_CAN_USE_DOORS_AND_SWITCHES) );
+ m_checkboxes[eControl_UseDoorsAndSwitches].SetCheck(checked);
+
+ checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanUseContainers)!=0);
+ m_checkboxes[eControl_UseContainers].SetText( app.GetString(IDS_CAN_OPEN_CONTAINERS) );
+ m_checkboxes[eControl_UseContainers].SetCheck(checked);
+
+ checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotAttackPlayers)==0;
+ m_checkboxes[eControl_AttackPlayers].SetText( app.GetString(IDS_CAN_ATTACK_PLAYERS) );
+ m_checkboxes[eControl_AttackPlayers].SetCheck(checked);
+
+ checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotAttackAnimals)==0;
+ m_checkboxes[eControl_AttackAnimals].SetText( app.GetString(IDS_CAN_ATTACK_ANIMALS) );
+ m_checkboxes[eControl_AttackAnimals].SetCheck(checked);
+ }
+
+ if(m_editingSelf)
+ {
+#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED))
+ removeControl( m_checkboxes[eControl_Op], true );
+#else
+ m_checkboxes[eControl_Op].SetText(L"DEBUG: Creative");
+ m_checkboxes[eControl_Op].SetCheck(Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode));
+#endif
+
+ removeControl( m_buttonKick, true );
+ removeControl( m_checkboxes[eControl_CheatTeleport], true );
+
+ if(cheats)
+ {
+ bool canBeInvisible = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0;
+ m_checkboxes[eControl_HostInvisible].SetEnable(canBeInvisible);
+ bool checked = canBeInvisible && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Invisible)!=0 && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Invulnerable)!=0);
+ m_checkboxes[eControl_HostInvisible].SetText( app.GetString(IDS_INVISIBLE) );
+ m_checkboxes[eControl_HostInvisible].SetCheck(checked);
+
+ bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
+ if(inCreativeMode)
+ {
+ removeControl( m_checkboxes[eControl_HostFly], true );
+ removeControl( m_checkboxes[eControl_HostHunger], true );
+ }
+ else
+ {
+ bool canFly = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly);
+ bool canChangeHunger = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger);
+
+ m_checkboxes[eControl_HostFly].SetEnable(canFly);
+ checked = canFly && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanFly)!=0;
+ m_checkboxes[eControl_HostFly].SetText( app.GetString(IDS_CAN_FLY) );
+ m_checkboxes[eControl_HostFly].SetCheck(checked);
+
+ m_checkboxes[eControl_HostHunger].SetEnable(canChangeHunger);
+ checked = canChangeHunger && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_ClassicHunger)!=0;
+ m_checkboxes[eControl_HostHunger].SetText( app.GetString(IDS_DISABLE_EXHAUSTION) );
+ m_checkboxes[eControl_HostHunger].SetCheck(checked);
+ }
+ }
+ else
+ {
+ removeControl( m_checkboxes[eControl_HostInvisible], true );
+ removeControl( m_checkboxes[eControl_HostFly], true );
+ removeControl( m_checkboxes[eControl_HostHunger], true );
+ }
+ }
+ else
+ {
+ if(localPlayer->IsHost())
+ {
+ // Only host can make people moderators, or enable teleporting for them
+ m_checkboxes[eControl_Op].SetText( app.GetString(IDS_MODERATOR) );
+ m_checkboxes[eControl_Op].SetCheck(Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Op)!=0);
+ }
+ else
+ {
+ removeControl( m_checkboxes[eControl_Op], true );
+ }
+
+ if(localPlayer->IsHost() && cheats)
+ {
+ m_checkboxes[eControl_HostInvisible].SetEnable(true);
+ bool checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible)!=0;
+ m_checkboxes[eControl_HostInvisible].SetText( app.GetString(IDS_CAN_INVISIBLE) );
+ m_checkboxes[eControl_HostInvisible].SetCheck(checked);
+
+
+ bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
+ if(inCreativeMode)
+ {
+ removeControl( m_checkboxes[eControl_HostFly], true );
+ removeControl( m_checkboxes[eControl_HostHunger], true );
+ }
+ else
+ {
+ m_checkboxes[eControl_HostFly].SetEnable(true);
+ checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleFly)!=0;
+ m_checkboxes[eControl_HostFly].SetText( app.GetString(IDS_CAN_FLY) );
+ m_checkboxes[eControl_HostFly].SetCheck(checked);
+
+ m_checkboxes[eControl_HostHunger].SetEnable(true);
+ checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleClassicHunger)!=0;
+ m_checkboxes[eControl_HostHunger].SetText( app.GetString(IDS_CAN_DISABLE_EXHAUSTION) );
+ m_checkboxes[eControl_HostHunger].SetCheck(checked);
+ }
+
+ checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanTeleport)!=0;
+ m_checkboxes[eControl_CheatTeleport].SetText(app.GetString(IDS_ENABLE_TELEPORT));
+ m_checkboxes[eControl_CheatTeleport].SetCheck(checked);
+ }
+ else
+ {
+ removeControl( m_checkboxes[eControl_HostInvisible], true );
+ removeControl( m_checkboxes[eControl_HostFly], true );
+ removeControl( m_checkboxes[eControl_HostHunger], true );
+ removeControl( m_checkboxes[eControl_CheatTeleport], true );
+ }
+
+ // Can only kick people if they are not local, and not local to the host
+ if(editingPlayer->IsLocal() != TRUE && editingPlayer->IsSameSystem(g_NetworkManager.GetHostPlayer()) != TRUE)
+ {
+ m_buttonKick.SetText( app.GetString(IDS_KICK_PLAYER));
+ }
+ else
+ {
+ removeControl( m_buttonKick, true );
+ }
+ }
+
+ if(app.GetLocalPlayerCount()>1)
+ {
+ app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad);
+ }
+
+ ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK);
+
+ CXuiSceneBase::ShowLogo( m_iPad, FALSE );
+
+ g_NetworkManager.RegisterPlayerChangedCallback(m_iPad, &CScene_InGamePlayerOptions::OnPlayerChanged, this);
+
+ //SentientManager.RecordMenuShown(m_iPad, eUIScene_CreateWorldMenu, 0);
+
+ resetCheatCheckboxes();
+
+ return S_OK;
+}
+
+HRESULT CScene_InGamePlayerOptions::OnDestroy()
+{
+ g_NetworkManager.UnRegisterPlayerChangedCallback(m_iPad, &CScene_InGameInfo::OnPlayerChanged, this);
+ return S_OK;
+}
+
+
+HRESULT CScene_InGamePlayerOptions::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:
+ {
+ bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0;
+ bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
+ if(m_editingSelf)
+ {
+#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED))
+#else
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode,m_checkboxes[eControl_Op].IsChecked());
+#endif
+ if(cheats)
+ {
+ bool canBeInvisible = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0;
+ if(canBeInvisible) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Invisible,m_checkboxes[eControl_HostInvisible].IsChecked());
+ if(canBeInvisible) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Invulnerable,m_checkboxes[eControl_HostInvisible].IsChecked());
+
+ bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
+ if(!inCreativeMode)
+ {
+ bool canFly = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly);
+ bool canChangeHunger = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger);
+
+ if(canFly) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanFly,m_checkboxes[eControl_HostFly].IsChecked());
+ if(canChangeHunger) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_ClassicHunger,m_checkboxes[eControl_HostHunger].IsChecked());
+ }
+ }
+ }
+ else
+ {
+ INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
+ if(!trustPlayers && (editingPlayer != NULL && !editingPlayer->IsHost() ) )
+ {
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotMine,!m_checkboxes[eControl_BuildAndMine].IsChecked());
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotBuild,!m_checkboxes[eControl_BuildAndMine].IsChecked());
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotAttackPlayers,!m_checkboxes[eControl_AttackPlayers].IsChecked());
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotAttackAnimals, !m_checkboxes[eControl_AttackAnimals].IsChecked());
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches, m_checkboxes[eControl_UseDoorsAndSwitches].IsChecked());
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanUseContainers, m_checkboxes[eControl_UseContainers].IsChecked());
+ }
+
+ INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad );
+
+ if(localPlayer->IsHost())
+ {
+ if(cheats)
+ {
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleInvisible,m_checkboxes[eControl_HostInvisible].IsChecked());
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly,m_checkboxes[eControl_HostFly].IsChecked());
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger,m_checkboxes[eControl_HostHunger].IsChecked());
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanTeleport,m_checkboxes[eControl_CheatTeleport].IsChecked());
+ }
+
+ Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Op,m_checkboxes[eControl_Op].IsChecked());
+ }
+ }
+ unsigned int originalPrivileges = app.GetPlayerPrivileges(m_networkSmallId);
+ if(originalPrivileges != m_playerPrivileges)
+ {
+ // Send update settings packet to server
+ Minecraft *pMinecraft = Minecraft::GetInstance();
+ shared_ptr<MultiplayerLocalPlayer> player = pMinecraft->localplayers[m_iPad];
+ if(player != NULL && player->connection)
+ {
+ player->connection->send( shared_ptr<PlayerInfoPacket>( new PlayerInfoPacket( m_networkSmallId, -1, m_playerPrivileges) ) );
+ }
+ }
+
+ app.NavigateBack(pInputData->UserIndex);
+ rfHandled = TRUE;
+ }
+ break;
+ }
+ return S_OK;
+}
+
+HRESULT CScene_InGamePlayerOptions::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled)
+{
+ //HRESULT hr = S_OK;
+ // This assumes all buttons can only be pressed with the A button
+ ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A);
+
+ if( hObjPressed == m_buttonKick )
+ {
+ BYTE *smallId = new BYTE();
+ *smallId = m_networkSmallId;
+ UINT uiIDA[2];
+ uiIDA[0]=IDS_CONFIRM_OK;
+ uiIDA[1]=IDS_CONFIRM_CANCEL;
+
+ StorageManager.RequestMessageBox(IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2, m_iPad,&CScene_InGamePlayerOptions::KickPlayerReturned,smallId,app.GetStringTable());
+ }
+ else if (hObjPressed == m_checkboxes[eControl_Op] )
+ {
+ resetCheatCheckboxes();
+ }
+
+ return S_OK;
+}
+
+HRESULT CScene_InGamePlayerOptions::OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled)
+{
+ pControlNavigateData->hObjDest=XuiControlGetNavigation(pControlNavigateData->hObjSource,pControlNavigateData->nControlNavigate,TRUE,TRUE);
+
+ if(pControlNavigateData->hObjDest!=NULL)
+ {
+ bHandled=TRUE;
+ }
+
+ return S_OK;
+}
+
+int CScene_InGamePlayerOptions::KickPlayerReturned(void *pParam,int iPad,C4JStorage::EMessageResult result)
+{
+ BYTE smallId = *(BYTE *)pParam;
+ delete pParam;
+
+ if(result==C4JStorage::EMessage_ResultAccept)
+ {
+ Minecraft *pMinecraft = Minecraft::GetInstance();
+ shared_ptr<MultiplayerLocalPlayer> localPlayer = pMinecraft->localplayers[iPad];
+ if(localPlayer != NULL && localPlayer->connection)
+ {
+ localPlayer->connection->send( shared_ptr<KickPlayerPacket>( new KickPlayerPacket(smallId) ) );
+ }
+
+ // Fix for #61494 - [CRASH]: TU7: Code: Multiplayer: Title may crash while kicking a player from an online game.
+ // We cannot do a navigate back here is this actually occurs on a thread other than the main thread. On rare occasions this can clash
+ // with the XUI render and causes a crash. The OnPlayerChanged event should perform the navigate back on the main thread
+ //app.NavigateBack(iPad);
+ }
+
+ return 0;
+}
+
+void CScene_InGamePlayerOptions::OnPlayerChanged(void *callbackParam, INetworkPlayer *pPlayer, bool leaving)
+{
+ CScene_InGamePlayerOptions *scene = (CScene_InGamePlayerOptions *)callbackParam;
+
+ HXUIOBJ hBackScene = scene->GetBackScene();
+ CScene_InGameInfo* infoScene;
+ VOID *pObj;
+ XuiObjectFromHandle( hBackScene, &pObj );
+ infoScene = (CScene_InGameInfo *)pObj;
+ if(infoScene != NULL) CScene_InGameInfo::OnPlayerChanged(infoScene,pPlayer,leaving);
+
+ if(leaving && pPlayer != NULL && pPlayer->GetSmallId() == scene->m_networkSmallId)
+ {
+ app.NavigateBack(scene->m_iPad);
+ }
+}
+
+HRESULT CScene_InGamePlayerOptions::OnTransitionStart( XUIMessageTransition *pTransition, BOOL& bHandled )
+{
+ if(pTransition->dwTransType == XUI_TRANSITION_TO || pTransition->dwTransType == XUI_TRANSITION_BACKTO)
+ {
+ INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
+ if(editingPlayer != NULL)
+ {
+ short colourIndex = app.GetPlayerColour( m_networkSmallId );
+ switch(colourIndex)
+ {
+ case 1:
+ m_Icon.PlayVisualRange(L"P1",NULL,L"P1");
+ break;
+ case 2:
+ m_Icon.PlayVisualRange(L"P2",NULL,L"P2");
+ break;
+ case 3:
+ m_Icon.PlayVisualRange(L"P3",NULL,L"P3");
+ break;
+ case 4:
+ m_Icon.PlayVisualRange(L"P4",NULL,L"P4");
+ break;
+ case 5:
+ m_Icon.PlayVisualRange(L"P5",NULL,L"P5");
+ break;
+ case 6:
+ m_Icon.PlayVisualRange(L"P6",NULL,L"P6");
+ break;
+ case 7:
+ m_Icon.PlayVisualRange(L"P7",NULL,L"P7");
+ break;
+ case 8:
+ m_Icon.PlayVisualRange(L"P8",NULL,L"P8");
+ break;
+ case 9:
+ m_Icon.PlayVisualRange(L"P9",NULL,L"P9");
+ break;
+ case 10:
+ m_Icon.PlayVisualRange(L"P10",NULL,L"P10");
+ break;
+ case 11:
+ m_Icon.PlayVisualRange(L"P11",NULL,L"P11");
+ break;
+ case 12:
+ m_Icon.PlayVisualRange(L"P12",NULL,L"P12");
+ break;
+ case 13:
+ m_Icon.PlayVisualRange(L"P13",NULL,L"P13");
+ break;
+ case 14:
+ m_Icon.PlayVisualRange(L"P14",NULL,L"P14");
+ break;
+ case 15:
+ m_Icon.PlayVisualRange(L"P15",NULL,L"P15");
+ break;
+ case 0:
+ default:
+ m_Icon.PlayVisualRange(L"P0",NULL,L"P0");
+ break;
+ };
+ }
+ }
+ return S_OK;
+}
+
+void CScene_InGamePlayerOptions::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);
+}
+
+void CScene_InGamePlayerOptions::resetCheatCheckboxes()
+{
+ bool isModerator = m_checkboxes[eControl_Op].IsChecked();
+ //bool cheatsEnabled = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
+
+ if (!m_editingSelf)
+ {
+ m_checkboxes[eControl_HostInvisible].SetEnable(isModerator);
+ m_checkboxes[eControl_HostInvisible].SetCheck( isModerator
+ && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0) );
+
+ // NOT CREATIVE MODE.
+ {
+ m_checkboxes[eControl_HostFly].SetEnable(isModerator);
+ m_checkboxes[eControl_HostFly].SetCheck( isModerator
+ && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleFly) != 0) );
+
+ m_checkboxes[eControl_HostHunger].SetEnable(isModerator);
+ m_checkboxes[eControl_HostHunger].SetCheck( isModerator
+ && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleClassicHunger) != 0) );
+ }
+
+ m_checkboxes[eControl_CheatTeleport].SetEnable(isModerator);
+ m_checkboxes[eControl_CheatTeleport].SetCheck( isModerator
+ && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanTeleport) != 0) );
+ }
+} \ No newline at end of file