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.
11 kB · 378 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378#include "stdafx.h"#include "UI.h"#include "UIScene_FullscreenProgress.h"#include "..\..\Minecraft.h"#include "..\..\ProgressRenderer.h"
UIScene_FullscreenProgress::UIScene_FullscreenProgress(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer){ // Setup all the Iggy references we need for this scene initialiseMovie();
parentLayer->addComponent(iPad,eUIComponent_Panorama); parentLayer->addComponent(iPad,eUIComponent_Logo); parentLayer->showComponent(iPad,eUIComponent_Logo,true); parentLayer->showComponent(iPad,eUIComponent_MenuBackground,false);
m_controlTimer.setVisible( false );
m_titleText = L""; m_statusText = L"";
m_lastTitle = -1; m_lastStatus = -1; m_lastProgress = 0;
m_buttonConfirm.init( app.GetString( IDS_CONFIRM_OK ), eControl_Confirm ); m_buttonConfirm.setVisible(false);
LoadingInputParams *params = (LoadingInputParams *)initData;
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_cancelText = params->cancelText; m_bWasCancelled=false; m_bWaitForThreadToDelete = params->waitForThreadToDelete;
// Clear the progress text Minecraft *pMinecraft=Minecraft::GetInstance(); pMinecraft->progressRenderer->progressStart(-1); pMinecraft->progressRenderer->progressStage(-1); m_progressBar.init(L"",0,0,100,0);
// set the tip wstring wsText= app.FormatHTMLString(m_iPad,app.GetString(app.GetNextTip()));
wchar_t startTags[64]; swprintf(startTags,64,L"<font color=\"#%08x\"><p align=center>",app.GetHTMLColour(eHTMLColor_White)); wsText= startTags + wsText + L"</p>"; m_labelTip.init(wsText);
addTimer(TIMER_FULLSCREEN_TIPS, TIMER_FULLSCREEN_TIPS_TIME);
m_labelTitle.init(L"");
m_labelTip.setVisible( m_CompletionData->bShowTips );
thread = new C4JThread(params->func, params->lpParam, "FullscreenProgress"); thread->SetProcessor(CPU_CORE_UI_SCENE); // TODO 4J Stu - Make sure this is a good thread/core to use
m_threadCompleted = false; thread->Run(); threadStarted = true;
#ifdef __PSVITA__ ui.TouchBoxRebuild(this);#endif
#ifdef _XBOX_ONE ui.ShowPlayerDisplayname(false);#endif}
UIScene_FullscreenProgress::~UIScene_FullscreenProgress(){ m_parentLayer->removeComponent(eUIComponent_Panorama); m_parentLayer->removeComponent(eUIComponent_Logo);
delete thread;
delete m_CompletionData;}
wstring UIScene_FullscreenProgress::getMoviePath(){ return L"FullscreenProgress";}
void UIScene_FullscreenProgress::updateTooltips(){ ui.SetTooltips( m_parentLayer->IsFullscreenGroup()?XUSER_INDEX_ANY:m_iPad, m_threadCompleted?IDS_TOOLTIPS_SELECT:-1, m_threadCompleted?-1:m_cancelText, -1, -1 );}
void UIScene_FullscreenProgress::handleDestroy(){ int code = thread->GetExitCode(); DWORD exitcode = *((DWORD *)&code);
// If we're active, have a cancel func, and haven't already cancelled, call cancel func if( exitcode == STILL_ACTIVE && m_cancelFunc != NULL && !m_bWasCancelled) { m_bWasCancelled = true; m_cancelFunc(m_cancelFuncParam); }}
void UIScene_FullscreenProgress::tick(){ UIScene::tick();
Minecraft *pMinecraft=Minecraft::GetInstance();
int currentProgress = pMinecraft->progressRenderer->getCurrentPercent(); if(currentProgress < 0) currentProgress = 0; if(currentProgress != m_lastProgress) { m_lastProgress = currentProgress; m_progressBar.setProgress(currentProgress); //app.DebugPrintf("Updated progress value\n"); }
int title = pMinecraft->progressRenderer->getCurrentTitle(); if(title >= 0 && title != m_lastTitle) { m_lastTitle = title; m_titleText = app.GetString( title ); m_labelTitle.setLabel(m_titleText); }
ProgressRenderer::eProgressStringType eProgressType=pMinecraft->progressRenderer->getType();
if(eProgressType==ProgressRenderer::eProgressStringType_ID) { int status = pMinecraft->progressRenderer->getCurrentStatus(); if(status >= 0 && status != m_lastStatus) { m_lastStatus = status; m_statusText = app.GetString( status ); m_progressBar.setLabel(m_statusText.c_str()); } } else { wstring& wstrText = pMinecraft->progressRenderer->getProgressString(); m_progressBar.setLabel(wstrText.c_str()); }
int code = thread->GetExitCode(); DWORD exitcode = *((DWORD *)&code);
//app.DebugPrintf("CScene_FullscreenProgress Timer %d\n",pTimer->nId);
if( exitcode != STILL_ACTIVE ) { // 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; ui.RequestErrorMessage( g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_FAILED), g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_SERVER), uiIDA,1, XUSER_INDEX_ANY);
ui.NavigateToHomeMenu(); ui.UpdatePlayerBasePositions(); } } else { if(( m_CompletionData->bRequiresUserAction == TRUE ) && (!m_bWasCancelled)) { m_threadCompleted = true; m_buttonConfirm.setVisible( true ); // 4J-TomK - rebuild touch after confirm button made visible again#ifdef __PSVITA__ ui.TouchBoxRebuild(this);#endif updateTooltips(); } 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"); { // 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 ui.SetIgnoreAutosaveMenuDisplayed(m_iPad, false);
// 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(); navigateBack(); } break;
case e_ProgressCompletion_NavigateBack: app.DebugPrintf("e_ProgressCompletion_NavigateBack\n"); { ui.UpdatePlayerBasePositions(); navigateBack(); } break; case e_ProgressCompletion_NavigateBackToScene: app.DebugPrintf("e_ProgressCompletion_NavigateBackToScene\n"); ui.UpdatePlayerBasePositions(); // 4J Stu - If used correctly this scene will not have interfered with any other scene at all, so just navigate back navigateBack(); break; case e_ProgressCompletion_CloseUIScenes: app.DebugPrintf("e_ProgressCompletion_CloseUIScenes\n"); ui.CloseUIScenes(m_CompletionData->iPad); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_CloseAllPlayersUIScenes: app.DebugPrintf("e_ProgressCompletion_CloseAllPlayersUIScenes\n"); ui.CloseAllPlayersScenes(); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_NavigateToHomeMenu: app.DebugPrintf("e_ProgressCompletion_NavigateToHomeMenu\n"); ui.NavigateToHomeMenu(); ui.UpdatePlayerBasePositions(); break; default: app.DebugPrintf("Default\n"); break; } } } }}
void UIScene_FullscreenProgress::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled){ //if( m_showTooltips ) { //ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
switch(key) { case ACTION_MENU_OK:#ifdef __ORBIS__ case ACTION_MENU_TOUCHPAD_PRESS:#endif if(pressed) { sendInputToMovie(key, repeat, pressed, released); } break; case ACTION_MENU_B: case ACTION_MENU_CANCEL: if( pressed && m_cancelFunc != NULL && !m_bWasCancelled ) { m_bWasCancelled = true; m_cancelFunc( m_cancelFuncParam ); } break; } }}
void UIScene_FullscreenProgress::handlePress(F64 controlId, F64 childId){ if(m_threadCompleted && (int)controlId == eControl_Confirm) { // This assumes all buttons can only be pressed with the A button ui.AnimateKeyPress(m_iPad, ACTION_MENU_A, false, true, false);
// if there's a complete function, call it if(m_completeFunc) { m_completeFunc(m_completeFuncParam); }
switch(m_CompletionData->type) { case e_ProgressCompletion_NavigateBack: app.DebugPrintf("e_ProgressCompletion_NavigateBack\n"); { ui.UpdatePlayerBasePositions(); navigateBack(); } break; case e_ProgressCompletion_NavigateBackToScene: app.DebugPrintf("e_ProgressCompletion_NavigateBackToScene\n"); ui.UpdatePlayerBasePositions(); // 4J Stu - If used correctly this scene will not have interfered with any other scene at all, so just navigate back navigateBack(); break; case e_ProgressCompletion_CloseUIScenes: app.DebugPrintf("e_ProgressCompletion_CloseUIScenes\n"); ui.CloseUIScenes(m_CompletionData->iPad); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_CloseAllPlayersUIScenes: app.DebugPrintf("e_ProgressCompletion_CloseAllPlayersUIScenes\n"); ui.CloseAllPlayersScenes(); ui.UpdatePlayerBasePositions(); break; case e_ProgressCompletion_NavigateToHomeMenu: app.DebugPrintf("e_ProgressCompletion_NavigateToHomeMenu\n"); ui.NavigateToHomeMenu(); ui.UpdatePlayerBasePositions(); break; } }}
void UIScene_FullscreenProgress::handleTimerComplete(int id){ switch(id) { 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\"><p align=center>",app.GetHTMLColour(eHTMLColor_White)); wsText= startTags + wsText + L"</p>"; m_labelTip.setLabel(wsText); } break; } }
void UIScene_FullscreenProgress::SetWasCancelled(bool wasCancelled){ m_bWasCancelled = wasCancelled;}
bool UIScene_FullscreenProgress::isReadyToDelete(){ if( m_bWaitForThreadToDelete ) { return !thread->isRunning(); } else { return true; }}