mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 12:53:36 +00:00
284 lines
11 KiB
C++
284 lines
11 KiB
C++
#include "../../Minecraft.World/Platform/stdafx.h"
|
|
#include "XUI_MultiGameCreate.h"
|
|
#include "XUI_MultiGameLaunchMoreOptions.h"
|
|
#include "../../Minecraft.Client/Textures/Packs/TexturePackRepository.h"
|
|
#include "../../Minecraft.Client/Minecraft.h"
|
|
|
|
#define GAME_CREATE_ONLINE_TIMER_ID 0
|
|
#define GAME_CREATE_ONLINE_TIMER_TIME 100
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Performs initialization tasks - retrieves controls.
|
|
//----------------------------------------------------------------------------------
|
|
HRESULT CScene_MultiGameLaunchMoreOptions::OnInit(XUIMessageInit* pInitData,
|
|
BOOL& bHandled) {
|
|
MapChildControls();
|
|
|
|
XuiControlSetText(m_CheckboxOnline, app.GetString(IDS_ONLINE_GAME));
|
|
XuiControlSetText(m_CheckboxInviteOnly, app.GetString(IDS_INVITE_ONLY));
|
|
XuiControlSetText(m_CheckboxAllowFoF,
|
|
app.GetString(IDS_ALLOWFRIENDSOFFRIENDS));
|
|
XuiControlSetText(m_CheckboxPVP, app.GetString(IDS_PLAYER_VS_PLAYER));
|
|
XuiControlSetText(m_CheckboxTrustPlayers, app.GetString(IDS_TRUST_PLAYERS));
|
|
XuiControlSetText(m_CheckboxFireSpreads, app.GetString(IDS_FIRE_SPREADS));
|
|
XuiControlSetText(m_CheckboxTNTExplodes, app.GetString(IDS_TNT_EXPLODES));
|
|
XuiControlSetText(m_CheckboxHostPrivileges,
|
|
app.GetString(IDS_HOST_PRIVILEGES));
|
|
XuiControlSetText(m_CheckboxResetNether, app.GetString(IDS_RESET_NETHER));
|
|
XuiControlSetText(m_LabelWorldOptions, app.GetString(IDS_WORLD_OPTIONS));
|
|
XuiControlSetText(m_CheckboxStructures,
|
|
app.GetString(IDS_GENERATE_STRUCTURES));
|
|
XuiControlSetText(m_CheckboxFlatWorld, app.GetString(IDS_SUPERFLAT_WORLD));
|
|
XuiControlSetText(m_CheckboxBonusChest, app.GetString(IDS_BONUS_CHEST));
|
|
|
|
m_params = (LaunchMoreOptionsMenuInitData*)pInitData->pvInitData;
|
|
|
|
if (m_params->bGenerateOptions) {
|
|
m_CheckboxStructures.SetEnable(TRUE);
|
|
m_CheckboxFlatWorld.SetEnable(TRUE);
|
|
m_CheckboxBonusChest.SetEnable(TRUE);
|
|
m_CheckboxStructures.SetCheck(m_params->bStructures);
|
|
m_CheckboxFlatWorld.SetCheck(m_params->bFlatWorld);
|
|
m_CheckboxBonusChest.SetCheck(m_params->bBonusChest);
|
|
|
|
// This is a create world, so don't need Reset Nether
|
|
float fHeight, fCheckboxHeight, fWidth;
|
|
m_CheckboxResetNether.GetBounds(&fWidth, &fCheckboxHeight);
|
|
|
|
m_HostOptionGroup.GetBounds(&fWidth, &fHeight);
|
|
m_HostOptionGroup.SetBounds(fWidth, fHeight - fCheckboxHeight);
|
|
|
|
GetBounds(&fWidth, &fHeight);
|
|
SetBounds(fWidth, fHeight - fCheckboxHeight);
|
|
|
|
D3DXVECTOR3 pos;
|
|
GetPosition(&pos);
|
|
pos.y += (fCheckboxHeight / 2);
|
|
SetPosition(&pos);
|
|
|
|
m_GenerationGroup.GetPosition(&pos);
|
|
pos.y -= fCheckboxHeight;
|
|
m_GenerationGroup.SetPosition(&pos);
|
|
|
|
m_CheckboxResetNether.SetShow(FALSE);
|
|
} else {
|
|
float fHeight, fGroupHeight, fWidth;
|
|
m_GenerationGroup.GetBounds(&fWidth, &fGroupHeight);
|
|
m_GenerationGroup.SetShow(FALSE);
|
|
m_GenerationGroup.SetEnable(FALSE);
|
|
m_CheckboxStructures.SetShow(FALSE);
|
|
m_CheckboxFlatWorld.SetShow(FALSE);
|
|
m_CheckboxBonusChest.SetShow(FALSE);
|
|
|
|
GetBounds(&fWidth, &fHeight);
|
|
SetBounds(fWidth, fHeight + 10 - fGroupHeight);
|
|
|
|
D3DXVECTOR3 pos;
|
|
GetPosition(&pos);
|
|
pos.y += (fGroupHeight / 2);
|
|
SetPosition(&pos);
|
|
|
|
m_CheckboxResetNether.SetEnable(TRUE);
|
|
m_CheckboxResetNether.SetCheck(m_params->bResetNether);
|
|
}
|
|
|
|
m_CheckboxPVP.SetEnable(TRUE);
|
|
m_CheckboxTrustPlayers.SetEnable(TRUE);
|
|
m_CheckboxFireSpreads.SetEnable(TRUE);
|
|
m_CheckboxTNTExplodes.SetEnable(TRUE);
|
|
m_CheckboxHostPrivileges.SetEnable(TRUE);
|
|
|
|
m_CheckboxPVP.SetCheck(m_params->bPVP);
|
|
m_CheckboxTrustPlayers.SetCheck(m_params->bTrust);
|
|
m_CheckboxFireSpreads.SetCheck(m_params->bFireSpreads);
|
|
m_CheckboxTNTExplodes.SetCheck(m_params->bTNT);
|
|
m_CheckboxHostPrivileges.SetCheck(m_params->bHostPrivileges);
|
|
|
|
m_CheckboxOnline.SetCheck(m_params->bOnlineGame);
|
|
m_CheckboxInviteOnly.SetCheck(m_params->bInviteOnly);
|
|
m_CheckboxAllowFoF.SetCheck(m_params->bAllowFriendsOfFriends);
|
|
|
|
m_bMultiplayerAllowed =
|
|
ProfileManager.IsSignedInLive(m_params->iPad) &&
|
|
ProfileManager.AllowedToPlayMultiplayer(m_params->iPad);
|
|
if (m_params->bOnlineSettingChangedBySystem) {
|
|
m_CheckboxOnline.SetCheck(FALSE);
|
|
m_CheckboxOnline.SetEnable(FALSE);
|
|
m_CheckboxInviteOnly.SetCheck(FALSE);
|
|
m_CheckboxInviteOnly.SetEnable(FALSE);
|
|
m_CheckboxAllowFoF.SetCheck(FALSE);
|
|
m_CheckboxAllowFoF.SetEnable(FALSE);
|
|
} else if (!m_params->bOnlineGame) {
|
|
m_CheckboxInviteOnly.SetEnable(FALSE);
|
|
m_CheckboxAllowFoF.SetEnable(FALSE);
|
|
}
|
|
|
|
XuiSetTimer(m_hObj, GAME_CREATE_ONLINE_TIMER_ID,
|
|
GAME_CREATE_ONLINE_TIMER_TIME);
|
|
|
|
ui.SetTooltips(DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT,
|
|
IDS_TOOLTIPS_BACK);
|
|
|
|
CXuiSceneBase::ShowLogo(DEFAULT_XUI_MENU_USER, FALSE);
|
|
|
|
// SentientManager.RecordMenuShown(m_params->iPad, eUIScene_CreateWorldMenu,
|
|
// 0);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CScene_MultiGameLaunchMoreOptions::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:
|
|
m_params->bOnlineGame = m_CheckboxOnline.IsChecked();
|
|
m_params->bInviteOnly = m_CheckboxInviteOnly.IsChecked();
|
|
m_params->bAllowFriendsOfFriends = m_CheckboxAllowFoF.IsChecked();
|
|
|
|
m_params->bStructures = m_CheckboxStructures.IsChecked();
|
|
m_params->bFlatWorld = m_CheckboxFlatWorld.IsChecked();
|
|
m_params->bBonusChest = m_CheckboxBonusChest.IsChecked();
|
|
m_params->bPVP = m_CheckboxPVP.IsChecked();
|
|
m_params->bTrust = m_CheckboxTrustPlayers.IsChecked();
|
|
m_params->bFireSpreads = m_CheckboxFireSpreads.IsChecked();
|
|
m_params->bTNT = m_CheckboxTNTExplodes.IsChecked();
|
|
|
|
m_params->bHostPrivileges = m_CheckboxHostPrivileges.IsChecked();
|
|
|
|
m_params->bResetNether = m_CheckboxResetNether.IsChecked();
|
|
|
|
app.NavigateBack(pInputData->UserIndex);
|
|
rfHandled = TRUE;
|
|
break;
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CScene_MultiGameLaunchMoreOptions::OnNotifySetFocus(
|
|
HXUIOBJ hObjSource, XUINotifyFocus* pNotifyFocusData, BOOL& bHandled) {
|
|
int stringId = 0;
|
|
if (hObjSource == m_CheckboxStructures) {
|
|
stringId = IDS_GAMEOPTION_STRUCTURES;
|
|
} else if (hObjSource == m_CheckboxOnline) {
|
|
stringId = IDS_GAMEOPTION_ONLINE;
|
|
} else if (hObjSource == m_CheckboxInviteOnly) {
|
|
stringId = IDS_GAMEOPTION_INVITEONLY;
|
|
} else if (hObjSource == m_CheckboxAllowFoF) {
|
|
stringId = IDS_GAMEOPTION_ALLOWFOF;
|
|
} else if (hObjSource == m_CheckboxFlatWorld) {
|
|
stringId = IDS_GAMEOPTION_SUPERFLAT;
|
|
} else if (hObjSource == m_CheckboxBonusChest) {
|
|
stringId = IDS_GAMEOPTION_BONUS_CHEST;
|
|
} else if (hObjSource == m_CheckboxPVP) {
|
|
stringId = IDS_GAMEOPTION_PVP;
|
|
} else if (hObjSource == m_CheckboxTrustPlayers) {
|
|
stringId = IDS_GAMEOPTION_TRUST;
|
|
} else if (hObjSource == m_CheckboxFireSpreads) {
|
|
stringId = IDS_GAMEOPTION_FIRE_SPREADS;
|
|
} else if (hObjSource == m_CheckboxTNTExplodes) {
|
|
stringId = IDS_GAMEOPTION_TNT_EXPLODES;
|
|
} else if (hObjSource == m_CheckboxHostPrivileges) {
|
|
stringId = IDS_GAMEOPTION_HOST_PRIVILEGES;
|
|
} else if (hObjSource == m_CheckboxResetNether) {
|
|
stringId = IDS_GAMEOPTION_RESET_NETHER;
|
|
}
|
|
|
|
std::wstring wsText = app.GetString(stringId);
|
|
int size = 14;
|
|
if (!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) {
|
|
size = 12;
|
|
}
|
|
wchar_t startTags[64];
|
|
swprintf(startTags, 64, L"<font color=\"#%08x\" size=%d>",
|
|
app.GetHTMLColour(eHTMLColor_White), size);
|
|
wsText = startTags + wsText;
|
|
|
|
m_Description.SetText(wsText.c_str());
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CScene_MultiGameLaunchMoreOptions::OnControlNavigate(
|
|
XUIMessageControlNavigate* pControlNavigateData, BOOL& bHandled) {
|
|
pControlNavigateData->hObjDest = XuiControlGetNavigation(
|
|
pControlNavigateData->hObjSource,
|
|
pControlNavigateData->nControlNavigate, TRUE, TRUE);
|
|
|
|
if (pControlNavigateData->hObjDest != NULL) {
|
|
bHandled = TRUE;
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Handler for the button press message.
|
|
//----------------------------------------------------------------------------------
|
|
HRESULT CScene_MultiGameLaunchMoreOptions::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_CheckboxOnline) {
|
|
if (m_CheckboxOnline.IsChecked()) {
|
|
m_CheckboxInviteOnly.SetEnable(TRUE);
|
|
m_CheckboxAllowFoF.SetEnable(TRUE);
|
|
} else {
|
|
m_CheckboxInviteOnly.SetCheck(FALSE);
|
|
m_CheckboxInviteOnly.SetEnable(FALSE);
|
|
m_CheckboxAllowFoF.SetCheck(FALSE);
|
|
m_CheckboxAllowFoF.SetEnable(FALSE);
|
|
}
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CScene_MultiGameLaunchMoreOptions::OnTimer(XUIMessageTimer* pTimer,
|
|
BOOL& bHandled) {
|
|
// 4J-PB - TODO - Don't think we can do this - if a 2nd player signs in here
|
|
// with an offline profile, the signed in LIVE player gets re-logged in, and
|
|
// bMultiplayerAllowed is false briefly
|
|
if (pTimer->nId == GAME_CREATE_ONLINE_TIMER_ID) {
|
|
bool bMultiplayerAllowed =
|
|
ProfileManager.IsSignedInLive(m_params->iPad) &&
|
|
ProfileManager.AllowedToPlayMultiplayer(m_params->iPad);
|
|
|
|
if (bMultiplayerAllowed != m_bMultiplayerAllowed) {
|
|
if (bMultiplayerAllowed) {
|
|
bool bGameSetting_Online =
|
|
(app.GetGameSettings(m_params->iPad, eGameSetting_Online) !=
|
|
0);
|
|
m_CheckboxOnline.SetCheck(bGameSetting_Online ? TRUE : FALSE);
|
|
if (bGameSetting_Online) {
|
|
m_CheckboxInviteOnly.SetCheck(
|
|
(app.GetGameSettings(m_params->iPad,
|
|
eGameSetting_InviteOnly) != 0)
|
|
? TRUE
|
|
: FALSE);
|
|
m_CheckboxAllowFoF.SetCheck(
|
|
(app.GetGameSettings(m_params->iPad,
|
|
eGameSetting_FriendsOfFriends) !=
|
|
0)
|
|
? TRUE
|
|
: FALSE);
|
|
} else {
|
|
m_CheckboxInviteOnly.SetCheck(FALSE);
|
|
m_CheckboxAllowFoF.SetCheck(FALSE);
|
|
}
|
|
} else {
|
|
m_CheckboxOnline.SetCheck(FALSE);
|
|
m_CheckboxOnline.SetEnable(FALSE);
|
|
m_CheckboxInviteOnly.SetCheck(FALSE);
|
|
m_CheckboxInviteOnly.SetEnable(FALSE);
|
|
m_CheckboxAllowFoF.SetCheck(FALSE);
|
|
}
|
|
|
|
m_bMultiplayerAllowed = bMultiplayerAllowed;
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
} |