4jcraft/Minecraft.Client/Platform/Common/XUI/XUI_TrialExitUpsell.cpp
2026-03-22 12:40:22 -05:00

129 lines
4.2 KiB
C++

#include "../../Minecraft.World/Platform/stdafx.h"
#include "XUI_TrialExitUpsell.h"
// wchImages[TRIAL_EXIT_UPSELL_IMAGE_COUNT]
WCHAR* CScene_TrialExitUpsell::wchImages[] = {
L"Graphics/UpsellScreenshots/Screenshot1.png",
L"Graphics/UpsellScreenshots/Screenshot2.png",
L"Graphics/UpsellScreenshots/Screenshot3.png",
L"Graphics/UpsellScreenshots/Screenshot4.png",
L"Graphics/UpsellScreenshots/Screenshot5.png",
L"Graphics/UpsellScreenshots/Screenshot6.png",
L"Graphics/UpsellScreenshots/Screenshot7.png",
L"Graphics/UpsellScreenshots/Screenshot8.png"};
//----------------------------------------------------------------------------------
// Performs initialization tasks - retrieves controls.
//----------------------------------------------------------------------------------
HRESULT CScene_TrialExitUpsell::OnInit(XUIMessageInit* pInitData,
BOOL& bHandled) {
m_iPad = *(int*)pInitData->pvInitData;
MapChildControls();
m_bCanExit = true;
m_bFadeStarted = false;
m_bShowingImage1 = true;
m_imagesShown = 0;
m_image1.SetImagePath(wchImages[m_imagesShown]);
SetTimer(0, TRIAL_EXIT_UPSELL_IMAGE_DISPLAY_TIME);
CXuiSceneBase::ShowBackground(DEFAULT_XUI_MENU_USER, FALSE);
CXuiSceneBase::ShowLogo(DEFAULT_XUI_MENU_USER, FALSE);
if (m_bCanExit) {
ui.SetTooltips(DEFAULT_XUI_MENU_USER, IDS_EXIT_GAME, IDS_TOOLTIPS_BACK,
IDS_UNLOCK_TITLE);
} else {
ui.SetTooltips(DEFAULT_XUI_MENU_USER, -1, IDS_TOOLTIPS_BACK,
IDS_UNLOCK_TITLE);
}
return S_OK;
}
HRESULT CScene_TrialExitUpsell::OnKeyDown(XUIMessageInput* pInputData,
BOOL& rfHandled) {
// ignore repeats
if (pInputData->dwFlags & XUI_INPUT_FLAG_REPEAT) return S_OK;
ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
HRESULT hr = S_OK;
// Explicitly handle B button presses
switch (pInputData->dwKeyCode) {
case VK_PAD_A:
#ifdef _XBOX
if (m_bCanExit) {
XLaunchNewImage(XLAUNCH_KEYWORD_DASH_ARCADE, 0);
}
#endif
break;
case VK_PAD_B:
case VK_ESCAPE:
app.NavigateBack(pInputData->UserIndex);
rfHandled = TRUE;
break;
case VK_PAD_X:
if (ProfileManager.IsSignedIn(pInputData->UserIndex)) {
TelemetryManager->RecordUpsellPresented(
pInputData->UserIndex, eSen_UpsellID_Full_Version_Of_Game,
app.m_dwOfferID);
ProfileManager.DisplayFullVersionPurchase(
false, pInputData->UserIndex,
eSen_UpsellID_Full_Version_Of_Game);
}
break;
}
return hr;
}
HRESULT CScene_TrialExitUpsell::OnTimelineEnd(HXUIOBJ hObjSource,
BOOL& bHandled) {
if (m_bFadeStarted) {
m_bFadeStarted = false;
m_bShowingImage1 = !m_bShowingImage1;
// We start a timer so we know when this image has been displayed for
// the required time
return SetTimer(0, TRIAL_EXIT_UPSELL_IMAGE_DISPLAY_TIME);
} else {
return S_OK;
}
}
HRESULT CScene_TrialExitUpsell::OnTimer(XUIMessageTimer* pTimer,
BOOL& bHandled) {
int nStart, nEnd;
KillTimer(0);
++m_imagesShown;
if (m_imagesShown >= TRIAL_EXIT_UPSELL_IMAGE_COUNT) {
m_imagesShown = 0; // Loop round to the start
m_bCanExit = true;
ui.SetTooltips(DEFAULT_XUI_MENU_USER, IDS_EXIT_GAME, IDS_TOOLTIPS_BACK,
IDS_UNLOCK_TITLE);
}
if (m_bShowingImage1) {
m_image2.SetImagePath(wchImages[m_imagesShown]);
FindNamedFrame(L"Fade1to2", &nStart);
FindNamedFrame(L"EndFade1to2", &nEnd);
PlayTimeline(nStart, nStart, nEnd, FALSE, TRUE);
m_bFadeStarted = true;
} else {
m_image1.SetImagePath(wchImages[m_imagesShown]);
FindNamedFrame(L"Fade2to1", &nStart);
FindNamedFrame(L"EndFade2to1", &nEnd);
PlayTimeline(nStart, nStart, nEnd, FALSE, TRUE);
m_bFadeStarted = true;
}
return S_OK;
}