mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 15:03:37 +00:00
2180 lines
85 KiB
C++
2180 lines
85 KiB
C++
#include "../../Minecraft.World/Platform/stdafx.h"
|
|
|
|
#include <assert.h>
|
|
#include "../../Minecraft.Client/Level/MultiPlayerLevel.h"
|
|
#include "../../Minecraft.Client/Player/MultiPlayerLocalPlayer.h"
|
|
#include "../../Minecraft.Client/GameState/StatsCounter.h"
|
|
#include "../../Minecraft.World/Util/StringHelpers.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.stats.h"
|
|
#include "../../Minecraft.Client/Minecraft.h"
|
|
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.level.h"
|
|
#include "../../Minecraft.World/Level/LevelData.h"
|
|
#include "XUI_CustomMessages.h"
|
|
#include "../../Minecraft.World/Level/Dimensions/Dimension.h"
|
|
#include "../../Minecraft.World/Util/SharedConstants.h"
|
|
#include "../../Minecraft.Client/GameState/GameMode.h"
|
|
#include "../../Minecraft.Client/Rendering/EntityRenderers/EnderDragonRenderer.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.entity.boss.enderdragon.h"
|
|
#include "../../Minecraft.Client/Textures/Packs/TexturePackRepository.h"
|
|
#include "../../Minecraft.Client/Textures/Packs/TexturePack.h"
|
|
#include "../../Minecraft.Client/Textures/Packs/DLCTexturePack.h"
|
|
|
|
#define PRESS_START_TIMER 0
|
|
|
|
CXuiSceneBase* CXuiSceneBase::Instance = NULL;
|
|
unsigned int CXuiSceneBase::m_trialTimerLimitSecs =
|
|
DYNAMIC_CONFIG_DEFAULT_TRIAL_TIME;
|
|
//----------------------------------------------------------------------------------
|
|
// Performs initialization tasks - retrieves controls.
|
|
//----------------------------------------------------------------------------------
|
|
HRESULT CXuiSceneBase::OnInit(XUIMessageInit* pInitData, BOOL& bHandled) {
|
|
ASSERT(CXuiSceneBase::Instance == NULL);
|
|
CXuiSceneBase::Instance = this;
|
|
|
|
m_iWrongTexturePackTickC =
|
|
20 * 5; // default 5 seconds before bringing up the upsell for not
|
|
// having the texture pack
|
|
MapChildControls();
|
|
|
|
// Display the tooltips
|
|
HRESULT hr = S_OK;
|
|
CXuiElement xuiElement = m_hObj;
|
|
HXUIOBJ hTemp;
|
|
|
|
m_hEmptyQuadrantLogo = NULL;
|
|
XuiElementGetChildById(m_hObj, L"EmptyQuadrantLogo", &m_hEmptyQuadrantLogo);
|
|
|
|
D3DXVECTOR3 lastPos;
|
|
for (unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) {
|
|
for (unsigned int i = 0; i < BUTTONS_TOOLTIP_MAX; ++i) {
|
|
m_visible[idx][i] = false;
|
|
m_iCurrentTooltipTextID[idx][i] = -1;
|
|
hTooltipText[idx][i] = NULL;
|
|
hTooltipTextSmall[idx][i] = NULL;
|
|
// set all tooltips to shown FALSE by default
|
|
m_Buttons[idx][i].SetShow(FALSE);
|
|
m_ButtonsSmall[idx][i].SetShow(FALSE);
|
|
}
|
|
|
|
XuiElementGetPosition(m_bottomLeftAnchorPoint[idx].m_hObj, &lastPos);
|
|
lastPos.y -= 110;
|
|
|
|
m_bCrouching[idx] = false;
|
|
m_uiSelectedItemOpacityCountDown[idx] = 0;
|
|
m_bossHealthVisible[idx] = false;
|
|
|
|
switch (idx) {
|
|
case 0:
|
|
XuiElementGetChildById(m_hObj, L"BasePlayer0", &hTemp);
|
|
XuiElementGetChildById(hTemp, L"XuiGamertag", &m_hGamerTagA[0]);
|
|
break;
|
|
case 1:
|
|
XuiElementGetChildById(m_hObj, L"BasePlayer1", &hTemp);
|
|
XuiElementGetChildById(hTemp, L"XuiGamertag", &m_hGamerTagA[1]);
|
|
break;
|
|
case 2:
|
|
XuiElementGetChildById(m_hObj, L"BasePlayer2", &hTemp);
|
|
XuiElementGetChildById(hTemp, L"XuiGamertag", &m_hGamerTagA[2]);
|
|
break;
|
|
case 3:
|
|
XuiElementGetChildById(m_hObj, L"BasePlayer3", &hTemp);
|
|
XuiElementGetChildById(hTemp, L"XuiGamertag", &m_hGamerTagA[3]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
m_ticksWithNoBoss = 0;
|
|
|
|
UpdatePlayerBasePositions();
|
|
|
|
m_iQuadrantsMask = 0;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::OnTimer(XUIMessageTimer* pData, BOOL& rfHandled) {
|
|
if (pData->nId == PRESS_START_TIMER) {
|
|
XuiKillTimer(m_hObj, PRESS_START_TIMER);
|
|
XuiElementStopTimeline(m_hObj, TRUE);
|
|
m_PressStart.SetShow(FALSE);
|
|
|
|
// clear the quadrants
|
|
m_iQuadrantsMask = 0;
|
|
|
|
HXUIOBJ hObj = NULL, hQuadrant;
|
|
|
|
HRESULT hr = XuiControlGetVisual(m_PressStart.m_hObj, &hObj);
|
|
|
|
for (int i = 0; i < XUSER_MAX_COUNT; i++) {
|
|
switch (i) {
|
|
case 0:
|
|
hr = XuiElementGetChildById(hObj, L"Quadrant1", &hQuadrant);
|
|
XuiElementSetShow(hQuadrant, FALSE);
|
|
break;
|
|
case 1:
|
|
hr = XuiElementGetChildById(hObj, L"Quadrant2", &hQuadrant);
|
|
XuiElementSetShow(hQuadrant, FALSE);
|
|
break;
|
|
case 2:
|
|
hr = XuiElementGetChildById(hObj, L"Quadrant3", &hQuadrant);
|
|
XuiElementSetShow(hQuadrant, FALSE);
|
|
break;
|
|
case 3:
|
|
hr = XuiElementGetChildById(hObj, L"Quadrant4", &hQuadrant);
|
|
XuiElementSetShow(hQuadrant, FALSE);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::OnSkinChanged(BOOL& bHandled) {
|
|
// Clear visuals held for tooltips
|
|
for (unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) {
|
|
for (unsigned int i = 0; i < BUTTONS_TOOLTIP_MAX; ++i) {
|
|
hTooltipText[idx][i] = NULL;
|
|
hTooltipTextSmall[idx][i] = NULL;
|
|
}
|
|
}
|
|
|
|
// Don't set to handled
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
void CXuiSceneBase::_TickAllBaseScenes() {
|
|
Minecraft* pMinecraft = Minecraft::GetInstance();
|
|
|
|
// 4J-PB - added to upsell the texture pack if you join from invite and
|
|
// don't have it what texture pack are we using?
|
|
bool bCheckTexturePack = false;
|
|
|
|
for (int i = 0; i < XUSER_MAX_COUNT; i++) {
|
|
bCheckTexturePack = app.GetGameStarted() &&
|
|
(ui.GetMenuDisplayed(0) == false) &&
|
|
(app.GetXuiAction(i) == eAppAction_Idle);
|
|
}
|
|
|
|
// make sure there's not a mount going on before using the textures
|
|
if (bCheckTexturePack && app.DLCInstallProcessCompleted()) {
|
|
TexturePack* tPack = pMinecraft->skins->getSelected();
|
|
|
|
if (tPack->getId() != app.GetRequiredTexturePackID()) {
|
|
// we're not using the texture pack we need
|
|
|
|
// Is it available?
|
|
TexturePack* pRequiredTPack = pMinecraft->skins->getTexturePackById(
|
|
app.GetRequiredTexturePackID());
|
|
if (pRequiredTPack != NULL) {
|
|
// we can switch to the required pack
|
|
// reset the timer
|
|
m_iWrongTexturePackTickC = 20 * 60 * 5; // reset to 5 minutes
|
|
|
|
pMinecraft->skins->selectTexturePackById(
|
|
app.GetRequiredTexturePackID());
|
|
|
|
// probably had background downloads enabled, so turn them off
|
|
XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_AUTO);
|
|
} else {
|
|
// decrement the counter
|
|
m_iWrongTexturePackTickC--;
|
|
|
|
if (m_iWrongTexturePackTickC == 0) {
|
|
// action
|
|
app.SetAction(ProfileManager.GetPrimaryPad(),
|
|
eAppAction_TexturePackRequired);
|
|
|
|
// reset the timer
|
|
m_iWrongTexturePackTickC =
|
|
20 * 60 * 5; // reset to 5 minutes
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (EnderDragonRenderer::bossInstance == NULL) {
|
|
if (m_ticksWithNoBoss <= 20) {
|
|
++m_ticksWithNoBoss;
|
|
}
|
|
} else {
|
|
std::shared_ptr<EnderDragon> boss = EnderDragonRenderer::bossInstance;
|
|
EnderDragonRenderer::bossInstance = nullptr;
|
|
m_ticksWithNoBoss = 0;
|
|
|
|
for (unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) {
|
|
if (pMinecraft->localplayers[i] != NULL &&
|
|
pMinecraft->localplayers[i]->dimension == 1 &&
|
|
!ui.GetMenuDisplayed(i) &&
|
|
app.GetGameSettings(i, eGameSetting_DisplayHUD)) {
|
|
int iGuiScale;
|
|
|
|
if (pMinecraft->localplayers[i]->m_iScreenSection ==
|
|
C4JRender::VIEWPORT_TYPE_FULLSCREEN) {
|
|
iGuiScale = app.GetGameSettings(i, eGameSetting_UISize);
|
|
} else {
|
|
iGuiScale =
|
|
app.GetGameSettings(i, eGameSetting_UISizeSplitscreen);
|
|
}
|
|
m_BossHealthGroup[i].SetShow(TRUE);
|
|
m_BossHealthText[i].SetText(
|
|
app.GetString(IDS_BOSS_ENDERDRAGON_HEALTH));
|
|
|
|
if (pMinecraft->localplayers[i]->m_iScreenSection ==
|
|
C4JRender::VIEWPORT_TYPE_FULLSCREEN) {
|
|
switch (iGuiScale) {
|
|
case 0:
|
|
m_pBossHealthProgress = m_BossHealthProgress1;
|
|
m_BossHealthProgress1[i].SetShow(TRUE);
|
|
m_BossHealthProgress2[i].SetShow(FALSE);
|
|
m_BossHealthProgress3[i].SetShow(FALSE);
|
|
if (m_BossHealthProgress1_small[i] != NULL) {
|
|
m_BossHealthProgress1_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress2_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress3_small[i].SetShow(FALSE);
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
m_pBossHealthProgress = m_BossHealthProgress2;
|
|
m_BossHealthProgress1[i].SetShow(FALSE);
|
|
m_BossHealthProgress2[i].SetShow(TRUE);
|
|
m_BossHealthProgress3[i].SetShow(FALSE);
|
|
if (m_BossHealthProgress1_small[i] != NULL) {
|
|
m_BossHealthProgress1_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress2_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress3_small[i].SetShow(FALSE);
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
m_pBossHealthProgress = m_BossHealthProgress3;
|
|
m_BossHealthProgress1[i].SetShow(FALSE);
|
|
m_BossHealthProgress2[i].SetShow(FALSE);
|
|
m_BossHealthProgress3[i].SetShow(TRUE);
|
|
if (m_BossHealthProgress1_small[i] != NULL) {
|
|
m_BossHealthProgress1_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress2_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress3_small[i].SetShow(FALSE);
|
|
}
|
|
|
|
break;
|
|
}
|
|
} else {
|
|
// if we have 2 player top & bottom, we can use the
|
|
// fullscreen bar
|
|
if ((pMinecraft->localplayers[i]->m_iScreenSection ==
|
|
C4JRender::VIEWPORT_TYPE_SPLIT_TOP) ||
|
|
(pMinecraft->localplayers[i]->m_iScreenSection ==
|
|
C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM)) {
|
|
switch (iGuiScale) {
|
|
case 0:
|
|
m_pBossHealthProgress = m_BossHealthProgress1;
|
|
m_BossHealthProgress1[i].SetShow(TRUE);
|
|
m_BossHealthProgress2[i].SetShow(FALSE);
|
|
m_BossHealthProgress3[i].SetShow(FALSE);
|
|
if (m_BossHealthProgress1_small[i] != NULL) {
|
|
m_BossHealthProgress1_small[i].SetShow(
|
|
FALSE);
|
|
m_BossHealthProgress2_small[i].SetShow(
|
|
FALSE);
|
|
m_BossHealthProgress3_small[i].SetShow(
|
|
FALSE);
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
m_pBossHealthProgress = m_BossHealthProgress2;
|
|
m_BossHealthProgress1[i].SetShow(FALSE);
|
|
m_BossHealthProgress2[i].SetShow(TRUE);
|
|
m_BossHealthProgress3[i].SetShow(FALSE);
|
|
if (m_BossHealthProgress1_small[i] != NULL) {
|
|
m_BossHealthProgress1_small[i].SetShow(
|
|
FALSE);
|
|
m_BossHealthProgress2_small[i].SetShow(
|
|
FALSE);
|
|
m_BossHealthProgress3_small[i].SetShow(
|
|
FALSE);
|
|
}
|
|
break;
|
|
case 2:
|
|
m_pBossHealthProgress = m_BossHealthProgress3;
|
|
m_BossHealthProgress1[i].SetShow(FALSE);
|
|
m_BossHealthProgress2[i].SetShow(FALSE);
|
|
m_BossHealthProgress3[i].SetShow(TRUE);
|
|
if (m_BossHealthProgress1_small[i] != NULL) {
|
|
m_BossHealthProgress1_small[i].SetShow(
|
|
FALSE);
|
|
m_BossHealthProgress2_small[i].SetShow(
|
|
FALSE);
|
|
m_BossHealthProgress3_small[i].SetShow(
|
|
FALSE);
|
|
}
|
|
break;
|
|
}
|
|
} else {
|
|
// use the small versions
|
|
switch (iGuiScale) {
|
|
case 0:
|
|
m_pBossHealthProgress =
|
|
m_BossHealthProgress1_small;
|
|
m_BossHealthProgress1_small[i].SetShow(TRUE);
|
|
m_BossHealthProgress2_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress3_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress1[i].SetShow(FALSE);
|
|
m_BossHealthProgress2[i].SetShow(FALSE);
|
|
m_BossHealthProgress3[i].SetShow(FALSE);
|
|
|
|
break;
|
|
case 1:
|
|
m_pBossHealthProgress =
|
|
m_BossHealthProgress2_small;
|
|
m_BossHealthProgress1_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress2_small[i].SetShow(TRUE);
|
|
m_BossHealthProgress3_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress1[i].SetShow(FALSE);
|
|
m_BossHealthProgress2[i].SetShow(FALSE);
|
|
m_BossHealthProgress3[i].SetShow(FALSE);
|
|
break;
|
|
case 2:
|
|
m_pBossHealthProgress =
|
|
m_BossHealthProgress3_small;
|
|
m_BossHealthProgress1_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress2_small[i].SetShow(FALSE);
|
|
m_BossHealthProgress3_small[i].SetShow(TRUE);
|
|
m_BossHealthProgress1[i].SetShow(FALSE);
|
|
m_BossHealthProgress2[i].SetShow(FALSE);
|
|
m_BossHealthProgress3[i].SetShow(FALSE);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
m_pBossHealthProgress[i].SetRange(0, boss->getMaxHealth());
|
|
m_pBossHealthProgress[i].SetValue(boss->getSynchedHealth());
|
|
m_bossHealthVisible[i] = true;
|
|
|
|
_UpdateSelectedItemPos(i);
|
|
} else if (m_bossHealthVisible[i]) {
|
|
m_BossHealthGroup[i].SetShow(FALSE);
|
|
m_bossHealthVisible[i] = false;
|
|
|
|
_UpdateSelectedItemPos(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < XUSER_MAX_COUNT; i++) {
|
|
if (m_uiSelectedItemOpacityCountDown[i] > 0)
|
|
--m_uiSelectedItemOpacityCountDown[i];
|
|
if (m_ticksWithNoBoss > 20) {
|
|
m_BossHealthGroup[i].SetShow(FALSE);
|
|
m_bossHealthVisible[i] = false;
|
|
|
|
_UpdateSelectedItemPos(i);
|
|
}
|
|
|
|
// check if we have the timer running for the opacity
|
|
unsigned int uiOpacityTimer = m_uiSelectedItemOpacityCountDown[i];
|
|
|
|
if (uiOpacityTimer > 0 && !ui.GetMenuDisplayed(i) &&
|
|
app.GetGameStarted()) {
|
|
if (uiOpacityTimer < (SharedConstants::TICKS_PER_SECOND * 1)) {
|
|
float fStep = (80.0f) / 10.0f;
|
|
float fVal =
|
|
0.01f * (80.0f - ((10.0f - (float)uiOpacityTimer) * fStep));
|
|
|
|
XuiElementSetOpacity(m_selectedItemA[i], fVal);
|
|
XuiElementSetOpacity(m_selectedItemSmallA[i], fVal);
|
|
}
|
|
|
|
if (m_playerBaseScenePosition[i] == e_BaseScene_Fullscreen) {
|
|
m_selectedItemA[i].SetShow(TRUE);
|
|
m_selectedItemSmallA[i].SetShow(FALSE);
|
|
} else {
|
|
m_selectedItemA[i].SetShow(FALSE);
|
|
m_selectedItemSmallA[i].SetShow(TRUE);
|
|
}
|
|
} else {
|
|
m_selectedItemA[i].SetShow(FALSE);
|
|
m_selectedItemSmallA[i].SetShow(FALSE);
|
|
}
|
|
|
|
unsigned char ucAlpha = app.GetGameSettings(
|
|
ProfileManager.GetPrimaryPad(), eGameSetting_InterfaceOpacity);
|
|
float fVal;
|
|
|
|
if (ucAlpha < 80) {
|
|
// if we are in a menu, set the minimum opacity for tooltips to 15%
|
|
if (ui.GetMenuDisplayed(i) && (ucAlpha < 15)) {
|
|
ucAlpha = 15;
|
|
}
|
|
|
|
// check if we have the timer running for the opacity
|
|
unsigned int uiOpacityTimer = app.GetOpacityTimer(i);
|
|
if (uiOpacityTimer != 0) {
|
|
if (uiOpacityTimer < 10) {
|
|
float fStep = (80.0f - (float)ucAlpha) / 10.0f;
|
|
fVal = 0.01f *
|
|
(80.0f - ((10.0f - (float)uiOpacityTimer) * fStep));
|
|
} else {
|
|
fVal = 0.01f * 80.0f;
|
|
}
|
|
} else {
|
|
fVal = 0.01f * (float)ucAlpha;
|
|
}
|
|
} else {
|
|
// if we are in a menu, set the minimum opacity for tooltips to 15%
|
|
if (ui.GetMenuDisplayed(i) && (ucAlpha < 15)) {
|
|
ucAlpha = 15;
|
|
}
|
|
fVal = 0.01f * (float)ucAlpha;
|
|
}
|
|
XuiElementSetOpacity(app.GetCurrentHUDScene(i), fVal);
|
|
|
|
XUIMessage xuiMsg;
|
|
CustomMessage_TickScene(&xuiMsg);
|
|
XuiSendMessage(app.GetCurrentHUDScene(i), &xuiMsg);
|
|
|
|
bool bDisplayGui = app.GetGameStarted() && !ui.GetMenuDisplayed(i) &&
|
|
!(app.GetXuiAction(i) ==
|
|
eAppAction_AutosaveSaveGameCapturedThumbnail) &&
|
|
app.GetGameSettings(i, eGameSetting_DisplayHUD) != 0;
|
|
if (bDisplayGui && pMinecraft->localplayers[i] != NULL) {
|
|
XuiElementSetShow(app.GetCurrentHUDScene(i), TRUE);
|
|
} else {
|
|
XuiElementSetShow(app.GetCurrentHUDScene(i), FALSE);
|
|
}
|
|
}
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_SetEnableTooltips(unsigned int iPad, bool enabled) {
|
|
for (int i = 0; i < BUTTONS_TOOLTIP_MAX; i++) {
|
|
// XuiElementSetShow(m_Buttons[iPad][i].m_hObj,enabled);
|
|
XuiControlSetEnable(m_Buttons[iPad][i].m_hObj, enabled);
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_SetTooltipText(unsigned int iPad,
|
|
unsigned int uiTooltip, int iTextID) {
|
|
ASSERT(uiTooltip < BUTTONS_TOOLTIP_MAX);
|
|
|
|
XUIRect xuiRect, xuiRectSmall;
|
|
HRESULT hr = S_OK;
|
|
LPCWSTR pString = NULL;
|
|
float fWidth, fHeight;
|
|
|
|
// Want to be able to show just a button (for RB LB)
|
|
if (iTextID >= 0) {
|
|
pString = app.GetString(iTextID);
|
|
}
|
|
|
|
if (hTooltipText[iPad][uiTooltip] == NULL) {
|
|
HXUIOBJ hObj = NULL;
|
|
hr = XuiControlGetVisual(m_Buttons[iPad][uiTooltip].m_hObj, &hObj);
|
|
hr = XuiElementGetChildById(hObj, L"text_ButtonText",
|
|
&hTooltipText[iPad][uiTooltip]);
|
|
hr = XuiElementGetPosition(hTooltipText[iPad][uiTooltip],
|
|
&m_vPosTextInTooltip[uiTooltip]);
|
|
}
|
|
|
|
if (hTooltipTextSmall[iPad][uiTooltip] == NULL) {
|
|
HXUIOBJ hObj = NULL;
|
|
hr = XuiControlGetVisual(m_ButtonsSmall[iPad][uiTooltip].m_hObj, &hObj);
|
|
hr = XuiElementGetChildById(hObj, L"text_ButtonText",
|
|
&hTooltipTextSmall[iPad][uiTooltip]);
|
|
hr = XuiElementGetPosition(hTooltipTextSmall[iPad][uiTooltip],
|
|
&m_vPosTextInTooltipSmall[uiTooltip]);
|
|
}
|
|
|
|
if (iTextID >= 0) {
|
|
hr = XuiTextPresenterMeasureText(hTooltipText[iPad][uiTooltip], pString,
|
|
&xuiRect);
|
|
|
|
// Change the size of the whole button to be the width of the measured
|
|
// text, plus the position the text element starts in the visual (which
|
|
// is the offset by the size of the button graphic)
|
|
XuiElementGetBounds(m_Buttons[iPad][uiTooltip].m_hObj, &fWidth,
|
|
&fHeight);
|
|
XuiElementSetBounds(
|
|
m_Buttons[iPad][uiTooltip].m_hObj,
|
|
xuiRect.right + 1 + m_vPosTextInTooltip[uiTooltip].x, fHeight);
|
|
|
|
// Change the width of the text element to be the width of the measured
|
|
// text
|
|
XuiElementGetBounds(hTooltipText[iPad][uiTooltip], &fWidth, &fHeight);
|
|
XuiElementSetBounds(hTooltipText[iPad][uiTooltip], xuiRect.right,
|
|
fHeight);
|
|
|
|
hr = XuiTextPresenterMeasureText(hTooltipTextSmall[iPad][uiTooltip],
|
|
pString, &xuiRectSmall);
|
|
|
|
// Change the size of the whole button to be the width of the measured
|
|
// text, plus the position the text element starts in the visual (which
|
|
// is the offset by the size of the button graphic)
|
|
XuiElementGetBounds(m_ButtonsSmall[iPad][uiTooltip].m_hObj, &fWidth,
|
|
&fHeight);
|
|
XuiElementSetBounds(
|
|
m_ButtonsSmall[iPad][uiTooltip].m_hObj,
|
|
xuiRectSmall.right + 1 + m_vPosTextInTooltipSmall[uiTooltip].x,
|
|
fHeight);
|
|
|
|
// Change the width of the text element to be the width of the measured
|
|
// text
|
|
XuiElementGetBounds(hTooltipTextSmall[iPad][uiTooltip], &fWidth,
|
|
&fHeight);
|
|
XuiElementSetBounds(hTooltipTextSmall[iPad][uiTooltip],
|
|
xuiRectSmall.right, fHeight);
|
|
|
|
m_Buttons[iPad][uiTooltip].SetText(pString);
|
|
m_ButtonsSmall[iPad][uiTooltip].SetText(pString);
|
|
} else {
|
|
m_Buttons[iPad][uiTooltip].SetText(L"");
|
|
XuiElementGetBounds(m_Buttons[iPad][uiTooltip].m_hObj, &fWidth,
|
|
&fHeight);
|
|
XuiElementSetBounds(m_Buttons[iPad][uiTooltip].m_hObj,
|
|
m_vPosTextInTooltip[uiTooltip].x, fHeight);
|
|
|
|
m_ButtonsSmall[iPad][uiTooltip].SetText(L"");
|
|
XuiElementGetBounds(m_ButtonsSmall[iPad][uiTooltip].m_hObj, &fWidth,
|
|
&fHeight);
|
|
XuiElementSetBounds(m_ButtonsSmall[iPad][uiTooltip].m_hObj,
|
|
m_vPosTextInTooltipSmall[uiTooltip].x, fHeight);
|
|
}
|
|
|
|
m_iCurrentTooltipTextID[iPad][uiTooltip] = iTextID;
|
|
|
|
ReLayout(iPad);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_RefreshTooltips(unsigned int iPad) {
|
|
// if the tooltip is showing, refresh it to update the opacity
|
|
for (int tooltip = 0; tooltip < BUTTONS_TOOLTIP_MAX; tooltip++) {
|
|
if (m_Buttons[iPad][tooltip].IsShown() == TRUE) {
|
|
_ShowTooltip(iPad, tooltip, TRUE);
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowTooltip(unsigned int iPad, unsigned int tooltip,
|
|
bool show) {
|
|
ASSERT(tooltip < BUTTONS_TOOLTIP_MAX);
|
|
HRESULT hr;
|
|
|
|
if ((ProfileManager.GetLockedProfile() != -1) &&
|
|
app.GetGameSettings(iPad, eGameSetting_DisplayHUD) == 0) {
|
|
// hr = m_Buttons[iPad][tooltip].SetShow( FALSE );
|
|
// hr = m_ButtonsSmall[iPad][tooltip].SetShow( FALSE );
|
|
|
|
// turn off gamertag display in splitscreens
|
|
XuiElementSetShow(m_hGamerTagA[iPad], FALSE);
|
|
|
|
// m_visible[iPad][ tooltip ] = false;
|
|
}
|
|
// else
|
|
{
|
|
// check the app setting first (only if there is a player)
|
|
if ((ProfileManager.GetLockedProfile() == -1) ||
|
|
ui.GetMenuDisplayed(iPad) ||
|
|
(app.GetGameSettings(iPad, eGameSetting_Tooltips) == 1 &&
|
|
app.GetGameSettings(iPad, eGameSetting_DisplayHUD) != 0)) {
|
|
hr = m_Buttons[iPad][tooltip].SetShow(show ? TRUE : FALSE);
|
|
hr = m_ButtonsSmall[iPad][tooltip].SetShow(show ? TRUE : FALSE);
|
|
|
|
m_visible[iPad][tooltip] = show;
|
|
|
|
// if we have a player, use their opacity to set the tooltip
|
|
if (show && (ProfileManager.GetLockedProfile() != -1)) {
|
|
// set the opacity of the tooltip items
|
|
unsigned char ucAlpha =
|
|
app.GetGameSettings(ProfileManager.GetPrimaryPad(),
|
|
eGameSetting_InterfaceOpacity);
|
|
float fVal;
|
|
|
|
if (ucAlpha < 80) {
|
|
// if we are in a menu, set the minimum opacity for tooltips
|
|
// to 15%
|
|
if (ui.GetMenuDisplayed(iPad) && (ucAlpha < 15)) {
|
|
ucAlpha = 15;
|
|
}
|
|
|
|
// check if we have the timer running for the opacity
|
|
unsigned int uiOpacityTimer = app.GetOpacityTimer(iPad);
|
|
if (uiOpacityTimer != 0) {
|
|
if (uiOpacityTimer < 10) {
|
|
float fStep = (80.0f - (float)ucAlpha) / 10.0f;
|
|
fVal = 0.01f *
|
|
(80.0f -
|
|
((10.0f - (float)uiOpacityTimer) * fStep));
|
|
} else {
|
|
fVal = 0.01f * 80.0f;
|
|
}
|
|
} else {
|
|
fVal = 0.01f * (float)ucAlpha;
|
|
}
|
|
} else {
|
|
// if we are in a menu, set the minimum opacity for tooltips
|
|
// to 15%
|
|
if (ui.GetMenuDisplayed(iPad) && (ucAlpha < 15)) {
|
|
ucAlpha = 15;
|
|
}
|
|
fVal = 0.01f * (float)ucAlpha;
|
|
}
|
|
|
|
m_Buttons[iPad][tooltip].SetOpacity(fVal);
|
|
m_ButtonsSmall[iPad][tooltip].SetOpacity(fVal);
|
|
}
|
|
} else {
|
|
hr = m_Buttons[iPad][tooltip].SetShow(FALSE);
|
|
hr = m_ButtonsSmall[iPad][tooltip].SetShow(FALSE);
|
|
|
|
m_visible[iPad][tooltip] = false;
|
|
}
|
|
|
|
// also set the gamertags and the 4th quadrant logo
|
|
if (ProfileManager.GetLockedProfile() != -1) {
|
|
if (app.GetGameSettings(
|
|
iPad, eGameSetting_DisplaySplitscreenGamertags) == 1) {
|
|
unsigned char ucAlpha =
|
|
app.GetGameSettings(ProfileManager.GetPrimaryPad(),
|
|
eGameSetting_InterfaceOpacity);
|
|
float fVal;
|
|
|
|
if (ucAlpha < 80) {
|
|
// check if we have the timer running for the opacity
|
|
unsigned int uiOpacityTimer = app.GetOpacityTimer(iPad);
|
|
if (uiOpacityTimer != 0) {
|
|
if (uiOpacityTimer < 10) {
|
|
float fStep = (80.0f - (float)ucAlpha) / 10.0f;
|
|
fVal = 0.01f *
|
|
(80.0f -
|
|
((10.0f - (float)uiOpacityTimer) * fStep));
|
|
} else {
|
|
fVal = 0.01f * 80.0f;
|
|
}
|
|
} else {
|
|
fVal = 0.01f * (float)ucAlpha;
|
|
}
|
|
} else {
|
|
fVal = 0.01f * (float)ucAlpha;
|
|
}
|
|
XuiElementSetOpacity(m_hGamerTagA[iPad], fVal);
|
|
}
|
|
|
|
if (iPad == ProfileManager.GetPrimaryPad()) {
|
|
unsigned char ucAlpha =
|
|
app.GetGameSettings(ProfileManager.GetPrimaryPad(),
|
|
eGameSetting_InterfaceOpacity);
|
|
XuiElementSetOpacity(m_hEmptyQuadrantLogo,
|
|
0.01f * (float)ucAlpha);
|
|
}
|
|
}
|
|
}
|
|
|
|
ReLayout(iPad);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowSafeArea(bool show) {
|
|
return m_SafeArea.SetShow(show);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowOtherPlayersBaseScene(int iPad, bool show) {
|
|
for (int i = 0; i < XUSER_MAX_COUNT; ++i) {
|
|
if (i == iPad) {
|
|
m_BasePlayerScene[i].SetShow(TRUE);
|
|
|
|
// Fix for #61051 - TU7: Content: UI: Player specific unresponsive
|
|
// state may be triggered during the Save Game process in the
|
|
// splitscreen mode
|
|
m_BasePlayerScene[i].EnableInput(TRUE);
|
|
} else {
|
|
m_BasePlayerScene[i].SetShow(show ? TRUE : FALSE);
|
|
|
|
// Fix for #61051 - TU7: Content: UI: Player specific unresponsive
|
|
// state may be triggered during the Save Game process in the
|
|
// splitscreen mode
|
|
m_BasePlayerScene[i].EnableInput(show ? TRUE : FALSE);
|
|
}
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_SetTooltipsEnabled(unsigned int iPad, bool bA, bool bB,
|
|
bool bX, bool bY, bool bLT, bool bRT,
|
|
bool bLB, bool bRB, bool bLS) {
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_A].SetEnable(bA);
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_B].SetEnable(bB);
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_X].SetEnable(bX);
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_Y].SetEnable(bY);
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_LT].SetEnable(bLT);
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_RT].SetEnable(bRT);
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_LB].SetEnable(bLB);
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_RB].SetEnable(bRB);
|
|
m_Buttons[iPad][BUTTON_TOOLTIP_LS].SetEnable(bLS);
|
|
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_A].SetEnable(bA);
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_B].SetEnable(bB);
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_X].SetEnable(bX);
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_Y].SetEnable(bY);
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_LT].SetEnable(bLT);
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_RT].SetEnable(bRT);
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_LB].SetEnable(bLB);
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_RB].SetEnable(bRB);
|
|
m_ButtonsSmall[iPad][BUTTON_TOOLTIP_LS].SetEnable(bLS);
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_EnableTooltip(unsigned int iPad, unsigned int tooltip,
|
|
bool enable) {
|
|
ASSERT(tooltip < BUTTONS_TOOLTIP_MAX);
|
|
|
|
m_Buttons[iPad][tooltip].SetEnable(enable);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_AnimateKeyPress(unsigned int userIndex,
|
|
unsigned int keyCode) {
|
|
if (m_playerBaseScenePosition[userIndex] == e_BaseScene_NotSet) {
|
|
userIndex = DEFAULT_XUI_MENU_USER;
|
|
}
|
|
switch (keyCode) {
|
|
case VK_PAD_A:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_A].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_A].Press();
|
|
break;
|
|
case VK_PAD_B:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_B].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_B].Press();
|
|
break;
|
|
case VK_PAD_X:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_X].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_X].Press();
|
|
break;
|
|
case VK_PAD_Y:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_Y].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_Y].Press();
|
|
break;
|
|
case VK_PAD_LTRIGGER:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_LT].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_LT].Press();
|
|
break;
|
|
case VK_PAD_RTRIGGER:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_RT].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_RT].Press();
|
|
break;
|
|
case VK_PAD_LSHOULDER:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_LB].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_LB].Press();
|
|
break;
|
|
case VK_PAD_RSHOULDER:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_RB].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_RB].Press();
|
|
break;
|
|
case VK_PAD_LTHUMB_UP:
|
|
case VK_PAD_LTHUMB_DOWN:
|
|
case VK_PAD_LTHUMB_LEFT:
|
|
case VK_PAD_LTHUMB_RIGHT:
|
|
m_Buttons[userIndex][BUTTON_TOOLTIP_LS].Press();
|
|
m_ButtonsSmall[userIndex][BUTTON_TOOLTIP_LS].Press();
|
|
break;
|
|
#ifndef _CONTENT_PACKAGE
|
|
case VK_PAD_LTHUMB_PRESS:
|
|
app.ToggleFontRenderer();
|
|
break;
|
|
#endif
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowSavingMessage(unsigned int iPad,
|
|
C4JStorage::ESavingMessage eVal) {
|
|
switch (eVal) {
|
|
case C4JStorage::ESavingMessage_None:
|
|
XuiElementSetShow(m_SavingIcon, FALSE);
|
|
break;
|
|
case C4JStorage::ESavingMessage_Short:
|
|
case C4JStorage::ESavingMessage_Long:
|
|
XuiElementSetShow(m_SavingIcon, TRUE);
|
|
break;
|
|
}
|
|
|
|
// Not needed - ReLayout(iPad);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowBackground(unsigned int iPad, bool show) {
|
|
HRESULT hr;
|
|
Minecraft* pMinecraft = Minecraft::GetInstance();
|
|
|
|
// if(app.GetGameSettingsDebugMask(iPad) &&
|
|
// app.GetGameSettingsDebugMask()&(1L<<eDebugSetting_LightDarkBackground))
|
|
{
|
|
// get the visual
|
|
HXUIOBJ hVisual, hNight, hDay;
|
|
hr = XuiControlGetVisual(m_Background[iPad], &hVisual);
|
|
hr = XuiElementGetChildById(hVisual, L"NightGroup", &hNight);
|
|
hr = XuiElementGetChildById(hVisual, L"DayGroup", &hDay);
|
|
|
|
if (show && pMinecraft->level != NULL) {
|
|
__int64 i64TimeOfDay = 0;
|
|
// are we in the Nether? - Leave the time as 0 if we are, so we show
|
|
// daylight
|
|
if (pMinecraft->level->dimension->id == 0) {
|
|
i64TimeOfDay =
|
|
pMinecraft->level->getLevelData()->getTime() % 24000;
|
|
}
|
|
|
|
if (i64TimeOfDay > 14000) {
|
|
hr = XuiElementSetShow(hNight, TRUE);
|
|
hr = XuiElementSetShow(hDay, FALSE);
|
|
} else {
|
|
hr = XuiElementSetShow(hNight, FALSE);
|
|
hr = XuiElementSetShow(hDay, TRUE);
|
|
}
|
|
} else {
|
|
hr = XuiElementSetShow(hNight, FALSE);
|
|
hr = XuiElementSetShow(hDay, TRUE);
|
|
}
|
|
}
|
|
hr = XuiElementSetShow(m_Background[iPad], show);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowDarkOverlay(unsigned int iPad, bool show) {
|
|
return XuiElementSetShow(m_DarkOverlay[iPad], show);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowLogo(unsigned int iPad, bool show) {
|
|
return XuiElementSetShow(m_Logo[iPad], show);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowPressStart(unsigned int iPad) {
|
|
XUIRect xuiRect;
|
|
LPCWSTR pString = app.GetString(IDS_PRESS_START_TO_JOIN);
|
|
;
|
|
float fWidth, fHeight, fWidthChange;
|
|
|
|
XuiSetTimer(m_hObj, PRESS_START_TIMER, 3000);
|
|
m_iQuadrantsMask |= 1 << iPad;
|
|
|
|
m_PressStart.SetShow(TRUE);
|
|
// retrieve the visual for this quadrant
|
|
|
|
HXUIOBJ hObj = NULL, hQuadrant;
|
|
HRESULT hr = XuiControlGetVisual(m_PressStart.m_hObj, &hObj);
|
|
hr = XuiElementGetChildById(hObj, L"text_ButtonText", &hQuadrant);
|
|
memset(&xuiRect, 0, sizeof(xuiRect));
|
|
hr = XuiTextPresenterMeasureText(hQuadrant, pString, &xuiRect);
|
|
|
|
XuiElementGetBounds(hQuadrant, &fWidth, &fHeight);
|
|
fWidthChange = xuiRect.right - fWidth;
|
|
|
|
// get the size of the button, and apply the change in size due to the text
|
|
// to the whole button
|
|
XuiElementGetBounds(m_PressStart.m_hObj, &fWidth, &fHeight);
|
|
|
|
XuiElementSetBounds(m_PressStart.m_hObj, fWidth + fWidthChange, fHeight);
|
|
|
|
switch (iPad) {
|
|
case 0:
|
|
hr = XuiElementGetChildById(hObj, L"Quadrant1", &hQuadrant);
|
|
break;
|
|
case 1:
|
|
hr = XuiElementGetChildById(hObj, L"Quadrant2", &hQuadrant);
|
|
break;
|
|
case 2:
|
|
hr = XuiElementGetChildById(hObj, L"Quadrant3", &hQuadrant);
|
|
break;
|
|
case 3:
|
|
hr = XuiElementGetChildById(hObj, L"Quadrant4", &hQuadrant);
|
|
break;
|
|
}
|
|
|
|
XuiElementSetShow(hQuadrant, TRUE);
|
|
int nStart, nEnd;
|
|
// XuiElementFindNamedFrame( m_hObj, L"StartFlash", &nStart );
|
|
// XuiElementFindNamedFrame( m_hObj, L"EndFlash", &nEnd );
|
|
// XuiElementPlayTimeline( m_hObj, nStart, nStart, nEnd, TRUE, TRUE );
|
|
XuiElementFindNamedFrame(hObj, L"StartFlash", &nStart);
|
|
XuiElementFindNamedFrame(hObj, L"EndFlash", &nEnd);
|
|
XuiElementPlayTimeline(hObj, nStart, nStart, nEnd, TRUE, TRUE);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_HidePressStart() { return m_PressStart.SetShow(FALSE); }
|
|
|
|
HRESULT CXuiSceneBase::_UpdateAutosaveCountdownTimer(unsigned int uiSeconds) {
|
|
WCHAR wcAutosaveCountdown[100];
|
|
swprintf(wcAutosaveCountdown, 100, app.GetString(IDS_AUTOSAVE_COUNTDOWN),
|
|
uiSeconds);
|
|
m_TrialTimer.SetText(wcAutosaveCountdown);
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowAutosaveCountdownTimer(bool show) {
|
|
m_TrialTimer.SetShow(show);
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_UpdateTrialTimer(unsigned int iPad) {
|
|
WCHAR wcTime[20];
|
|
|
|
unsigned int trialTimeTicks =
|
|
static_cast<unsigned int>(app.getTrialTimer());
|
|
|
|
if (trialTimeTicks > m_trialTimerLimitSecs) {
|
|
trialTimeTicks = m_trialTimerLimitSecs;
|
|
}
|
|
|
|
trialTimeTicks = m_trialTimerLimitSecs - trialTimeTicks;
|
|
|
|
#ifndef _CONTENT_PACKAGE
|
|
if (true)
|
|
#else
|
|
// display the time - only if there's less than 3 minutes
|
|
if (trialTimeTicks < 180)
|
|
#endif
|
|
{
|
|
int iMins = trialTimeTicks / 60;
|
|
int iSeconds = trialTimeTicks % 60;
|
|
swprintf(wcTime, 20, L"%d:%02d", iMins, iSeconds);
|
|
m_TrialTimer.SetText(wcTime);
|
|
} else {
|
|
m_TrialTimer.SetText(L"");
|
|
}
|
|
|
|
// are we out of time?
|
|
if (trialTimeTicks == 0) {
|
|
// Trial over
|
|
app.SetAction(iPad, eAppAction_TrialOver);
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
void CXuiSceneBase::_ReduceTrialTimerValue() {
|
|
unsigned int trialTimeTicks =
|
|
static_cast<unsigned int>(app.getTrialTimer());
|
|
|
|
if (trialTimeTicks > m_trialTimerLimitSecs) {
|
|
trialTimeTicks = m_trialTimerLimitSecs;
|
|
}
|
|
|
|
m_trialTimerLimitSecs -= trialTimeTicks;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_ShowTrialTimer(bool show) {
|
|
m_TrialTimer.SetShow(show);
|
|
return S_OK;
|
|
}
|
|
|
|
bool CXuiSceneBase::_PressStartPlaying(unsigned int iPad) {
|
|
return m_iQuadrantsMask & (1 << iPad) ? true : false;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_SetPlayerBaseScenePosition(
|
|
unsigned int iPad, EBaseScenePosition position) {
|
|
// turn off the empty quadrant logo
|
|
if (m_hEmptyQuadrantLogo != NULL) {
|
|
XuiElementSetShow(m_hEmptyQuadrantLogo, FALSE);
|
|
}
|
|
|
|
// No changes
|
|
if (m_playerBaseScenePosition[iPad] == position) return S_OK;
|
|
|
|
m_selectedItemA[iPad].SetShow(FALSE);
|
|
m_selectedItemSmallA[iPad].SetShow(FALSE);
|
|
|
|
if (position == e_BaseScene_NotSet) {
|
|
m_playerBaseScenePosition[iPad] = position;
|
|
return S_OK;
|
|
}
|
|
|
|
D3DXVECTOR3 scale, pos; //,currentpos;
|
|
// Shift the tooltips
|
|
D3DXVECTOR3 tooltipsPos, crouchIconPos, saveIconPos, vBackPos, vGamertagPos,
|
|
vBossHealthPos;
|
|
tooltipsPos.z = crouchIconPos.z = saveIconPos.z = vBackPos.z =
|
|
vBossHealthPos.z = 0.0f;
|
|
vBackPos.x = 0.0f;
|
|
vBackPos.y = 0.0f;
|
|
|
|
m_playerBaseScenePosition[iPad] = position;
|
|
float fTempWidth, fTooltipHeight, fTooltipHeightSmall, fGamertagWidth,
|
|
fGamertagHeight, fBossHealthWidth, fBossHealthHeight;
|
|
float fBackWidth, fBackHeight;
|
|
// Reset the players base scene before we make any other adjustments
|
|
pos.x = 0.0f;
|
|
pos.y = 0.0f;
|
|
pos.z = 0.0f;
|
|
XuiElementSetPosition(m_BasePlayerScene[iPad], &pos);
|
|
XuiElementGetBounds(m_TooltipGroup[iPad].m_hObj, &fTempWidth,
|
|
&fTooltipHeight);
|
|
XuiElementGetBounds(m_TooltipGroupSmall[iPad].m_hObj, &fTempWidth,
|
|
&fTooltipHeightSmall);
|
|
XuiElementGetBounds(m_Background[iPad].m_hObj, &fBackWidth, &fBackHeight);
|
|
XuiElementGetBounds(m_hGamerTagA[iPad], &fGamertagWidth, &fGamertagHeight);
|
|
XuiElementGetBounds(m_BossHealthGroup[iPad], &fBossHealthWidth,
|
|
&fBossHealthHeight);
|
|
|
|
if (position == e_BaseScene_Fullscreen &&
|
|
(RenderManager.IsHiDef() || RenderManager.IsWidescreen())) {
|
|
XuiElementSetShow(m_TooltipGroup[iPad].m_hObj, TRUE);
|
|
XuiElementSetShow(m_TooltipGroupSmall[iPad].m_hObj, FALSE);
|
|
} else {
|
|
XuiElementSetShow(m_TooltipGroup[iPad].m_hObj, FALSE);
|
|
XuiElementSetShow(m_TooltipGroupSmall[iPad].m_hObj, TRUE);
|
|
}
|
|
|
|
if (!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) {
|
|
// 640x480 ->1280x720
|
|
scale.x = 2.0f;
|
|
scale.y = 1.5f;
|
|
scale.z = 1.0f;
|
|
XuiElementSetScale(m_hObj, &scale);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
if (position != e_BaseScene_Fullscreen) {
|
|
// Scale up the tooltips so we can read them
|
|
/*
|
|
scale.x = 0.75f; scale.y = 0.75f; scale.z = 1.0f;
|
|
XuiElementSetScale(m_TooltipGroup[iPad], &scale);
|
|
fTooltipHeight*=scale.y;
|
|
*/
|
|
fTooltipHeight = fTooltipHeightSmall;
|
|
|
|
scale.x = 0.5f;
|
|
scale.y = 0.5f;
|
|
scale.z = 1.0f;
|
|
XuiElementSetScale(m_CrouchIcon[iPad], &scale);
|
|
XuiElementSetScale(m_Logo[iPad].m_hObj, &scale);
|
|
} else {
|
|
// if we are not in high def mode, then we need to scale the
|
|
// m_BasePlayerScene scene by 2 (we're using the 640x360 scenes)
|
|
scale.x = 1.0f;
|
|
scale.y = 1.0f;
|
|
scale.z = 1.0f;
|
|
XuiElementSetScale(m_BasePlayerScene[iPad], &scale);
|
|
XuiElementSetScale(m_TooltipGroup[iPad], &scale);
|
|
XuiElementSetScale(m_CrouchIcon[iPad], &scale);
|
|
XuiElementSetScale(m_Logo[iPad].m_hObj, &scale);
|
|
}
|
|
|
|
// The move applies to the whole scene, so we'll need to move tooltips back
|
|
// in some cases
|
|
switch (position) {
|
|
// No position adjustment
|
|
case e_BaseScene_Fullscreen:
|
|
tooltipsPos.x = SAFEZONE_HALF_WIDTH;
|
|
tooltipsPos.y =
|
|
XUI_BASE_SCENE_HEIGHT - SAFEZONE_HALF_HEIGHT - fTooltipHeight;
|
|
crouchIconPos.x = SAFEZONE_HALF_WIDTH;
|
|
crouchIconPos.y = SAFEZONE_HALF_HEIGHT;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT;
|
|
|
|
XuiElementGetPosition(m_selectedItemA[iPad], &vBossHealthPos);
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_HALF - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y = SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
case e_BaseScene_Top_Left:
|
|
tooltipsPos.x = SAFEZONE_HALF_WIDTH;
|
|
tooltipsPos.y = XUI_BASE_SCENE_HEIGHT_HALF - fTooltipHeight;
|
|
crouchIconPos.x = SAFEZONE_HALF_WIDTH;
|
|
crouchIconPos.y = SAFEZONE_HALF_HEIGHT;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH_HALF;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
vGamertagPos.x = XUI_BASE_SCENE_WIDTH_HALF - fGamertagWidth - 10.0f;
|
|
vGamertagPos.y = SAFEZONE_HALF_HEIGHT;
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y = SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
case e_BaseScene_Top: // Top & Bottom - indent by a quarter screen
|
|
pos.x += XUI_BASE_SCENE_WIDTH_QUARTER;
|
|
tooltipsPos.x = SAFEZONE_HALF_WIDTH - XUI_BASE_SCENE_WIDTH_QUARTER;
|
|
tooltipsPos.y = XUI_BASE_SCENE_HEIGHT_HALF - fTooltipHeight;
|
|
crouchIconPos.x =
|
|
SAFEZONE_HALF_WIDTH - XUI_BASE_SCENE_WIDTH_QUARTER;
|
|
crouchIconPos.y = SAFEZONE_HALF_HEIGHT;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH;
|
|
vBackPos.x = -XUI_BASE_SCENE_WIDTH_QUARTER;
|
|
vBackPos.y = 0.0f;
|
|
vGamertagPos.x = XUI_BASE_SCENE_WIDTH -
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - fGamertagWidth -
|
|
SAFEZONE_HALF_WIDTH;
|
|
vGamertagPos.y = SAFEZONE_HALF_HEIGHT;
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y = SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
case e_BaseScene_Bottom:
|
|
pos.x += XUI_BASE_SCENE_WIDTH_QUARTER;
|
|
pos.y += XUI_BASE_SCENE_HEIGHT_HALF;
|
|
tooltipsPos.x = SAFEZONE_HALF_WIDTH - XUI_BASE_SCENE_WIDTH_QUARTER;
|
|
tooltipsPos.y = XUI_BASE_SCENE_HEIGHT_HALF - SAFEZONE_HALF_HEIGHT -
|
|
fTooltipHeight;
|
|
crouchIconPos.x =
|
|
SAFEZONE_HALF_WIDTH - XUI_BASE_SCENE_WIDTH_QUARTER;
|
|
crouchIconPos.y = 0.0f;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH;
|
|
vBackPos.x = -XUI_BASE_SCENE_WIDTH_QUARTER;
|
|
vBackPos.y = 0.0f;
|
|
vGamertagPos.x = XUI_BASE_SCENE_WIDTH -
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - fGamertagWidth -
|
|
SAFEZONE_HALF_WIDTH;
|
|
vGamertagPos.y = 0.0f;
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y = 0.0f;
|
|
break;
|
|
case e_BaseScene_Bottom_Left:
|
|
pos.y += XUI_BASE_SCENE_HEIGHT_HALF;
|
|
tooltipsPos.x = SAFEZONE_HALF_WIDTH;
|
|
tooltipsPos.y = XUI_BASE_SCENE_HEIGHT_HALF - SAFEZONE_HALF_HEIGHT -
|
|
fTooltipHeight;
|
|
crouchIconPos.x = SAFEZONE_HALF_WIDTH;
|
|
crouchIconPos.y = 0.0f;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH_HALF;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
vGamertagPos.x = XUI_BASE_SCENE_WIDTH_HALF - fGamertagWidth - 10.0f;
|
|
vGamertagPos.y = 0.0f;
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y = 0.0f;
|
|
break;
|
|
case e_BaseScene_Bottom_Right:
|
|
pos.x += XUI_BASE_SCENE_WIDTH_HALF;
|
|
pos.y += XUI_BASE_SCENE_HEIGHT_HALF;
|
|
tooltipsPos.x = 0.0f;
|
|
tooltipsPos.y = XUI_BASE_SCENE_HEIGHT_HALF - SAFEZONE_HALF_HEIGHT -
|
|
fTooltipHeight;
|
|
crouchIconPos.x = 0.0f;
|
|
crouchIconPos.y = 0.0f;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH_HALF;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
vGamertagPos.x = XUI_BASE_SCENE_WIDTH_HALF - fGamertagWidth -
|
|
SAFEZONE_HALF_WIDTH;
|
|
vGamertagPos.y = 0.0f;
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y = 0.0f;
|
|
break;
|
|
case e_BaseScene_Left:
|
|
pos.y += XUI_BASE_SCENE_HEIGHT_QUARTER;
|
|
tooltipsPos.x = SAFEZONE_HALF_WIDTH;
|
|
tooltipsPos.y = XUI_BASE_SCENE_HEIGHT_HALF +
|
|
XUI_BASE_SCENE_HEIGHT_QUARTER -
|
|
SAFEZONE_HALF_HEIGHT - fTooltipHeight;
|
|
crouchIconPos.x = SAFEZONE_HALF_WIDTH;
|
|
crouchIconPos.y = SAFEZONE_HALF_HEIGHT;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH_HALF;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT;
|
|
vBackPos.x = 0.0f;
|
|
vBackPos.y = -XUI_BASE_SCENE_HEIGHT_QUARTER;
|
|
vGamertagPos.x = XUI_BASE_SCENE_WIDTH_HALF - fGamertagWidth - 10.0f;
|
|
vGamertagPos.y =
|
|
SAFEZONE_HALF_HEIGHT - XUI_BASE_SCENE_HEIGHT_QUARTER;
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y =
|
|
SAFEZONE_HALF_HEIGHT - XUI_BASE_SCENE_HEIGHT_QUARTER;
|
|
break;
|
|
case e_BaseScene_Right:
|
|
pos.x += XUI_BASE_SCENE_WIDTH_HALF;
|
|
pos.y += XUI_BASE_SCENE_HEIGHT_QUARTER;
|
|
tooltipsPos.x = 0.0f;
|
|
tooltipsPos.y = XUI_BASE_SCENE_HEIGHT_HALF +
|
|
XUI_BASE_SCENE_HEIGHT_QUARTER -
|
|
SAFEZONE_HALF_HEIGHT - fTooltipHeight;
|
|
crouchIconPos.x = 0.0f;
|
|
crouchIconPos.y = SAFEZONE_HALF_HEIGHT;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH_HALF;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT;
|
|
vBackPos.x = 0.0f;
|
|
vBackPos.y = -XUI_BASE_SCENE_HEIGHT_QUARTER;
|
|
vGamertagPos.x = XUI_BASE_SCENE_WIDTH_HALF - fGamertagWidth -
|
|
SAFEZONE_HALF_WIDTH;
|
|
vGamertagPos.y =
|
|
SAFEZONE_HALF_HEIGHT - XUI_BASE_SCENE_HEIGHT_QUARTER;
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y =
|
|
SAFEZONE_HALF_HEIGHT - XUI_BASE_SCENE_HEIGHT_QUARTER;
|
|
break;
|
|
case e_BaseScene_Top_Right:
|
|
pos.x += XUI_BASE_SCENE_WIDTH_HALF;
|
|
tooltipsPos.x = 0.0f;
|
|
tooltipsPos.y = XUI_BASE_SCENE_HEIGHT_HALF - fTooltipHeight;
|
|
crouchIconPos.x = 0.0f;
|
|
crouchIconPos.y = SAFEZONE_HALF_HEIGHT;
|
|
fBackWidth = XUI_BASE_SCENE_WIDTH_HALF;
|
|
fBackHeight = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
vGamertagPos.x = XUI_BASE_SCENE_WIDTH_HALF - fGamertagWidth -
|
|
SAFEZONE_HALF_WIDTH;
|
|
vGamertagPos.y = SAFEZONE_HALF_HEIGHT;
|
|
vBossHealthPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fBossHealthWidth / 2);
|
|
vBossHealthPos.y = SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
}
|
|
|
|
XuiElementSetPosition(m_BasePlayerScene[iPad], &pos);
|
|
XuiElementSetPosition(m_TooltipGroup[iPad].m_hObj, &tooltipsPos);
|
|
XuiElementSetPosition(m_TooltipGroupSmall[iPad].m_hObj, &tooltipsPos);
|
|
XuiElementSetPosition(m_CrouchIcon[iPad].m_hObj, &crouchIconPos);
|
|
XuiElementSetPosition(m_DarkOverlay[iPad].m_hObj, &vBackPos);
|
|
XuiElementSetBounds(m_DarkOverlay[iPad].m_hObj, fBackWidth, fBackHeight);
|
|
XuiElementSetPosition(m_Background[iPad].m_hObj, &vBackPos);
|
|
XuiElementSetBounds(m_Background[iPad].m_hObj, fBackWidth, fBackHeight);
|
|
vGamertagPos.z = 0.0f;
|
|
XuiElementSetPosition(m_hGamerTagA[iPad], &vGamertagPos);
|
|
XuiElementSetPosition(m_BossHealthGroup[iPad], &vBossHealthPos);
|
|
|
|
// 4J Stu - If we already have some scenes open, then call this to update
|
|
// their positions Fix for #10960 - All Lang: UI: Split-screen: Changing
|
|
// split screen mode (vertical/horizontal) make window layout strange
|
|
if (Minecraft::GetInstance() != NULL &&
|
|
Minecraft::GetInstance()->localplayers[iPad] != NULL) {
|
|
// 4J-PB - Can only do this once we know what the player's UI settings
|
|
// are, so we need to have the player game settings read
|
|
_UpdateSelectedItemPos(iPad);
|
|
XUIMessage xuiMsg;
|
|
CustomMessage_Splitscreenplayer_Struct myMsgData;
|
|
CustomMessage_Splitscreenplayer(&xuiMsg, &myMsgData, false);
|
|
XuiBroadcastMessage(GetPlayerBaseScene(iPad), &xuiMsg);
|
|
}
|
|
// tell the xui scenes that the base position has changed
|
|
XUIMessage xuiMsg;
|
|
CustomMessage_BasePositionChanged(&xuiMsg);
|
|
XuiBroadcastMessage(GetPlayerBaseScene(iPad), &xuiMsg);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
// The function uses the game mode to decide the offsets for the select item. It
|
|
// needs to be called after the game has loaded.
|
|
void CXuiSceneBase::_UpdateSelectedItemPos(unsigned int iPad) {
|
|
D3DXVECTOR3 selectedItemPos;
|
|
selectedItemPos.x = selectedItemPos.y = selectedItemPos.z = 0.0f;
|
|
float fSelectedItemWidth, fSelectedItemHeight;
|
|
XuiElementGetBounds(m_selectedItemSmallA[iPad], &fSelectedItemWidth,
|
|
&fSelectedItemHeight);
|
|
|
|
float yOffset = 0.0f;
|
|
|
|
if (m_bossHealthVisible[iPad] == TRUE) {
|
|
float tempWidth;
|
|
XuiElementGetBounds(m_BossHealthGroup[iPad], &tempWidth, &yOffset);
|
|
}
|
|
|
|
// Only adjust if fullscreen for now, leaving code to move others if
|
|
// required, but it's too far up the screen when on the bottom quadrants
|
|
if ((m_playerBaseScenePosition[iPad] == e_BaseScene_Fullscreen) &&
|
|
(RenderManager.IsHiDef() || RenderManager.IsWidescreen())) {
|
|
D3DXVECTOR3 selectedItemPos;
|
|
selectedItemPos.z = 0.0f;
|
|
float scale, fTempWidth, fTooltipHeight, fTooltipHeightSmall,
|
|
fSelectedItemWidth, fSelectedItemHeight, fSelectedItemSmallWidth,
|
|
fSelectedItemSmallHeight;
|
|
XuiElementGetBounds(m_TooltipGroup[iPad].m_hObj, &fTempWidth,
|
|
&fTooltipHeight);
|
|
XuiElementGetBounds(m_TooltipGroupSmall[iPad].m_hObj, &fTempWidth,
|
|
&fTooltipHeightSmall);
|
|
XuiElementGetBounds(m_selectedItemA[iPad], &fSelectedItemWidth,
|
|
&fSelectedItemHeight);
|
|
XuiElementGetBounds(m_selectedItemSmallA[iPad],
|
|
&fSelectedItemSmallWidth,
|
|
&fSelectedItemSmallHeight);
|
|
if (m_playerBaseScenePosition[iPad] != e_BaseScene_Fullscreen) {
|
|
fTooltipHeight = fTooltipHeightSmall;
|
|
fSelectedItemHeight = fSelectedItemSmallHeight;
|
|
|
|
scale = 0.5f;
|
|
} else {
|
|
// if we are not in high def mode, then we need to scale the
|
|
// m_BasePlayerScene scene by 2 (we're using the 640x360 scenes)
|
|
scale = 1.0f;
|
|
}
|
|
|
|
// The move applies to the whole scene, so we'll need to move tooltips
|
|
// back in some cases
|
|
|
|
selectedItemPos.y = XUI_BASE_SCENE_HEIGHT - SAFEZONE_HALF_HEIGHT -
|
|
fTooltipHeight - fSelectedItemHeight;
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_HALF - (fSelectedItemWidth / 2.0f);
|
|
|
|
// Adjust selectedItemPos based on what gui is displayed
|
|
|
|
// 4J-PB - selected the gui scale based on the slider settings, and on
|
|
// whether we're in Creative or Survival
|
|
float fYOffset = 0.0f;
|
|
|
|
unsigned char ucGuiScale =
|
|
app.GetGameSettings(iPad, eGameSetting_UISize) + 2;
|
|
|
|
if (Minecraft::GetInstance() != NULL &&
|
|
Minecraft::GetInstance()->localgameModes[iPad] != NULL &&
|
|
Minecraft::GetInstance()->localgameModes[iPad]->canHurtPlayer()) {
|
|
// SURVIVAL MODE - Move up further because of hearts, shield and xp
|
|
switch (ucGuiScale) {
|
|
case 3:
|
|
fYOffset = -130.0f;
|
|
break;
|
|
case 4:
|
|
fYOffset = -168.0f;
|
|
break;
|
|
default: // 2
|
|
fYOffset = -94.0f;
|
|
break;
|
|
}
|
|
} else {
|
|
switch (ucGuiScale) {
|
|
case 3:
|
|
fYOffset = -83.0f;
|
|
break;
|
|
case 4:
|
|
fYOffset = -114.0f;
|
|
break;
|
|
default: // 2
|
|
fYOffset = -58.0f;
|
|
break;
|
|
}
|
|
}
|
|
|
|
selectedItemPos.y += fYOffset - 40.0f; // 40 for the XP display
|
|
|
|
XuiElementSetPosition(m_selectedItemA[iPad].m_hObj, &selectedItemPos);
|
|
|
|
// XuiElementSetPosition( m_selectedItemSmallA[iPad].m_hObj,
|
|
// &selectedItemPos );
|
|
} else {
|
|
// The move applies to the whole scene, so we'll need to move tooltips
|
|
// back in some cases
|
|
switch (m_playerBaseScenePosition[iPad]) {
|
|
case e_BaseScene_Fullscreen:
|
|
// 480 non-widescreen
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y = SAFEZONE_HALF_HEIGHT + yOffset;
|
|
break;
|
|
case e_BaseScene_Top_Left:
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y = SAFEZONE_HALF_HEIGHT + yOffset;
|
|
break;
|
|
case e_BaseScene_Top: // Top & Bottom - indent by a quarter screen
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y = SAFEZONE_HALF_HEIGHT + yOffset;
|
|
break;
|
|
case e_BaseScene_Bottom:
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y = 0.0f + yOffset;
|
|
break;
|
|
case e_BaseScene_Bottom_Left:
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y = 0.0f + yOffset;
|
|
break;
|
|
case e_BaseScene_Bottom_Right:
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y = 0.0f + yOffset;
|
|
break;
|
|
case e_BaseScene_Left:
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y =
|
|
XUI_BASE_SCENE_HEIGHT_HALF; // + yOffset; - don't need the
|
|
// offset for the boss health
|
|
// since we're displaying the
|
|
// item at the bottom of the
|
|
// screen, not the top
|
|
break;
|
|
case e_BaseScene_Right:
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y =
|
|
XUI_BASE_SCENE_HEIGHT_HALF; // + yOffset; - don't need the
|
|
// offset for the boss health
|
|
// since we're displaying the
|
|
// item at the bottom of the
|
|
// screen, not the top
|
|
break;
|
|
case e_BaseScene_Top_Right:
|
|
selectedItemPos.x =
|
|
XUI_BASE_SCENE_WIDTH_QUARTER - (fSelectedItemWidth / 2.0f);
|
|
selectedItemPos.y = SAFEZONE_HALF_HEIGHT + yOffset;
|
|
break;
|
|
}
|
|
|
|
// 4J-PB - If it's in split screen vertical, adjust the position
|
|
// Adjust selectedItemPos based on what gui is displayed
|
|
if ((m_playerBaseScenePosition[iPad] == e_BaseScene_Left) ||
|
|
(m_playerBaseScenePosition[iPad] == e_BaseScene_Right)) {
|
|
float scale = 0.5f;
|
|
selectedItemPos.y -= (scale * 88.0f);
|
|
if (Minecraft::GetInstance() != NULL &&
|
|
Minecraft::GetInstance()->localgameModes[iPad] != NULL &&
|
|
Minecraft::GetInstance()
|
|
->localgameModes[iPad]
|
|
->canHurtPlayer()) {
|
|
selectedItemPos.y -= (scale * 80.0f);
|
|
}
|
|
|
|
// 4J-PB - selected the gui scale based on the slider settings
|
|
unsigned char ucGuiScale;
|
|
float fYOffset = 0.0f;
|
|
if (m_playerBaseScenePosition[iPad] == e_BaseScene_Fullscreen) {
|
|
ucGuiScale = app.GetGameSettings(iPad, eGameSetting_UISize) + 2;
|
|
} else {
|
|
ucGuiScale =
|
|
app.GetGameSettings(iPad, eGameSetting_UISizeSplitscreen) +
|
|
2;
|
|
}
|
|
switch (ucGuiScale) {
|
|
case 3:
|
|
fYOffset = 55.0f;
|
|
break;
|
|
case 4:
|
|
fYOffset = 45.0f;
|
|
break;
|
|
default: // 2
|
|
fYOffset = 85.0f;
|
|
break;
|
|
}
|
|
selectedItemPos.y += fYOffset;
|
|
}
|
|
|
|
XuiElementSetPosition(m_selectedItemSmallA[iPad].m_hObj,
|
|
&selectedItemPos);
|
|
XuiElementSetPosition(m_selectedItemA[iPad].m_hObj, &selectedItemPos);
|
|
}
|
|
}
|
|
|
|
CXuiSceneBase::EBaseScenePosition CXuiSceneBase::_GetPlayerBasePosition(
|
|
int iPad) {
|
|
return m_playerBaseScenePosition[iPad];
|
|
}
|
|
|
|
void CXuiSceneBase::_SetEmptyQuadrantLogo(int iPad, EBaseScenePosition ePos) {
|
|
if (m_hEmptyQuadrantLogo != NULL) {
|
|
for (unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) {
|
|
if (m_playerBaseScenePosition[i] == e_BaseScene_Fullscreen) {
|
|
// Someone is fullscreen, so don't show this
|
|
XuiElementSetShow(m_hEmptyQuadrantLogo, FALSE);
|
|
return;
|
|
}
|
|
}
|
|
|
|
D3DXVECTOR3 pos;
|
|
|
|
// get the bounds of the logo
|
|
|
|
pos.z = 0.0f;
|
|
switch (ePos) {
|
|
case e_BaseScene_Top_Left:
|
|
pos.x = 64.0f;
|
|
pos.y = 36.0f;
|
|
break;
|
|
case e_BaseScene_Top_Right:
|
|
pos.x = 640.0 + 64.0f;
|
|
pos.y = 36.0f;
|
|
break;
|
|
case e_BaseScene_Bottom_Left:
|
|
pos.x = 64.0f;
|
|
pos.y = 360.0f + 36.0f;
|
|
break;
|
|
case e_BaseScene_Bottom_Right:
|
|
pos.x = 640.0 + 64.0f;
|
|
pos.y = 360.0f + 36.0f;
|
|
break;
|
|
}
|
|
|
|
// set the opacity of the logo
|
|
if (ProfileManager.GetLockedProfile() != -1) {
|
|
unsigned char ucAlpha = app.GetGameSettings(
|
|
ProfileManager.GetPrimaryPad(), eGameSetting_InterfaceOpacity);
|
|
XuiElementSetOpacity(m_hEmptyQuadrantLogo, 0.01f * (float)ucAlpha);
|
|
}
|
|
|
|
XuiElementSetPosition(m_hEmptyQuadrantLogo, &pos);
|
|
XuiElementSetShow(m_hEmptyQuadrantLogo, TRUE);
|
|
}
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_PlayUISFX(ESoundEffect eSound) {
|
|
HRESULT hr;
|
|
bool bUsingTexturepackWithAudio = false;
|
|
|
|
// are we using a mash-up pack?
|
|
if (!Minecraft::GetInstance()->skins->isUsingDefaultSkin()) {
|
|
TexturePack* tPack = Minecraft::GetInstance()->skins->getSelected();
|
|
if (tPack->hasAudio()) {
|
|
bUsingTexturepackWithAudio = true;
|
|
}
|
|
}
|
|
|
|
/*if(bUsingTexturepackWithAudio)
|
|
{
|
|
switch(eSound)
|
|
{
|
|
case eSFX_Back:
|
|
hr=XuiSoundPlay(m_SFXA[eSFX_Craft]);
|
|
break;
|
|
case eSFX_Craft:
|
|
hr=XuiSoundPlay(m_SFXA[eSFX_Craft]);
|
|
break;
|
|
case eSFX_CraftFail:
|
|
hr=XuiSoundPlay(m_SFXA[eSFX_Craft]);
|
|
break;
|
|
case eSFX_Focus:
|
|
hr=XuiSoundPlay(m_SFXA[eSFX_Craft]);
|
|
break;
|
|
case eSFX_Press:
|
|
hr=XuiSoundPlay(m_SFXA[eSFX_Craft]);
|
|
break;
|
|
case eSFX_Scroll:
|
|
hr=XuiSoundPlay(m_SFXA[eSFX_Craft]);
|
|
break;
|
|
default:
|
|
hr=S_OK;
|
|
break;
|
|
}
|
|
}
|
|
else*/
|
|
{
|
|
switch (eSound) {
|
|
case eSFX_Back:
|
|
hr = XuiSoundPlay(m_SFXA[eSFX_Back]);
|
|
break;
|
|
case eSFX_Craft:
|
|
hr = XuiSoundPlay(m_SFXA[eSFX_Craft]);
|
|
break;
|
|
case eSFX_CraftFail:
|
|
hr = XuiSoundPlay(m_SFXA[eSFX_CraftFail]);
|
|
break;
|
|
case eSFX_Focus:
|
|
hr = XuiSoundPlay(m_SFXA[eSFX_Focus]);
|
|
break;
|
|
case eSFX_Press:
|
|
hr = XuiSoundPlay(m_SFXA[eSFX_Press]);
|
|
break;
|
|
case eSFX_Scroll:
|
|
hr = XuiSoundPlay(m_SFXA[eSFX_Scroll]);
|
|
break;
|
|
default:
|
|
hr = S_OK;
|
|
break;
|
|
}
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::_DisplayGamertag(unsigned int iPad, bool display) {
|
|
if (app.DebugSettingsOn() && (app.GetGameSettingsDebugMask() &
|
|
(1L << eDebugSetting_DebugLeaderboards))) {
|
|
XuiControlSetText(m_hGamerTagA[iPad], L"WWWWWWWWWWWWWWWW");
|
|
} else {
|
|
// The host decides whether these are on or off
|
|
if (app.GetGameSettings(ProfileManager.GetPrimaryPad(),
|
|
eGameSetting_DisplaySplitscreenGamertags) !=
|
|
0) {
|
|
if (Minecraft::GetInstance() != NULL &&
|
|
Minecraft::GetInstance()->localplayers[iPad] != NULL) {
|
|
std::wstring wsGamertag =
|
|
convStringToWstring(ProfileManager.GetGamertag(iPad));
|
|
XuiControlSetText(m_hGamerTagA[iPad], wsGamertag.c_str());
|
|
|
|
} else {
|
|
XuiControlSetText(m_hGamerTagA[iPad], L"");
|
|
}
|
|
}
|
|
}
|
|
// The host decides whether these are on or off
|
|
if (app.GetGameSettings(ProfileManager.GetPrimaryPad(),
|
|
eGameSetting_DisplaySplitscreenGamertags) != 0) {
|
|
XuiElementSetShow(m_hGamerTagA[iPad], display);
|
|
|
|
// set the opacity of the gamertag
|
|
if (display && (ProfileManager.GetLockedProfile() != -1)) {
|
|
unsigned char ucAlpha = app.GetGameSettings(
|
|
ProfileManager.GetPrimaryPad(), eGameSetting_InterfaceOpacity);
|
|
float fVal;
|
|
|
|
if (ucAlpha < 80) {
|
|
// check if we have the timer running for the opacity
|
|
unsigned int uiOpacityTimer =
|
|
app.GetOpacityTimer(ProfileManager.GetPrimaryPad());
|
|
if (uiOpacityTimer != 0) {
|
|
if (uiOpacityTimer < 10) {
|
|
float fStep = (80.0f - (float)ucAlpha) / 10.0f;
|
|
fVal =
|
|
0.01f *
|
|
(80.0f - ((10.0f - (float)uiOpacityTimer) * fStep));
|
|
} else {
|
|
fVal = 0.01f * 80.0f;
|
|
}
|
|
} else {
|
|
fVal = 0.01f * (float)ucAlpha;
|
|
}
|
|
} else {
|
|
fVal = 0.01f * (float)ucAlpha;
|
|
}
|
|
XuiElementSetOpacity(m_hGamerTagA[iPad], 0.01f * fVal);
|
|
}
|
|
} else {
|
|
XuiElementSetShow(m_hGamerTagA[iPad], FALSE);
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
void CXuiSceneBase::_SetSelectedItem(unsigned int iPad,
|
|
const std::wstring& name) {
|
|
if (app.GetGameSettings(eGameSetting_Hints) == 0 || name.empty()) {
|
|
m_selectedItemA[iPad].SetShow(FALSE);
|
|
m_selectedItemSmallA[iPad].SetShow(FALSE);
|
|
} else {
|
|
m_uiSelectedItemOpacityCountDown[iPad] =
|
|
SharedConstants::TICKS_PER_SECOND * 3;
|
|
if (m_playerBaseScenePosition[iPad] == e_BaseScene_Fullscreen) {
|
|
m_selectedItemSmallA[iPad].SetShow(FALSE);
|
|
m_selectedItemA[iPad].SetShow(TRUE);
|
|
m_selectedItemA[iPad].SetText(name.c_str());
|
|
|
|
// D3DXVECTOR3 vPos;
|
|
// XuiElementGetPosition(
|
|
// m_selectedItemA[iPad].m_hObj, &vPos ); XuiElementSetPosition(
|
|
// m_selectedItemA[iPad].m_hObj, &vPos );
|
|
|
|
float fVal = 0.8f; // 0.01f*(float)80;
|
|
XuiElementSetOpacity(m_selectedItemA[iPad].m_hObj, fVal);
|
|
} else {
|
|
m_selectedItemA[iPad].SetShow(FALSE);
|
|
m_selectedItemSmallA[iPad].SetShow(TRUE);
|
|
m_selectedItemSmallA[iPad].SetText(name.c_str());
|
|
|
|
// D3DXVECTOR3 vPos;
|
|
// XuiElementGetPosition(
|
|
// m_selectedItemSmallA[iPad].m_hObj, &vPos );
|
|
// XuiElementSetPosition(
|
|
// m_selectedItemSmallA[iPad].m_hObj, &vPos );
|
|
|
|
float fVal = 0.8f; // 0.01f*(float)80;
|
|
XuiElementSetOpacity(m_selectedItemSmallA[iPad].m_hObj, fVal);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CXuiSceneBase::_HideAllGameUIElements() {
|
|
for (int i = 0; i < XUSER_MAX_COUNT; i++) {
|
|
m_uiSelectedItemOpacityCountDown[i] = 0;
|
|
m_selectedItemA[i].SetShow(FALSE);
|
|
m_selectedItemSmallA[i].SetShow(FALSE);
|
|
|
|
m_BossHealthGroup[i].SetShow(FALSE);
|
|
m_bossHealthVisible[i] = FALSE;
|
|
|
|
XuiElementSetShow(app.GetCurrentHUDScene(i), FALSE);
|
|
|
|
_DisplayGamertag(i, FALSE);
|
|
}
|
|
}
|
|
|
|
bool CXuiSceneBase::_GetBaseSceneSafeZone(unsigned int iPad,
|
|
D3DXVECTOR2& origin, float& width,
|
|
float& height) {
|
|
if (m_playerBaseScenePosition[iPad] == e_BaseScene_NotSet) return false;
|
|
|
|
D3DXMATRIX baseSceneMatrix;
|
|
XuiElementGetFullXForm(m_BasePlayerScene[iPad], &baseSceneMatrix);
|
|
|
|
origin.x = baseSceneMatrix._41;
|
|
origin.y = baseSceneMatrix._42;
|
|
|
|
XuiElementGetBounds(m_BasePlayerScene[iPad], &width, &height);
|
|
|
|
switch (m_playerBaseScenePosition[iPad]) {
|
|
// No position adjustment
|
|
case e_BaseScene_Fullscreen:
|
|
origin.x += SAFEZONE_HALF_WIDTH;
|
|
width -= SAFEZONE_HALF_WIDTH * 2;
|
|
|
|
origin.y += SAFEZONE_HALF_HEIGHT;
|
|
height -= SAFEZONE_HALF_HEIGHT * 2;
|
|
break;
|
|
case e_BaseScene_Top_Left:
|
|
width = XUI_BASE_SCENE_WIDTH_HALF;
|
|
height = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
|
|
origin.x += SAFEZONE_HALF_WIDTH;
|
|
width -= SAFEZONE_HALF_WIDTH;
|
|
|
|
origin.y += SAFEZONE_HALF_HEIGHT;
|
|
height -= SAFEZONE_HALF_HEIGHT * 2;
|
|
break;
|
|
case e_BaseScene_Top: // Top & Bottom - indent by a quarter screen
|
|
height = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
|
|
// origin.x += SAFEZONE_HALF_WIDTH;
|
|
// width -= SAFEZONE_HALF_WIDTH * 2;
|
|
|
|
origin.y += SAFEZONE_HALF_HEIGHT;
|
|
height -= SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
case e_BaseScene_Bottom:
|
|
height = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
|
|
// origin.x += SAFEZONE_HALF_WIDTH;
|
|
// width -= SAFEZONE_HALF_WIDTH * 2;
|
|
|
|
// origin.y += SAFEZONE_HALF_HEIGHT;
|
|
height -= SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
case e_BaseScene_Bottom_Left:
|
|
width = XUI_BASE_SCENE_WIDTH_HALF;
|
|
height = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
|
|
origin.x += SAFEZONE_HALF_WIDTH;
|
|
width -= SAFEZONE_HALF_WIDTH;
|
|
|
|
// origin.y += SAFEZONE_HALF_HEIGHT;
|
|
height -= SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
case e_BaseScene_Bottom_Right:
|
|
width = XUI_BASE_SCENE_WIDTH_HALF;
|
|
height = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
|
|
// origin.x += SAFEZONE_HALF_WIDTH;
|
|
width -= SAFEZONE_HALF_WIDTH;
|
|
|
|
// origin.y += SAFEZONE_HALF_HEIGHT;
|
|
height -= SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
case e_BaseScene_Left:
|
|
width = XUI_BASE_SCENE_WIDTH_HALF;
|
|
|
|
origin.x += SAFEZONE_HALF_WIDTH;
|
|
width -= SAFEZONE_HALF_WIDTH;
|
|
|
|
// origin.y += SAFEZONE_HALF_HEIGHT;
|
|
// height -= SAFEZONE_HALF_HEIGHT * 2;
|
|
break;
|
|
case e_BaseScene_Right:
|
|
width = XUI_BASE_SCENE_WIDTH_HALF;
|
|
|
|
// origin.x += SAFEZONE_HALF_WIDTH;
|
|
width -= SAFEZONE_HALF_WIDTH;
|
|
|
|
// origin.y += SAFEZONE_HALF_HEIGHT;
|
|
// height -= SAFEZONE_HALF_HEIGHT * 2;
|
|
break;
|
|
case e_BaseScene_Top_Right:
|
|
width = XUI_BASE_SCENE_WIDTH_HALF;
|
|
height = XUI_BASE_SCENE_HEIGHT_HALF;
|
|
|
|
// origin.x += SAFEZONE_HALF_WIDTH;
|
|
width -= SAFEZONE_HALF_WIDTH;
|
|
|
|
origin.y += SAFEZONE_HALF_HEIGHT;
|
|
height -= SAFEZONE_HALF_HEIGHT;
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void CXuiSceneBase::ReLayout(unsigned int iPad) {
|
|
D3DXVECTOR3 lastPos, lastPosSmall;
|
|
int lastVisible = -1;
|
|
|
|
// Buttons are at 0,0 within the tooltip group
|
|
lastPos.x = 0.0f;
|
|
lastPos.y = 0.0f;
|
|
lastPos.z = 0.0f;
|
|
lastPosSmall.x = 0.0f;
|
|
lastPosSmall.y = 0.0f;
|
|
lastPosSmall.z = 0.0f;
|
|
|
|
for (unsigned int i = 0; i < BUTTONS_TOOLTIP_MAX; ++i) {
|
|
if (m_visible[iPad][i] == TRUE) {
|
|
if (i > 0 && lastVisible != -1) {
|
|
float width, height;
|
|
XuiElementGetBounds(m_Buttons[iPad][lastVisible].m_hObj, &width,
|
|
&height);
|
|
|
|
// 4J Stu - This is for horizontal layout, will need changed if
|
|
// we do vertical layout
|
|
lastPos.x += width + m_iTooltipSpacingGap;
|
|
|
|
XuiElementGetBounds(m_ButtonsSmall[iPad][lastVisible].m_hObj,
|
|
&width, &height);
|
|
// 4J Stu - This is for horizontal layout, will need changed if
|
|
// we do vertical layout
|
|
lastPosSmall.x += width + m_iTooltipSpacingGapSmall;
|
|
}
|
|
XuiElementSetPosition(m_Buttons[iPad][i].m_hObj, &lastPos);
|
|
XuiElementSetPosition(m_ButtonsSmall[iPad][i].m_hObj,
|
|
&lastPosSmall);
|
|
|
|
lastVisible = i;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CXuiSceneBase::TickAllBaseScenes() {
|
|
if (CXuiSceneBase::Instance != NULL) {
|
|
CXuiSceneBase::Instance->_TickAllBaseScenes();
|
|
}
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::SetEnableTooltips(unsigned int iPad, bool enabled) {
|
|
if (CXuiSceneBase::Instance != NULL) {
|
|
return CXuiSceneBase::Instance->_SetEnableTooltips(iPad, enabled);
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::SetTooltipText(unsigned int iPad, unsigned int tooltip,
|
|
int iTextID) {
|
|
if (CXuiSceneBase::Instance != NULL) {
|
|
return CXuiSceneBase::Instance->_SetTooltipText(iPad, tooltip, iTextID);
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::RefreshTooltips(unsigned int iPad) {
|
|
if (CXuiSceneBase::Instance != NULL) {
|
|
return CXuiSceneBase::Instance->_RefreshTooltips(iPad);
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowTooltip(unsigned int iPad, unsigned int tooltip,
|
|
bool show) {
|
|
if (CXuiSceneBase::Instance != NULL) {
|
|
return CXuiSceneBase::Instance->_ShowTooltip(iPad, tooltip, show);
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowSafeArea(bool show) {
|
|
if (CXuiSceneBase::Instance != NULL) {
|
|
return CXuiSceneBase::Instance->_ShowSafeArea(show);
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::SetTooltips(unsigned int iPad, int iA, int iB, int iX,
|
|
int iY, int iLT, int iRT, int iRB, int iLB,
|
|
int iLS, bool forceUpdate /*= false*/) {
|
|
if (CXuiSceneBase::Instance != NULL) {
|
|
// Enable all the tooltips. We should disable them in the scenes as
|
|
// required
|
|
CXuiSceneBase::Instance->_SetTooltipsEnabled(iPad);
|
|
|
|
int iTooptipsA[BUTTONS_TOOLTIP_MAX];
|
|
iTooptipsA[BUTTON_TOOLTIP_A] = iA;
|
|
iTooptipsA[BUTTON_TOOLTIP_B] = iB;
|
|
iTooptipsA[BUTTON_TOOLTIP_X] = iX;
|
|
iTooptipsA[BUTTON_TOOLTIP_Y] = iY;
|
|
iTooptipsA[BUTTON_TOOLTIP_LT] = iLT;
|
|
iTooptipsA[BUTTON_TOOLTIP_RT] = iRT;
|
|
iTooptipsA[BUTTON_TOOLTIP_LB] = iRB;
|
|
iTooptipsA[BUTTON_TOOLTIP_RB] = iLB;
|
|
iTooptipsA[BUTTON_TOOLTIP_LS] = iLS;
|
|
|
|
for (int i = 0; i < BUTTONS_TOOLTIP_MAX; i++) {
|
|
if (iTooptipsA[i] == -1) {
|
|
CXuiSceneBase::Instance->SetTooltipText(iPad, i, -1);
|
|
CXuiSceneBase::Instance->_ShowTooltip(iPad, i, false);
|
|
// CXuiSceneBase::Instance->m_iCurrentTooltipTextID[iPad][i]=-1;
|
|
} else if (iTooptipsA[i] == -2) {
|
|
CXuiSceneBase::Instance->_ShowTooltip(iPad, i, true);
|
|
CXuiSceneBase::Instance->SetTooltipText(iPad, i, -2);
|
|
} else {
|
|
// does the tooltip need to change?
|
|
if (CXuiSceneBase::Instance->m_iCurrentTooltipTextID[iPad][i] !=
|
|
iTooptipsA[i] ||
|
|
forceUpdate) {
|
|
CXuiSceneBase::Instance->SetTooltipText(iPad, i,
|
|
iTooptipsA[i]);
|
|
}
|
|
CXuiSceneBase::Instance->_ShowTooltip(iPad, i, true);
|
|
}
|
|
}
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::SetTooltipsEnabled(unsigned int iPad, bool bA, bool bB,
|
|
bool bX, bool bY, bool bLT, bool bRT,
|
|
bool bLB, bool bRB, bool bLS) {
|
|
return CXuiSceneBase::Instance->_SetTooltipsEnabled(
|
|
iPad, bA, bB, bX, bY, bLT, bRT, bLB, bRB, bLS);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::EnableTooltip(unsigned int iPad, unsigned int tooltip,
|
|
bool enable) {
|
|
return CXuiSceneBase::Instance->_EnableTooltip(iPad, tooltip, enable);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::AnimateKeyPress(unsigned int userIndex,
|
|
unsigned int keyCode) {
|
|
return CXuiSceneBase::Instance->_AnimateKeyPress(userIndex, keyCode);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowSavingMessage(unsigned int iPad,
|
|
C4JStorage::ESavingMessage eVal) {
|
|
if (CXuiSceneBase::Instance != NULL) {
|
|
return CXuiSceneBase::Instance->_ShowSavingMessage(iPad, eVal);
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowBackground(unsigned int iPad, bool show) {
|
|
return CXuiSceneBase::Instance->_ShowBackground(iPad, show);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowDarkOverlay(unsigned int iPad, bool show) {
|
|
return CXuiSceneBase::Instance->_ShowDarkOverlay(iPad, show);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowLogo(unsigned int iPad, bool show) {
|
|
return CXuiSceneBase::Instance->_ShowLogo(iPad, show);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowPressStart(unsigned int iPad) {
|
|
CXuiSceneBase::Instance->_ShowPressStart(iPad);
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowOtherPlayersBaseScene(int iPad, bool show) {
|
|
CXuiSceneBase::Instance->_ShowOtherPlayersBaseScene(iPad, show);
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::UpdateAutosaveCountdownTimer(unsigned int uiSeconds) {
|
|
CXuiSceneBase::Instance->_UpdateAutosaveCountdownTimer(uiSeconds);
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::ShowAutosaveCountdownTimer(bool show) {
|
|
CXuiSceneBase::Instance->_ShowAutosaveCountdownTimer(show);
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::UpdateTrialTimer(unsigned int iPad) {
|
|
CXuiSceneBase::Instance->_UpdateTrialTimer(iPad);
|
|
return S_OK;
|
|
}
|
|
HRESULT CXuiSceneBase::ShowTrialTimer(bool show) {
|
|
CXuiSceneBase::Instance->_ShowTrialTimer(show);
|
|
return S_OK;
|
|
}
|
|
|
|
void CXuiSceneBase::ReduceTrialTimerValue() {
|
|
CXuiSceneBase::Instance->_ReduceTrialTimerValue();
|
|
}
|
|
|
|
bool CXuiSceneBase::PressStartPlaying(unsigned int iPad) {
|
|
return CXuiSceneBase::Instance->_PressStartPlaying(iPad);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::HidePressStart() {
|
|
return CXuiSceneBase::Instance->_HidePressStart();
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::SetPlayerBaseScenePosition(unsigned int iPad,
|
|
EBaseScenePosition position) {
|
|
return CXuiSceneBase::Instance->_SetPlayerBaseScenePosition(iPad, position);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::SetPlayerBasePositions(EBaseScenePosition pad0,
|
|
EBaseScenePosition pad1,
|
|
EBaseScenePosition pad2,
|
|
EBaseScenePosition pad3) {
|
|
SetPlayerBaseScenePosition(0, pad0);
|
|
SetPlayerBaseScenePosition(1, pad1);
|
|
SetPlayerBaseScenePosition(2, pad2);
|
|
SetPlayerBaseScenePosition(3, pad3);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::UpdatePlayerBasePositions() {
|
|
EBaseScenePosition padPositions[XUSER_MAX_COUNT];
|
|
|
|
for (unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) {
|
|
padPositions[idx] = e_BaseScene_NotSet;
|
|
}
|
|
|
|
Minecraft* pMinecraft = Minecraft::GetInstance();
|
|
|
|
// If the game is not started (or is being held paused for a bit) then
|
|
// display all scenes fullscreen
|
|
if (pMinecraft == NULL) {
|
|
for (unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) {
|
|
padPositions[idx] = e_BaseScene_Fullscreen;
|
|
}
|
|
}
|
|
|
|
// If the game is not in split-screen, then display the primary pad at
|
|
// fullscreen
|
|
else if (app.GetLocalPlayerCount() < 2) {
|
|
int primaryPad = ProfileManager.GetPrimaryPad();
|
|
padPositions[primaryPad] = e_BaseScene_Fullscreen;
|
|
|
|
// May need to turn off the player who just left
|
|
for (unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) {
|
|
DisplayGamertag(idx, FALSE);
|
|
}
|
|
}
|
|
|
|
// We are in splitscreen so work out where each player should be
|
|
else {
|
|
for (unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) {
|
|
if (pMinecraft->localplayers[idx] != NULL) {
|
|
if (pMinecraft->localplayers[idx]->m_iScreenSection ==
|
|
C4JRender::VIEWPORT_TYPE_FULLSCREEN) {
|
|
DisplayGamertag(idx, FALSE);
|
|
} else {
|
|
DisplayGamertag(idx, TRUE);
|
|
}
|
|
|
|
switch (pMinecraft->localplayers[idx]->m_iScreenSection) {
|
|
case C4JRender::VIEWPORT_TYPE_FULLSCREEN:
|
|
padPositions[idx] = e_BaseScene_Fullscreen;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_SPLIT_TOP:
|
|
padPositions[idx] = e_BaseScene_Top;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM:
|
|
padPositions[idx] = e_BaseScene_Bottom;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT:
|
|
padPositions[idx] = e_BaseScene_Left;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT:
|
|
padPositions[idx] = e_BaseScene_Right;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT:
|
|
padPositions[idx] = e_BaseScene_Top_Left;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT:
|
|
padPositions[idx] = e_BaseScene_Top_Right;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT:
|
|
padPositions[idx] = e_BaseScene_Bottom_Left;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT:
|
|
padPositions[idx] = e_BaseScene_Bottom_Right;
|
|
break;
|
|
}
|
|
} else {
|
|
padPositions[idx] = e_BaseScene_NotSet;
|
|
DisplayGamertag(idx, FALSE);
|
|
}
|
|
}
|
|
}
|
|
|
|
return SetPlayerBasePositions(padPositions[0], padPositions[1],
|
|
padPositions[2], padPositions[3]);
|
|
}
|
|
|
|
CXuiSceneBase::EBaseScenePosition CXuiSceneBase::GetPlayerBasePosition(
|
|
int iPad) {
|
|
return CXuiSceneBase::Instance->_GetPlayerBasePosition(iPad);
|
|
}
|
|
|
|
void CXuiSceneBase::UpdateSelectedItemPos(int iPad) {
|
|
CXuiSceneBase::Instance->_UpdateSelectedItemPos(iPad);
|
|
}
|
|
|
|
HXUIOBJ CXuiSceneBase::GetPlayerBaseScene(int iPad) {
|
|
return CXuiSceneBase::Instance->_GetPlayerBaseScene(iPad);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::PlayUISFX(ESoundEffect eSound) {
|
|
return CXuiSceneBase::Instance->_PlayUISFX(eSound);
|
|
}
|
|
|
|
void CXuiSceneBase::SetEmptyQuadrantLogo(int iScreenSection) {
|
|
Minecraft* pMinecraft = Minecraft::GetInstance();
|
|
EBaseScenePosition ePos = e_BaseScene_Top_Left;
|
|
int iPad;
|
|
// find the empty player
|
|
for (iPad = 0; iPad < XUSER_MAX_COUNT; ++iPad) {
|
|
if (pMinecraft->localplayers[iPad] == NULL) {
|
|
switch (iScreenSection) {
|
|
case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT:
|
|
ePos = e_BaseScene_Top_Left;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT:
|
|
ePos = e_BaseScene_Top_Right;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT:
|
|
ePos = e_BaseScene_Bottom_Left;
|
|
break;
|
|
case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT:
|
|
ePos = e_BaseScene_Bottom_Right;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
CXuiSceneBase::Instance->_SetEmptyQuadrantLogo(iPad, ePos);
|
|
}
|
|
|
|
HRESULT CXuiSceneBase::DisplayGamertag(unsigned int iPad, bool display) {
|
|
CXuiSceneBase::Instance->_DisplayGamertag(iPad, display);
|
|
return S_OK;
|
|
}
|
|
|
|
void CXuiSceneBase::SetSelectedItem(unsigned int iPad,
|
|
const std::wstring& name) {
|
|
CXuiSceneBase::Instance->_SetSelectedItem(iPad, name);
|
|
}
|
|
|
|
void CXuiSceneBase::HideAllGameUIElements() {
|
|
CXuiSceneBase::Instance->_HideAllGameUIElements();
|
|
}
|
|
|
|
bool CXuiSceneBase::GetBaseSceneSafeZone(unsigned int iPad, D3DXVECTOR2& origin,
|
|
float& width, float& height) {
|
|
return CXuiSceneBase::Instance->_GetBaseSceneSafeZone(iPad, origin, width,
|
|
height);
|
|
}
|
|
|
|
#ifndef _XBOX
|
|
void CXuiSceneBase::CreateBaseSceneInstance() {
|
|
CXuiSceneBase* sceneBase = new CXuiSceneBase();
|
|
BOOL handled;
|
|
sceneBase->OnInit(NULL, handled);
|
|
}
|
|
#endif
|