first commit
This commit is contained in:
150
Minecraft.Client/Common/XUI/XUI_InGameHostOptions.cpp
Normal file
150
Minecraft.Client/Common/XUI/XUI_InGameHostOptions.cpp
Normal file
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user