aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/XUI/XUI_Intro.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Common/XUI/XUI_Intro.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/XUI/XUI_Intro.cpp')
-rw-r--r--Minecraft.Client/Common/XUI/XUI_Intro.cpp153
1 files changed, 153 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/XUI/XUI_Intro.cpp b/Minecraft.Client/Common/XUI/XUI_Intro.cpp
new file mode 100644
index 00000000..997abe5d
--- /dev/null
+++ b/Minecraft.Client/Common/XUI/XUI_Intro.cpp
@@ -0,0 +1,153 @@
+// Minecraft.cpp : Defines the entry point for the application.
+//
+
+#include "stdafx.h"
+
+#include <assert.h>
+#include "..\XUI\XUI_Intro.h"
+
+#define TIMELINE_NORMAL 0
+#define TIMELINE_ESRBFADE 1
+#define TIMELINE_LOGOSFADE 2
+
+//----------------------------------------------------------------------------------
+// Performs initialization tasks - retrieves controls.
+//----------------------------------------------------------------------------------
+HRESULT CScene_Intro::OnInit( XUIMessageInit* pInitData, BOOL& bHandled )
+{
+ MapChildControls();
+
+ // We may need to display a ratings image for a while at the start...
+ m_bWantsToSkip=false;
+ m_iTimeline=TIMELINE_NORMAL;
+
+ // 4J-PB - We can't check to see if the version is a trial or full game until after 5 seconds...
+ // The reason that this is a requirement is that there is a problem that occasionally happens *only* in the production
+ // environment (not partnernet or cert), where if you don’t wait 5 seconds, you can run into an issue where the timing
+ // of the call fails and the game is always identified as being the trial version even if you have upgraded to the full version.
+ // -Joe Dunavant
+
+ // start a timer for the required 5 seconds, plus an extra bit to allow the lib timer to enable the xcontent license check call
+#ifdef _CONTENT_PACKAGE
+ m_bSkippable=false;
+ XuiSetTimer( m_hObj,0,5200);
+#else
+ m_bSkippable=true;
+#endif
+
+ return S_OK;
+}
+
+//----------------------------------------------------------------------------------
+// Handler for the button press message.
+//----------------------------------------------------------------------------------
+HRESULT CScene_Intro::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);
+
+
+ return S_OK;
+}
+
+HRESULT CScene_Intro::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled)
+{
+ ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
+
+ static bool bPressed=false;
+
+ if(bPressed==false)
+ {
+ if(m_bSkippable)
+ {
+ // stop the animation
+ XuiElementStopTimeline(m_hObj,TRUE);
+ app.NavigateToScene(XUSER_INDEX_ANY,eUIScene_SaveMessage);
+ app.SetIntroRunning(false);
+ }
+ else
+ {
+ m_bWantsToSkip=true;
+ }
+
+ bPressed=true;
+ }
+
+ return S_OK;
+}
+
+HRESULT CScene_Intro::OnTimelineEnd(HXUIOBJ hObjSource, BOOL& bHandled)
+{
+ int nStart, nEnd;
+
+ if(m_bSkippable && m_bWantsToSkip)
+ {
+ // straight to the game
+ app.NavigateToScene(XUSER_INDEX_ANY,eUIScene_SaveMessage);
+ app.SetIntroRunning(false);
+ }
+ else
+ {
+ switch(m_iTimeline)
+ {
+ case TIMELINE_NORMAL:
+ {
+ // 4J-PB - lots of discussions over this because Brazil is in the NA region. This is what I have been advised to do...
+ //if(ProfileManager.RegionIsNorthAmerica())
+ if(ProfileManager.LocaleIsUSorCanada())
+ {
+ m_iTimeline=TIMELINE_ESRBFADE;
+ XuiElementFindNamedFrame( m_hObj, L"ESRBFade", &nStart );
+ XuiElementFindNamedFrame( m_hObj, L"ESRBFadeEnd", &nEnd );
+ XuiElementPlayTimeline( m_hObj, nStart, nStart, nEnd, FALSE, TRUE );
+ }
+ else
+ {
+ m_iTimeline=TIMELINE_LOGOSFADE;
+ XuiElementFindNamedFrame( m_hObj, L"StartFade", &nStart );
+ XuiElementFindNamedFrame( m_hObj, L"EndFade", &nEnd );
+ XuiElementPlayTimeline( m_hObj, nStart, nStart, nEnd, FALSE, TRUE );
+ }
+ }
+ break;
+
+ case TIMELINE_ESRBFADE:
+ if(m_bWantsToSkip && m_bSkippable)
+ {
+ app.NavigateToScene(XUSER_INDEX_ANY,eUIScene_SaveMessage);
+ app.SetIntroRunning(false);
+ }
+ else
+ {
+ m_iTimeline=TIMELINE_LOGOSFADE;
+ XuiElementFindNamedFrame( m_hObj, L"StartFade", &nStart );
+ XuiElementFindNamedFrame( m_hObj, L"EndFade", &nEnd );
+ XuiElementPlayTimeline( m_hObj, nStart, nStart, nEnd, FALSE, TRUE );
+ }
+ break;
+ case TIMELINE_LOGOSFADE:
+ app.NavigateToScene(XUSER_INDEX_ANY,eUIScene_SaveMessage);
+ app.SetIntroRunning(false);
+ break;
+ }
+ }
+
+ return S_OK;
+}
+
+
+HRESULT CScene_Intro::OnTimer(XUIMessageTimer *pData,BOOL& rfHandled)
+{
+ HRESULT hr=XuiKillTimer(m_hObj,0);
+ m_bSkippable=true;
+
+ if(m_bWantsToSkip)
+ {
+ // stop the animation
+ XuiElementStopTimeline(m_hObj,TRUE);
+ app.NavigateToScene(XUSER_INDEX_ANY,eUIScene_SaveMessage);
+ app.SetIntroRunning(false);
+ }
+
+ return hr;
+} \ No newline at end of file