Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
13 kB · 375 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375// Minecraft.cpp : Defines the entry point for the application.//
#include "stdafx.h"
#include <assert.h>#include "..\..\Minecraft.h"#include "..\..\ProgressRenderer.h"#include "..\..\..\Minecraft.World\StringHelpers.h"#include "..\..\Common\Tutorial\TutorialMode.h"
//----------------------------------------------------------------------------------// Performs initialization tasks - retrieves controls.//----------------------------------------------------------------------------------HRESULT CScene_FullscreenProgress::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ){ MapChildControls();
m_buttonConfirm.SetText( app.GetString( IDS_CONFIRM_OK ) );
LoadingInputParams *params = (LoadingInputParams *)pInitData->pvInitData;
m_CompletionData = params->completionData; m_iPad=params->completionData->iPad; m_cancelFunc = params->cancelFunc; m_cancelFuncParam = params->m_cancelFuncParam; m_completeFunc = params->completeFunc; m_completeFuncParam = params->m_completeFuncParam; m_bWasCancelled=false;
thread = new C4JThread(params->func, params->lpParam, "FullscreenProgress"); thread->SetProcessor(3); // TODO 4J Stu - Make sure this is a good thread/core to use
m_threadCompleted = false; threadStarted = false; //ResumeThread( thread ); if( CXuiSceneBase::GetPlayerBasePosition(m_iPad) != CXuiSceneBase::e_BaseScene_Fullscreen && CXuiSceneBase::GetPlayerBasePosition(m_iPad) != CXuiSceneBase::e_BaseScene_NotSet) { app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad,false); CXuiSceneBase::ShowLogo( m_iPad, FALSE ); } else { CXuiSceneBase::ShowLogo( m_iPad, params->completionData->bShowLogo ); }
CXuiSceneBase::ShowBackground( m_iPad, params->completionData->bShowBackground ); ui.SetTooltips( m_iPad, -1, params->cancelText, -1, -1 );
// Clear the progress text Minecraft *pMinecraft=Minecraft::GetInstance(); pMinecraft->progressRenderer->progressStart(-1); pMinecraft->progressRenderer->progressStage(-1);
// set the tip wstring wsText=app.FormatHTMLString(m_iPad,app.GetString(app.GetNextTip())); wchar_t startTags[64]; swprintf(startTags,64,L"<font color=\"#%08x\" size=14><DIV ALIGN=CENTER>",app.GetHTMLColour(eHTMLColor_White)); wsText= startTags + wsText + L"</DIV>"; XuiControlSetText(m_tip, wsText.c_str());
m_tip.SetShow( m_CompletionData->bShowTips );
return S_OK;}
// The framework calls this handler when the object is to be destroyed. HRESULT CScene_FullscreenProgress::OnDestroy(){ if( thread != NULL && thread != INVALID_HANDLE_VALUE ) delete thread;
if( m_CompletionData != NULL ) delete m_CompletionData;
return S_OK;}
HRESULT CScene_FullscreenProgress::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled){ ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
switch(pInputData->dwKeyCode) {
case VK_PAD_B: case VK_ESCAPE: // 4J-JEV: Fix for Xbox360 #162749 - TU17: Save Upload: Content: UI: Player is presented with non-functional Tooltips after the Upload Save For Xbox One is completed. if( m_cancelFunc != NULL && !m_threadCompleted ) { m_cancelFunc( m_cancelFuncParam ); m_bWasCancelled=true; } break; }
return S_OK;}
//----------------------------------------------------------------------------------// Updates the UI when the list selection changes.//----------------------------------------------------------------------------------HRESULT CScene_FullscreenProgress::OnNotifySelChanged( HXUIOBJ hObjSource, XUINotifySelChanged* pNotifySelChangedData, BOOL& bHandled ){
return S_OK;}
//----------------------------------------------------------------------------------// Handler for the button press message.//----------------------------------------------------------------------------------HRESULT CScene_FullscreenProgress::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(m_threadCompleted == true && hObjPressed == m_buttonConfirm) { // if there's a complete function, call it if(m_completeFunc) { m_completeFunc(m_completeFuncParam); } switch(m_CompletionData->type) { case e_ProgressCompletion_NavigateBack: CXuiSceneBase::ShowBackground( m_CompletionData->iPad, FALSE ); CXuiSceneBase::ShowBackground( m_CompletionData->iPad, TRUE ); app.NavigateBack(m_CompletionData->iPad); // Show the other players scenes CXuiSceneBase::ShowOtherPlayersBaseScene(m_CompletionData->iPad, true); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_NavigateBackToScene: CXuiSceneBase::ShowBackground( m_CompletionData->iPad, FALSE ); CXuiSceneBase::ShowBackground( m_CompletionData->iPad, TRUE ); CXuiSceneBase::ShowOtherPlayersBaseScene(m_CompletionData->iPad, true); // If the pause menu is still active, then navigate back // Otherwise close everything then navigate forwads to the pause menu if(app.IsSceneInStack(m_CompletionData->iPad, m_CompletionData->scene)) { app.NavigateBack(m_CompletionData->iPad,false, m_CompletionData->scene); } else { app.CloseXuiScenesAndNavigateToScene(m_CompletionData->iPad,m_CompletionData->scene); } ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_CloseUIScenes: app.CloseXuiScenes(m_CompletionData->iPad); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_CloseAllPlayersUIScenes: app.CloseAllPlayersXuiScenes(); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_NavigateToHomeMenu: app.NavigateToHomeMenu(); ui.UpdatePlayerBasePositions(); break; } }
return S_OK;}
HRESULT CScene_FullscreenProgress::OnGetSourceDataText(XUIMessageGetSourceText *pGetSourceTextData, BOOL& bHandled){ // This gets called every frame, so use it to update our two text boxes Minecraft *pMinecraft=Minecraft::GetInstance();
int title = pMinecraft->progressRenderer->getCurrentTitle(); if(title >= 0) m_title.SetText( app.GetString( title ) ); else m_title.SetText( L"" );
int status = pMinecraft->progressRenderer->getCurrentStatus(); if(status >= 0) m_status.SetText( app.GetString( status ) ); else m_status.SetText( L"" );
return S_OK;}
HRESULT CScene_FullscreenProgress::OnTransitionStart( XUIMessageTransition *pTransition, BOOL& bHandled ){ if(!threadStarted) { thread->Run(); threadStarted = true; XuiSetTimer(m_hObj,TIMER_FULLSCREEN_PROGRESS,TIMER_FULLSCREEN_PROGRESS_TIME); XuiSetTimer(m_hObj,TIMER_FULLSCREEN_TIPS,TIMER_FULLSCREEN_TIPS_TIME); } return S_OK;}
HRESULT CScene_FullscreenProgress::OnTimer( XUIMessageTimer *pTimer, BOOL& bHandled ){ int code = thread->GetExitCode(); DWORD exitcode = *((DWORD *)&code);
//app.DebugPrintf("CScene_FullscreenProgress Timer %d\n",pTimer->nId);
if( exitcode != STILL_ACTIVE ) { // 4J-PB - need to kill the timers whatever happens XuiKillTimer(m_hObj,TIMER_FULLSCREEN_PROGRESS); XuiKillTimer(m_hObj,TIMER_FULLSCREEN_TIPS); XuiControlSetText(m_tip,L"");
// hide the tips bar in cause we're waiting for the user to press ok m_tip.SetShow( FALSE );
// If we failed (currently used by network connection thread), navigate back if( exitcode != S_OK ) { if( exitcode == ERROR_CANCELLED ) { // Current thread cancelled for whatever reason // Currently used only for the CConsoleMinecraftApp::RemoteSaveThreadProc thread // Assume to just ignore this thread as something else is now running that will // cause another action } else { /*m_threadCompleted = true; m_buttonConfirm.SetShow( TRUE ); m_buttonConfirm.SetFocus( m_CompletionData->iPad ); m_CompletionData->type = e_ProgressCompletion_NavigateToHomeMenu;
int exitReasonStringId; switch( app.GetDisconnectReason() ) { default: exitReasonStringId = IDS_CONNECTION_FAILED; } Minecraft *pMinecraft=Minecraft::GetInstance(); pMinecraft->progressRenderer->progressStartNoAbort( exitReasonStringId );*/ //app.NavigateBack(m_CompletionData->iPad);
UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; StorageManager.RequestMessageBox( IDS_CONNECTION_FAILED, IDS_CONNECTION_LOST_SERVER, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); app.NavigateToHomeMenu(); ui.UpdatePlayerBasePositions(); } } else { if(( m_CompletionData->bRequiresUserAction == TRUE ) && (!m_bWasCancelled)) { m_threadCompleted = true; m_buttonConfirm.SetShow( TRUE ); m_buttonConfirm.SetFocus( ProfileManager.GetPrimaryPad() ); ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT, -1, -1, -1 ); } else { if(m_bWasCancelled) { m_threadCompleted = true; } app.DebugPrintf("FullScreenProgress complete with action: "); switch(m_CompletionData->type) { case e_ProgressCompletion_AutosaveNavigateBack: app.DebugPrintf("e_ProgressCompletion_AutosaveNavigateBack\n"); { // store these - they get wiped by the destroy caused by navigateback int iPad=m_CompletionData->iPad; //bool bAutosaveWasMenuDisplayed=m_CompletionData->bAutosaveWasMenuDisplayed; CXuiSceneBase::ShowBackground( iPad, FALSE ); CXuiSceneBase::ShowLogo(iPad, FALSE ); app.NavigateBack(iPad);
// 4J Stu - Fix for #65437 - Customer Encountered: Code: Settings: Autosave option doesn't work when the Host goes into idle state during gameplay. // Autosave obviously cannot occur if an ignore autosave menu is displayed, so even if we navigate back to a scene and not empty // then we still want to reset this flag which was set true by the navigate to the fullscreen progress app.SetIgnoreAutosaveMenuDisplayed(iPad, false);
// the navigate back leaves SetMenuDisplayed as true, but there may not have been a menu up when autosave was kicked off// if(bAutosaveWasMenuDisplayed==false)// {// app.SetMenuDisplayed(iPad,false);// } // Show the other players scenes CXuiSceneBase::ShowOtherPlayersBaseScene(iPad, true); // This just allows it to be shown Minecraft *pMinecraft = Minecraft::GetInstance(); if(pMinecraft->localgameModes[ProfileManager.GetPrimaryPad()] != NULL) pMinecraft->localgameModes[ProfileManager.GetPrimaryPad()]->getTutorial()->showTutorialPopup(true); ui.UpdatePlayerBasePositions(); } break;
case e_ProgressCompletion_NavigateBack: app.DebugPrintf("e_ProgressCompletion_NavigateBack\n"); { // store these - they get wiped by the destroy caused by navigateback int iPad=m_CompletionData->iPad; CXuiSceneBase::ShowBackground( iPad, FALSE ); CXuiSceneBase::ShowBackground( iPad, TRUE ); app.NavigateBack(iPad); // Show the other players scenes CXuiSceneBase::ShowOtherPlayersBaseScene(iPad, true); ui.UpdatePlayerBasePositions(); } break; case e_ProgressCompletion_NavigateBackToScene: app.DebugPrintf("e_ProgressCompletion_NavigateBackToScene\n"); CXuiSceneBase::ShowBackground( m_CompletionData->iPad, FALSE ); CXuiSceneBase::ShowBackground( m_CompletionData->iPad, TRUE ); CXuiSceneBase::ShowOtherPlayersBaseScene(m_CompletionData->iPad, true); // If the pause menu is still active, then navigate back // Otherwise close everything then navigate forwads to the pause menu if(app.IsSceneInStack(m_CompletionData->iPad, m_CompletionData->scene)) { app.NavigateBack(m_CompletionData->iPad,false, m_CompletionData->scene); } else { app.CloseXuiScenesAndNavigateToScene(m_CompletionData->iPad,m_CompletionData->scene); } ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_CloseUIScenes: app.DebugPrintf("e_ProgressCompletion_CloseUIScenes\n"); app.CloseXuiScenes(m_CompletionData->iPad); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_CloseAllPlayersUIScenes: app.DebugPrintf("e_ProgressCompletion_CloseAllPlayersUIScenes\n"); app.CloseAllPlayersXuiScenes(); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_NavigateToHomeMenu: app.DebugPrintf("e_ProgressCompletion_NavigateToHomeMenu\n"); app.NavigateToHomeMenu(); //ui.UpdatePlayerBasePositions(); break; default: app.DebugPrintf("Default\n"); break; } } } } else { switch(pTimer->nId) { case TIMER_FULLSCREEN_PROGRESS: break; case TIMER_FULLSCREEN_TIPS: { // display the next tip wstring wsText=app.FormatHTMLString(m_iPad,app.GetString(app.GetNextTip())); wchar_t startTags[64]; swprintf(startTags,64,L"<font color=\"#%08x\" size=14><DIV ALIGN=CENTER>",app.GetHTMLColour(eHTMLColor_White)); wsText= startTags + wsText + L"</DIV>"; XuiControlSetText(m_tip,wsText.c_str()); } break; } } bHandled = TRUE; return( S_OK );}