150 lines
5.0 KiB
C++
150 lines
5.0 KiB
C++
#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);
|
|
} |