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.
39 kB · 1444 lines
C++
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444#include "stdafx.h"#include "XUI_SkinSelect.h"#include "XUI_Ctrl_MinecraftSkinPreview.h"
#define SKIN_SELECT_PACK_DEFAULT 0#define SKIN_SELECT_PACK_FAVORITES 1//#define SKIN_SELECT_PACK_PLAYER_CUSTOM 1#define SKIN_SELECT_MAX_DEFAULTS 2
WCHAR *CScene_SkinSelect::wchDefaultNamesA[]={ L"USE LOCALISED VERSION", // Server selected L"Steve", L"Tennis Steve", L"Tuxedo Steve", L"Athlete Steve", L"Scottish Steve", L"Prisoner Steve", L"Cyclist Steve", L"Boxer Steve",};
//----------------------------------------------------------------------------------// Performs initialization tasks - retrieves controls.//----------------------------------------------------------------------------------HRESULT CScene_SkinSelect::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ){ m_iPad=*(int *)pInitData->pvInitData; // if we're not in the game, we need to use basescene 0 bool bNotInGame=(Minecraft::GetInstance()->level==NULL); m_bIgnoreInput=false;
// 4J Stu - Added this so that we have skins loaded // 4J-PB - Need to check for installed DLC //if( (!app.DLCInstalled() || app.m_dlcManager.NeedsUpdated()) && !app.DLCInstallPending()) app.StartInstallDLCProcess(m_iPad);
// StartInstallDLCProcess will check for all conditions within the call MapChildControls();
m_selectedText.SetText( app.GetString( IDS_SELECTED ) );
updateClipping();
m_packIndex = SKIN_SELECT_PACK_DEFAULT; m_skinIndex = 0; m_currentSkinPath = app.GetPlayerSkinName(m_iPad); m_originalSkinId = app.GetPlayerSkinId(m_iPad); m_currentPack = NULL; m_bSlidingSkins = false; m_bAnimatingMove = false; currentPackCount = 0;
m_currentNavigation = eSkinNavigation_Skin; m_normalTabs.SetShow( TRUE ); m_selectedTabs.SetShow( FALSE ); m_packLeft.SetEnable(FALSE); m_packRight.SetEnable(FALSE);
for(BYTE i = 0; i < sidePreviewControls; ++i) { //m_previewNextControl->SetAutoRotate(true); m_previewNextControls[i]->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Left); //m_previewPreviousControl->SetAutoRotate(true); m_previewPreviousControls[i]->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Right); }
// block input if we're waiting for DLC to install. The end of dlc mounting custom message will fill the save list if(app.StartInstallDLCProcess(m_iPad)) { // DLC mounting in progress, so disable input m_bIgnoreInput=true; m_timer.SetShow( TRUE ); m_charactersGroup.SetShow( FALSE ); m_skinDetails.SetShow( FALSE ); m_imagePadlock.SetShow( FALSE ); m_selectedGroup.SetShow( FALSE ); } else { m_timer.SetShow( FALSE );
if(app.m_dlcManager.getPackCount(DLCManager::e_DLCType_Skin)>0) { // Change to display the favorites if there are any. The current skin will be in there (probably) - need to check for it m_currentPack = app.m_dlcManager.getPackContainingSkin(m_currentSkinPath); bool bFound; if(m_currentPack != NULL) { m_packIndex = app.m_dlcManager.getPackIndex(m_currentPack,bFound,DLCManager::e_DLCType_Skin) + SKIN_SELECT_MAX_DEFAULTS; } }
// If we have any favourites, set this to the favourites // first validate the favorite skins - we might have uninstalled the DLC needed for them app.ValidateFavoriteSkins(m_iPad);
if(app.GetPlayerFavoriteSkinsCount(m_iPad)>0) { m_packIndex = SKIN_SELECT_PACK_FAVORITES; }
handlePackIndexChanged(); updateCurrentFocus(); }
// Display the tooltips
// if we're not in the game, we need to use basescene 0 if(bNotInGame) { ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT_SKIN,IDS_TOOLTIPS_CANCEL,-1,-1,-1,-1,-1,-1,IDS_TOOLTIPS_NAVIGATE); CXuiSceneBase::ShowBackground( DEFAULT_XUI_MENU_USER, TRUE ); } else { ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT_SKIN,IDS_TOOLTIPS_CANCEL,-1,-1,-1,-1,-1,-1,IDS_TOOLTIPS_NAVIGATE); CXuiSceneBase::ShowBackground( m_iPad, FALSE ); CXuiSceneBase::ShowDarkOverlay( m_iPad, TRUE ); }
if(app.GetLocalPlayerCount()>1) { app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad, false); CXuiSceneBase::ShowLogo( m_iPad, FALSE ); } else { if(bNotInGame) { CXuiSceneBase::ShowLogo( DEFAULT_XUI_MENU_USER, FALSE ); } else { CXuiSceneBase::ShowLogo( m_iPad, FALSE ); } }
return S_OK;}
HRESULT CScene_SkinSelect::OnKeyUp(XUIMessageInput* pInputData, BOOL& rfHandled){ if(m_bIgnoreInput) return S_OK;
switch(pInputData->dwKeyCode) { case VK_PAD_RTHUMB_LEFT: m_previewControl->m_incYRot = false; break; case VK_PAD_RTHUMB_RIGHT: m_previewControl->m_decYRot = false; break; case VK_PAD_RTHUMB_UP: //m_previewControl->m_incXRot = false; break; case VK_PAD_RTHUMB_DOWN: //m_previewControl->m_decXRot = false; break; case VK_PAD_RTHUMB_UPLEFT: m_previewControl->m_incYRot = false; //m_previewControl->m_incXRot = false; break; case VK_PAD_RTHUMB_UPRIGHT: m_previewControl->m_decYRot = false; //m_previewControl->m_incXRot = false; break; case VK_PAD_RTHUMB_DOWNRIGHT: m_previewControl->m_decYRot = false; //m_previewControl->m_decXRot = false; break; case VK_PAD_RTHUMB_DOWNLEFT: m_previewControl->m_incYRot = false; //m_previewControl->m_decXRot = false; break; } return S_OK;}
HRESULT CScene_SkinSelect::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled){ if(m_bIgnoreInput) return S_OK;
// 4J Stu - We don't want the press anim to play for the scrolling unless we are actually scrolling //ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
// ignore any key press if we are animating a move //if(m_bAnimatingMove) return S_OK;
HRESULT hr=S_OK;
// Explicitly handle B button presses switch(pInputData->dwKeyCode) { case VK_PAD_A: ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); // if the profile data has been changed, then force a profile write // It seems we're allowed to break the 5 minute rule if it's the result of a user action switch(m_packIndex) { case SKIN_SELECT_PACK_DEFAULT: app.SetPlayerSkin(pInputData->UserIndex, m_skinIndex); app.SetPlayerCape(pInputData->UserIndex, 0); m_currentSkinPath = app.GetPlayerSkinName(m_iPad); m_originalSkinId = app.GetPlayerSkinId(m_iPad); m_selectedGroup.SetShow( TRUE ); CXuiSceneBase::PlayUISFX(eSFX_Press); break; case SKIN_SELECT_PACK_FAVORITES: if(app.GetPlayerFavoriteSkinsCount(m_iPad)>0) { // get the pack number from the skin id wchar_t chars[256]; swprintf(chars, 256, L"dlcskin%08d.png", app.GetPlayerFavoriteSkin(m_iPad,m_skinIndex));
DLCPack *Pack=app.m_dlcManager.getPackContainingSkin(chars);
if(Pack) { DLCSkinFile *skinFile = Pack->getSkinFile(chars); app.SetPlayerSkin(pInputData->UserIndex, skinFile->getPath()); app.SetPlayerCape(pInputData->UserIndex, skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape)); m_selectedGroup.SetShow( TRUE ); m_currentSkinPath = app.GetPlayerSkinName(m_iPad); m_originalSkinId = app.GetPlayerSkinId(m_iPad); app.SetPlayerFavoriteSkinsPos(m_iPad,m_skinIndex); } } break; default: if( m_currentPack != NULL ) { DLCSkinFile *skinFile = m_currentPack->getSkinFile(m_skinIndex); // Is this a free skin?
if(!skinFile->getParameterAsBool( DLCManager::e_DLCParamType_Free )) { // do we have a license? if(!m_currentPack->hasPurchasedFile( DLCManager::e_DLCType_Skin, skinFile->getPath() )) { // no UINT uiIDA[1]; uiIDA[0]=IDS_OK;
// We need to upsell the full version if(ProfileManager.IsGuest(m_iPad)) { // can't buy StorageManager.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } // are we online? else if(!ProfileManager.IsSignedInLive(pInputData->UserIndex)) { // need to be signed in to live StorageManager.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); } else { // upsell
DLC_INFO *pDLCInfo = app.GetDLCInfoForTrialOfferID(m_currentPack->getPurchaseOfferId()); ULONGLONG ullOfferID_Full;
if(pDLCInfo!=NULL) { ullOfferID_Full=pDLCInfo->ullOfferID_Full; } else { ullOfferID_Full=m_currentPack->getPurchaseOfferId(); }
// tell sentient about the upsell of the full version of the skin pack TelemetryManager->RecordUpsellPresented(pInputData->UserIndex, eSet_UpsellID_Skin_DLC, ullOfferID_Full & 0xFFFFFFFF);
UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL;
StorageManager.RequestMessageBox(IDS_UNLOCK_DLC_TITLE, IDS_UNLOCK_DLC_SKIN, uiIDA, 2, pInputData->UserIndex,&CScene_SkinSelect::UnlockSkinReturned,this,app.GetStringTable()); } } else { app.SetPlayerSkin(pInputData->UserIndex, skinFile->getPath()); app.SetPlayerCape(pInputData->UserIndex, skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape)); m_selectedGroup.SetShow( TRUE ); m_currentSkinPath = app.GetPlayerSkinName(m_iPad); m_originalSkinId = app.GetPlayerSkinId(m_iPad);
// push this onto the favorite list AddFavoriteSkin(m_iPad,GET_DLC_SKIN_ID_FROM_BITMASK(m_originalSkinId)); } } else { app.SetPlayerSkin(pInputData->UserIndex, skinFile->getPath()); app.SetPlayerCape(pInputData->UserIndex, skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape)); m_selectedGroup.SetShow( TRUE ); m_currentSkinPath = app.GetPlayerSkinName(m_iPad); m_originalSkinId = app.GetPlayerSkinId(m_iPad);
// push this onto the favorite list AddFavoriteSkin(m_iPad,GET_DLC_SKIN_ID_FROM_BITMASK(m_originalSkinId));
} }
CXuiSceneBase::PlayUISFX(eSFX_Press); break; } break; case VK_PAD_B: case VK_ESCAPE: ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); app.CheckGameSettingsChanged(true,pInputData->UserIndex);
app.NavigateBack(pInputData->UserIndex); rfHandled = TRUE; break;#if 0 case VK_PAD_RSHOULDER: { DWORD startingIndex = m_packIndex; m_packIndex = getNextPackIndex(m_packIndex); if(startingIndex != m_packIndex) { handlePackIndexChanged(); } } break; case VK_PAD_LSHOULDER: { DWORD startingIndex = m_packIndex; m_packIndex = getPreviousPackIndex(m_packIndex); if(startingIndex != m_packIndex) { handlePackIndexChanged(); } } break;#endif case VK_PAD_DPAD_UP: case VK_PAD_LTHUMB_UP: case VK_PAD_DPAD_DOWN: case VK_PAD_LTHUMB_DOWN: { if(m_packIndex==SKIN_SELECT_PACK_FAVORITES) { if(app.GetPlayerFavoriteSkinsCount(m_iPad)==0) { // ignore this, since there are no skins being displayed break; } } ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); CXuiSceneBase::PlayUISFX(eSFX_Scroll); switch(m_currentNavigation) { case eSkinNavigation_Pack: m_currentNavigation = eSkinNavigation_Skin; break; case eSkinNavigation_Skin: m_currentNavigation = eSkinNavigation_Pack; break; }; updateCurrentFocus(); } break; case VK_PAD_DPAD_LEFT: case VK_PAD_LTHUMB_LEFT: { if( m_currentNavigation == eSkinNavigation_Skin ) { if(!m_bAnimatingMove) { ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); CXuiSceneBase::PlayUISFX(eSFX_Scroll); m_skinIndex = getPreviousSkinIndex(m_skinIndex); //handleSkinIndexChanged();
m_bSlidingSkins = true; m_bAnimatingMove = true;
m_previewControl->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Left, true); m_previewPreviousControls[0]->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Forward, true);
int startFrame, endFrame; HRESULT hr = m_charactersGroup.FindNamedFrame(L"CycleRight", &startFrame); hr = m_charactersGroup.FindNamedFrame( L"EndCycleRight", &endFrame); hr = m_charactersGroup.PlayTimeline(startFrame, startFrame,endFrame,FALSE,FALSE); } } else if( m_currentNavigation == eSkinNavigation_Pack ) { ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); CXuiSceneBase::PlayUISFX(eSFX_Scroll); DWORD startingIndex = m_packIndex; m_packIndex = getPreviousPackIndex(m_packIndex); if(startingIndex != m_packIndex) { handlePackIndexChanged(); } } } break; case VK_PAD_DPAD_RIGHT: case VK_PAD_LTHUMB_RIGHT: { if( m_currentNavigation == eSkinNavigation_Skin ) { if(!m_bAnimatingMove) { ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); CXuiSceneBase::PlayUISFX(eSFX_Scroll); m_skinIndex = getNextSkinIndex(m_skinIndex); //handleSkinIndexChanged();
m_bSlidingSkins = true; m_bAnimatingMove = true;
m_previewControl->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Right, true); m_previewNextControls[0]->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Forward, true);
int startFrame, endFrame; HRESULT hr = m_charactersGroup.FindNamedFrame(L"CycleLeft", &startFrame); hr = m_charactersGroup.FindNamedFrame( L"EndCycleLeft", &endFrame); hr = m_charactersGroup.PlayTimeline(startFrame, startFrame,endFrame,FALSE,FALSE); } } else if( m_currentNavigation == eSkinNavigation_Pack ) { ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); CXuiSceneBase::PlayUISFX(eSFX_Scroll); DWORD startingIndex = m_packIndex; m_packIndex = getNextPackIndex(m_packIndex); if(startingIndex != m_packIndex) { handlePackIndexChanged(); } } } break; case VK_PAD_RTHUMB_PRESS: CXuiSceneBase::PlayUISFX(eSFX_Press); if( m_currentNavigation == eSkinNavigation_Skin ) { m_previewControl->ResetRotation(); } break; case VK_PAD_RTHUMB_LEFT: if( m_currentNavigation == eSkinNavigation_Skin ) { m_previewControl->m_incYRot = true; } else { CXuiSceneBase::PlayUISFX(eSFX_Scroll); } break; case VK_PAD_RTHUMB_RIGHT: if( m_currentNavigation == eSkinNavigation_Skin ) { m_previewControl->m_decYRot = true; } else { CXuiSceneBase::PlayUISFX(eSFX_Scroll); } break; case VK_PAD_RTHUMB_UP: if( m_currentNavigation == eSkinNavigation_Skin ) { //m_previewControl->m_incXRot = true; m_previewControl->CyclePreviousAnimation(); } else { CXuiSceneBase::PlayUISFX(eSFX_Scroll); } break; case VK_PAD_RTHUMB_DOWN: if( m_currentNavigation == eSkinNavigation_Skin ) { //m_previewControl->m_decXRot = true; m_previewControl->CycleNextAnimation(); } else { CXuiSceneBase::PlayUISFX(eSFX_Scroll); } break; case VK_PAD_RTHUMB_UPLEFT: if( m_currentNavigation == eSkinNavigation_Skin ) { m_previewControl->m_incYRot = true; //m_previewControl->m_incXRot = true; } else { CXuiSceneBase::PlayUISFX(eSFX_Scroll); } break; case VK_PAD_RTHUMB_UPRIGHT: if( m_currentNavigation == eSkinNavigation_Skin ) { m_previewControl->m_decYRot = true; //m_previewControl->m_incXRot = true; } else { CXuiSceneBase::PlayUISFX(eSFX_Scroll); } break; case VK_PAD_RTHUMB_DOWNRIGHT: if( m_currentNavigation == eSkinNavigation_Skin ) { m_previewControl->m_decYRot = true; //m_previewControl->m_decXRot = true; } else { CXuiSceneBase::PlayUISFX(eSFX_Scroll); } break; case VK_PAD_RTHUMB_DOWNLEFT: if( m_currentNavigation == eSkinNavigation_Skin ) { m_previewControl->m_incYRot = true; //m_previewControl->m_decXRot = true; } else { CXuiSceneBase::PlayUISFX(eSFX_Scroll); } break; }
return hr;}
//----------------------------------------------------------------------------------// Handler for the button press message.//----------------------------------------------------------------------------------HRESULT CScene_SkinSelect::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled){ if(m_bIgnoreInput) return S_OK;
// This assumes all buttons can only be pressed with the A button ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A);
return S_OK;}
HRESULT CScene_SkinSelect::OnTransitionStart( XUIMessageTransition *pTransition, BOOL& bHandled ){ if(pTransition->dwTransAction==XUI_TRANSITION_ACTION_DESTROY ) return S_OK;
if(pTransition->dwTransType == XUI_TRANSITION_TO || pTransition->dwTransType == XUI_TRANSITION_BACKTO) {
}
return S_OK;}
HRESULT CScene_SkinSelect::OnTimelineEnd(HXUIOBJ hObjSource, BOOL& bHandled){ if( hObjSource == m_charactersGroup ) { if(m_bSlidingSkins) { m_bSlidingSkins = false;
int startFrame, endFrame; HRESULT hr = m_charactersGroup.FindNamedFrame(L"Normal", &startFrame); hr = m_charactersGroup.FindNamedFrame( L"Normal", &endFrame); hr = m_charactersGroup.PlayTimeline(startFrame, startFrame,endFrame,FALSE,FALSE); } else { m_previewControl->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Forward, false); m_previewNextControls[0]->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Left, false); m_previewPreviousControls[0]->SetFacing(CXuiCtrlMinecraftSkinPreview::e_SkinPreviewFacing_Right, false);
handleSkinIndexChanged();
m_bAnimatingMove = false;
bHandled = TRUE; } } return S_OK;}
HRESULT CScene_SkinSelect::OnCustomMessage_Splitscreenplayer(bool bJoining, BOOL& bHandled){ bHandled=true; return app.AdjustSplitscreenScene_PlayerChanged(m_hObj,&m_OriginalPosition,m_iPad,bJoining,false);}
HRESULT CScene_SkinSelect::OnBasePositionChanged(){ updateClipping();
return S_OK;}
void CScene_SkinSelect::handleSkinIndexChanged(){ BOOL showPrevious = FALSE, showNext = FALSE; DWORD previousIndex = 0, nextIndex = 0; wstring skinName = L""; wstring skinOrigin = L""; bool bSkinIsFree=false; bool bLicensed=false; DLCSkinFile *skinFile=NULL; DLCPack *Pack=NULL; BYTE sidePreviewControlsL,sidePreviewControlsR; bool bNoSkinsToShow=false;
TEXTURE_NAME backupTexture = TN_MOB_CHAR; m_selectedGroup.SetShow( FALSE ); m_skinDetails.SetShow( FALSE );
if( m_currentPack != NULL ) { skinFile = m_currentPack->getSkinFile(m_skinIndex); m_selectedSkinPath = skinFile->getPath(); m_selectedCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape); m_vAdditionalSkinBoxes = skinFile->getAdditionalBoxes(); skinName = skinFile->getParameterAsString( DLCManager::e_DLCParamType_DisplayName ); skinOrigin = skinFile->getParameterAsString( DLCManager::e_DLCParamType_ThemeName );
if( m_selectedSkinPath.compare( m_currentSkinPath ) == 0 ) { m_selectedGroup.SetShow( TRUE ); } else { m_selectedGroup.SetShow( FALSE ); } bSkinIsFree = skinFile->getParameterAsBool( DLCManager::e_DLCParamType_Free ); bLicensed = m_currentPack->hasPurchasedFile( DLCManager::e_DLCType_Skin, m_selectedSkinPath );
m_imagePadlock.SetShow( (bSkinIsFree || bLicensed) ?FALSE:TRUE ); m_previewControl->SetShow(TRUE); m_skinDetails.SetShow( TRUE ); } else { m_selectedSkinPath = L""; m_selectedCapePath = L""; m_vAdditionalSkinBoxes = NULL;
switch(m_packIndex) { case SKIN_SELECT_PACK_DEFAULT: backupTexture = getTextureId(m_skinIndex);
if( m_skinIndex == eDefaultSkins_ServerSelected ) { skinName = app.GetString(IDS_DEFAULT_SKINS); } else { skinName = wchDefaultNamesA[m_skinIndex]; }
if( m_originalSkinId == m_skinIndex ) { m_selectedGroup.SetShow( TRUE ); } else { m_selectedGroup.SetShow( FALSE ); } m_imagePadlock.SetShow( FALSE ); m_previewControl->SetShow(TRUE); m_skinDetails.SetShow( TRUE );
break; case SKIN_SELECT_PACK_FAVORITES:
if(app.GetPlayerFavoriteSkinsCount(m_iPad)>0) { // get the pack number from the skin id wchar_t chars[256]; swprintf(chars, 256, L"dlcskin%08d.png", app.GetPlayerFavoriteSkin(m_iPad,m_skinIndex));
Pack=app.m_dlcManager.getPackContainingSkin(chars); if(Pack) { skinFile = Pack->getSkinFile(chars);
m_selectedSkinPath = skinFile->getPath(); m_selectedCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape); m_vAdditionalSkinBoxes = skinFile->getAdditionalBoxes();
skinName = skinFile->getParameterAsString( DLCManager::e_DLCParamType_DisplayName ); skinOrigin = skinFile->getParameterAsString( DLCManager::e_DLCParamType_ThemeName );
if( m_selectedSkinPath.compare( m_currentSkinPath ) == 0 ) { m_selectedGroup.SetShow( TRUE ); } else { m_selectedGroup.SetShow( FALSE ); }
bSkinIsFree = skinFile->getParameterAsBool( DLCManager::e_DLCParamType_Free ); bLicensed = Pack->hasPurchasedFile( DLCManager::e_DLCType_Skin, m_selectedSkinPath );
m_imagePadlock.SetShow( (bSkinIsFree || bLicensed) ?FALSE:TRUE ); m_skinDetails.SetShow( TRUE ); } else { m_selectedGroup.SetShow( FALSE ); m_imagePadlock.SetShow( FALSE ); } } else { //disable the display m_previewControl->SetShow(FALSE); // change the tooltips bNoSkinsToShow=true; } break;
} } m_text.SetText(skinName.c_str()); m_originText.SetText(skinOrigin.c_str());
if(m_vAdditionalSkinBoxes && m_vAdditionalSkinBoxes->size()!=0) { // add the boxes to the humanoid model, but only if we've not done this already vector<ModelPart *> *pAdditionalModelParts = app.GetAdditionalModelParts(skinFile->getSkinID()); if(pAdditionalModelParts==NULL) { pAdditionalModelParts = app.SetAdditionalSkinBoxes(skinFile->getSkinID(),m_vAdditionalSkinBoxes); } }
if(skinFile!=NULL) { app.SetAnimOverrideBitmask(skinFile->getSkinID(),skinFile->getAnimOverrideBitmask()); }
m_previewControl->SetTexture(m_selectedSkinPath, backupTexture); m_previewControl->SetCapeTexture(m_selectedCapePath); showNext = TRUE; showPrevious = TRUE; nextIndex = getNextSkinIndex(m_skinIndex); previousIndex = getPreviousSkinIndex(m_skinIndex);
wstring otherSkinPath = L""; wstring otherCapePath = L""; vector<SKIN_BOX *> *othervAdditionalSkinBoxes=NULL; wchar_t chars[256];
// turn off all displays for(BYTE i = 0; i < sidePreviewControls; ++i) { m_previewNextControls[i]->SetShow(FALSE); m_previewPreviousControls[i]->SetShow(FALSE); }
unsigned int uiCurrentFavoriteC=app.GetPlayerFavoriteSkinsCount(m_iPad);
if(m_packIndex==SKIN_SELECT_PACK_FAVORITES) { // might not be enough to cycle through if(uiCurrentFavoriteC<((sidePreviewControls*2)+1)) { if(uiCurrentFavoriteC==0) { sidePreviewControlsL=sidePreviewControlsR=0; } // might be an odd number else if((uiCurrentFavoriteC-1)%2==1) { sidePreviewControlsL=1+(uiCurrentFavoriteC-1)/2; sidePreviewControlsR=(uiCurrentFavoriteC-1)/2; } else { sidePreviewControlsL=sidePreviewControlsR=(uiCurrentFavoriteC-1)/2; } } else { sidePreviewControlsL=sidePreviewControlsR=sidePreviewControls; } } else { sidePreviewControlsL=sidePreviewControlsR=sidePreviewControls; }
for(BYTE i = 0; i < sidePreviewControlsR; ++i) { if(showNext) { skinFile=NULL; m_previewNextControls[i]->SetShow(TRUE);
if( m_currentPack != NULL ) { skinFile = m_currentPack->getSkinFile(nextIndex); otherSkinPath = skinFile->getPath(); otherCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape); othervAdditionalSkinBoxes = skinFile->getAdditionalBoxes(); backupTexture = TN_MOB_CHAR; } else { otherSkinPath = L""; otherCapePath = L""; othervAdditionalSkinBoxes=NULL; switch(m_packIndex) { case SKIN_SELECT_PACK_DEFAULT: backupTexture = getTextureId(nextIndex); break; case SKIN_SELECT_PACK_FAVORITES: if(uiCurrentFavoriteC>0) { // get the pack number from the skin id swprintf(chars, 256, L"dlcskin%08d.png", app.GetPlayerFavoriteSkin(m_iPad,nextIndex));
Pack=app.m_dlcManager.getPackContainingSkin(chars); if(Pack) { skinFile = Pack->getSkinFile(chars);
otherSkinPath = skinFile->getPath(); otherCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape); othervAdditionalSkinBoxes = skinFile->getAdditionalBoxes(); backupTexture = TN_MOB_CHAR; } } break; default: break; }
} if(othervAdditionalSkinBoxes && othervAdditionalSkinBoxes->size()!=0) { vector<ModelPart *> *pAdditionalModelParts = app.GetAdditionalModelParts(skinFile->getSkinID()); if(pAdditionalModelParts==NULL) { pAdditionalModelParts = app.SetAdditionalSkinBoxes(skinFile->getSkinID(),othervAdditionalSkinBoxes); } } // 4J-PB - anim override needs set before SetTexture if(skinFile!=NULL) { app.SetAnimOverrideBitmask(skinFile->getSkinID(),skinFile->getAnimOverrideBitmask()); } m_previewNextControls[i]->SetTexture(otherSkinPath, backupTexture); m_previewNextControls[i]->SetCapeTexture(otherCapePath);
} nextIndex = getNextSkinIndex(nextIndex); }
for(BYTE i = 0; i < sidePreviewControlsL; ++i) { if(showPrevious) { skinFile=NULL; m_previewPreviousControls[i]->SetShow(TRUE);
if( m_currentPack != NULL ) { skinFile = m_currentPack->getSkinFile(previousIndex); otherSkinPath = skinFile->getPath(); otherCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape); othervAdditionalSkinBoxes = skinFile->getAdditionalBoxes(); backupTexture = TN_MOB_CHAR; } else { otherSkinPath = L""; otherCapePath = L""; othervAdditionalSkinBoxes=NULL; switch(m_packIndex) { case SKIN_SELECT_PACK_DEFAULT: backupTexture = getTextureId(previousIndex); break; case SKIN_SELECT_PACK_FAVORITES: if(uiCurrentFavoriteC>0) { // get the pack number from the skin id swprintf(chars, 256, L"dlcskin%08d.png", app.GetPlayerFavoriteSkin(m_iPad,previousIndex));
Pack=app.m_dlcManager.getPackContainingSkin(chars); if(Pack) { skinFile = Pack->getSkinFile(chars);
otherSkinPath = skinFile->getPath(); otherCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape); othervAdditionalSkinBoxes = skinFile->getAdditionalBoxes(); backupTexture = TN_MOB_CHAR; } }
break; default: break; } } if(othervAdditionalSkinBoxes && othervAdditionalSkinBoxes->size()!=0) { vector<ModelPart *> *pAdditionalModelParts = app.GetAdditionalModelParts(skinFile->getSkinID()); if(pAdditionalModelParts==NULL) { pAdditionalModelParts = app.SetAdditionalSkinBoxes(skinFile->getSkinID(),othervAdditionalSkinBoxes); } } // 4J-PB - anim override needs set before SetTexture if(skinFile) { app.SetAnimOverrideBitmask(skinFile->getSkinID(),skinFile->getAnimOverrideBitmask()); } m_previewPreviousControls[i]->SetTexture(otherSkinPath, backupTexture); m_previewPreviousControls[i]->SetCapeTexture(otherCapePath); } previousIndex = getPreviousSkinIndex(previousIndex); }
// update the tooltips bool bNotInGame=(Minecraft::GetInstance()->level==NULL);
if(bNoSkinsToShow) { if(bNotInGame) { ui.SetTooltips( DEFAULT_XUI_MENU_USER, -1,IDS_TOOLTIPS_CANCEL,-1,-1,-1,-1,-1,-1,IDS_TOOLTIPS_NAVIGATE); CXuiSceneBase::ShowBackground( DEFAULT_XUI_MENU_USER, TRUE ); } else { ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT_SKIN,IDS_TOOLTIPS_CANCEL,-1,-1,-1,-1,-1,-1,IDS_TOOLTIPS_NAVIGATE); CXuiSceneBase::ShowBackground( m_iPad, FALSE ); CXuiSceneBase::ShowDarkOverlay( m_iPad, TRUE ); }
} else { if(bNotInGame) { ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT_SKIN,IDS_TOOLTIPS_CANCEL,-1,-1,-1,-1,-1,-1,IDS_TOOLTIPS_NAVIGATE); CXuiSceneBase::ShowBackground( DEFAULT_XUI_MENU_USER, TRUE ); } else { ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT_SKIN,IDS_TOOLTIPS_CANCEL,-1,-1,-1,-1,-1,-1,IDS_TOOLTIPS_NAVIGATE); CXuiSceneBase::ShowBackground( m_iPad, FALSE ); CXuiSceneBase::ShowDarkOverlay( m_iPad, TRUE ); }
}
updateCurrentFocus();}
void CScene_SkinSelect::handlePackIndexChanged(){ if(m_packIndex >= SKIN_SELECT_MAX_DEFAULTS) { m_currentPack = app.m_dlcManager.getPack(m_packIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); } else { m_currentPack = NULL; } m_skinIndex = 0; if(m_currentPack != NULL) { bool found; DWORD currentSkinIndex = m_currentPack->getSkinIndexAt(m_currentSkinPath, found); if(found) m_skinIndex = currentSkinIndex; } else { switch(m_packIndex) { case SKIN_SELECT_PACK_DEFAULT: if( !GET_IS_DLC_SKIN_FROM_BITMASK(m_originalSkinId) ) { DWORD ugcSkinIndex = GET_UGC_SKIN_ID_FROM_BITMASK(m_originalSkinId); DWORD defaultSkinIndex = GET_DEFAULT_SKIN_ID_FROM_BITMASK(m_originalSkinId); if( ugcSkinIndex == 0 ) { m_skinIndex = (EDefaultSkins) defaultSkinIndex; } } break; case SKIN_SELECT_PACK_FAVORITES: if(app.GetPlayerFavoriteSkinsCount(m_iPad)>0) { bool found; wchar_t chars[256]; // get the pack number from the skin id swprintf(chars, 256, L"dlcskin%08d.png", app.GetPlayerFavoriteSkin(m_iPad,app.GetPlayerFavoriteSkinsPos(m_iPad)));
DLCPack *Pack=app.m_dlcManager.getPackContainingSkin(chars); if(Pack) { DWORD currentSkinIndex = Pack->getSkinIndexAt(m_currentSkinPath, found); if(found) m_skinIndex = app.GetPlayerFavoriteSkinsPos(m_iPad); } } break; default: break; } } handleSkinIndexChanged(); updatePackDisplay();}
void CScene_SkinSelect::updatePackDisplay(){ currentPackCount = app.m_dlcManager.getPackCount(DLCManager::e_DLCType_Skin) + SKIN_SELECT_MAX_DEFAULTS; m_packLeft.SetShow(TRUE); m_packRight.SetShow(TRUE); if(m_packIndex >= SKIN_SELECT_MAX_DEFAULTS) { DLCPack *thisPack = app.m_dlcManager.getPack(m_packIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); m_packCenter.SetText(thisPack->getName().c_str()); } else { switch(m_packIndex) { case SKIN_SELECT_PACK_DEFAULT: m_packCenter.SetText(app.GetString(IDS_NO_SKIN_PACK)); break; case SKIN_SELECT_PACK_FAVORITES: m_packCenter.SetText(app.GetString(IDS_FAVORITES_SKIN_PACK)); break; } }
int nextPackIndex = getNextPackIndex(m_packIndex); if(nextPackIndex >= SKIN_SELECT_MAX_DEFAULTS) { DLCPack *thisPack = app.m_dlcManager.getPack(nextPackIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); m_packRight.SetText(thisPack->getName().c_str()); } else { switch(nextPackIndex) { case SKIN_SELECT_PACK_DEFAULT: m_packRight.SetText(app.GetString(IDS_NO_SKIN_PACK)); break; case SKIN_SELECT_PACK_FAVORITES: m_packRight.SetText(app.GetString(IDS_FAVORITES_SKIN_PACK)); break; } }
int previousPackIndex = getPreviousPackIndex(m_packIndex); if(previousPackIndex >= SKIN_SELECT_MAX_DEFAULTS) { DLCPack *thisPack = app.m_dlcManager.getPack(previousPackIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); m_packLeft.SetText(thisPack->getName().c_str()); } else { switch(previousPackIndex) { case SKIN_SELECT_PACK_DEFAULT: m_packLeft.SetText(app.GetString(IDS_NO_SKIN_PACK)); break; case SKIN_SELECT_PACK_FAVORITES: m_packLeft.SetText(app.GetString(IDS_FAVORITES_SKIN_PACK)); break; } } }
void CScene_SkinSelect::updateCurrentFocus(){ XUITimeline *timeline; XUINamedFrame *startFrame; XuiElementGetTimeline( m_skinDetails.m_hObj, &timeline); switch(m_currentNavigation) { case eSkinNavigation_Pack: XuiElementSetUserFocus( m_packCenter.m_hObj, m_iPad ); startFrame = timeline->FindNamedFrame( L"Unselected" ); m_normalTabs.SetShow( FALSE ); m_selectedTabs.SetShow( TRUE ); m_packLeft.SetEnable(TRUE); m_packRight.SetEnable(TRUE); break; case eSkinNavigation_Skin: XuiElementSetUserFocus( m_skinDetails.m_hObj, m_iPad ); startFrame = timeline->FindNamedFrame( L"Selected" ); m_normalTabs.SetShow( TRUE ); m_selectedTabs.SetShow( FALSE ); m_packLeft.SetEnable(FALSE); m_packRight.SetEnable(FALSE); break; }; timeline->Play( startFrame->m_dwFrame, startFrame->m_dwFrame, startFrame->m_dwFrame, FALSE, FALSE );}
TEXTURE_NAME CScene_SkinSelect::getTextureId(int skinIndex){ TEXTURE_NAME texture = TN_MOB_CHAR; switch(skinIndex) { case eDefaultSkins_ServerSelected: case eDefaultSkins_Skin0: texture = TN_MOB_CHAR; break; case eDefaultSkins_Skin1: texture = TN_MOB_CHAR1; break; case eDefaultSkins_Skin2: texture = TN_MOB_CHAR2; break; case eDefaultSkins_Skin3: texture = TN_MOB_CHAR3; break; case eDefaultSkins_Skin4: texture = TN_MOB_CHAR4; break; case eDefaultSkins_Skin5: texture = TN_MOB_CHAR5; break; case eDefaultSkins_Skin6: texture = TN_MOB_CHAR6; break; case eDefaultSkins_Skin7: texture = TN_MOB_CHAR7; break; };
return texture;}
int CScene_SkinSelect::getNextSkinIndex(DWORD sourceIndex){ int nextSkin = sourceIndex;
// special case for favourites switch(m_packIndex) {
case SKIN_SELECT_PACK_FAVORITES: ++nextSkin; if(nextSkin>=app.GetPlayerFavoriteSkinsCount(m_iPad)) { nextSkin=0; } break; default: ++nextSkin;
if(m_packIndex == SKIN_SELECT_PACK_DEFAULT && nextSkin >= eDefaultSkins_Count) { nextSkin = eDefaultSkins_ServerSelected; } else if(m_currentPack != NULL && nextSkin>=m_currentPack->getSkinCount()) { nextSkin = 0; } break; }
return nextSkin;}
int CScene_SkinSelect::getPreviousSkinIndex(DWORD sourceIndex){ int previousSkin = sourceIndex; switch(m_packIndex) {
case SKIN_SELECT_PACK_FAVORITES: if(previousSkin==0) { previousSkin = app.GetPlayerFavoriteSkinsCount(m_iPad) - 1; } else { --previousSkin; } break; default: if(previousSkin==0) { if(m_packIndex == SKIN_SELECT_PACK_DEFAULT) { previousSkin = eDefaultSkins_Count - 1; } else if(m_currentPack != NULL) { previousSkin = m_currentPack->getSkinCount()-1; } } else { --previousSkin; } break; }
return previousSkin;}
int CScene_SkinSelect::getNextPackIndex(DWORD sourceIndex){ int nextPack = sourceIndex; ++nextPack; if(nextPack > app.m_dlcManager.getPackCount(DLCManager::e_DLCType_Skin) - 1 + SKIN_SELECT_MAX_DEFAULTS) { nextPack = SKIN_SELECT_PACK_DEFAULT; }
return nextPack;}
int CScene_SkinSelect::getPreviousPackIndex(DWORD sourceIndex){ int previousPack = sourceIndex; if(previousPack == SKIN_SELECT_PACK_DEFAULT) { if(app.m_dlcManager.getPackCount(DLCManager::e_DLCType_Skin) > 0) { previousPack = app.m_dlcManager.getPackCount(DLCManager::e_DLCType_Skin) - 1 + SKIN_SELECT_MAX_DEFAULTS; } else { previousPack = SKIN_SELECT_MAX_DEFAULTS - 1; } } else { --previousPack; }
return previousPack;}
void CScene_SkinSelect::updateClipping(){ DWORD dwPropertyId; XUIElementPropVal propertyVal; propertyVal.Clear(); HRESULT hr = XuiObjectGetPropertyId( m_charactersGroup.m_hObj, L"ClipChildren", &dwPropertyId); switch( CXuiSceneBase::GetPlayerBasePosition(m_iPad) ) { case CXuiSceneBase::e_BaseScene_Left: case CXuiSceneBase::e_BaseScene_Right: case CXuiSceneBase::e_BaseScene_Top_Left: case CXuiSceneBase::e_BaseScene_Top_Right: case CXuiSceneBase::e_BaseScene_Bottom_Left: case CXuiSceneBase::e_BaseScene_Bottom_Right: case CXuiSceneBase::e_BaseScene_Top: case CXuiSceneBase::e_BaseScene_Bottom: propertyVal.SetBoolVal(TRUE); break; case CXuiSceneBase::e_BaseScene_Fullscreen: default: propertyVal.SetBoolVal(FALSE); break; }; hr = XuiObjectSetProperty(m_charactersGroup.m_hObj,dwPropertyId,0,&propertyVal);}
int CScene_SkinSelect::UnlockSkinReturned(void *pParam,int iPad,C4JStorage::EMessageResult result){ CScene_SkinSelect* pScene = (CScene_SkinSelect*)pParam;#ifdef _XBOX if(result==C4JStorage::EMessage_ResultAccept) { if(ProfileManager.IsSignedIn(iPad)) { ULONGLONG ullIndexA[1]; DLC_INFO *pDLCInfo = app.GetDLCInfoForTrialOfferID(pScene->m_currentPack->getPurchaseOfferId());
if(pDLCInfo!=NULL) { ullIndexA[0]=pDLCInfo->ullOfferID_Full; } else { ullIndexA[0]=pScene->m_currentPack->getPurchaseOfferId(); }
// If we're in-game, then we need to enable DLC downloads. They'll be set back to Auto on leaving the pause menu if(Minecraft::GetInstance()->level!=NULL) { // need to allow downloads here, or the player would need to quit the game to let the download of a skin pack happen. This might affect the network traffic, since the download could take all the bandwidth... XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_ALWAYS_ALLOW); }
StorageManager.InstallOffer(1,ullIndexA,NULL,NULL);
// the license change coming in when the offer has been installed will cause this scene to refresh } } else { TelemetryManager->RecordUpsellResponded(iPad, eSet_UpsellID_Skin_DLC, ( pScene->m_currentPack->getPurchaseOfferId() & 0xFFFFFFFF ), eSen_UpsellOutcome_Declined); }#endif return 0;}
HRESULT CScene_SkinSelect::OnCustomMessage_DLCInstalled(){ // mounted DLC may have changed if(app.StartInstallDLCProcess(m_iPad)==false) { // not doing a mount, so re-enable input m_bIgnoreInput=false; } else { m_bIgnoreInput=true; m_timer.SetShow( TRUE ); m_charactersGroup.SetShow( FALSE ); m_skinDetails.SetShow( FALSE ); } // this will send a CustomMessage_DLCMountingComplete when done return S_OK;}
HRESULT CScene_SkinSelect::OnCustomMessage_DLCMountingComplete(){
m_timer.SetShow( FALSE ); m_charactersGroup.SetShow( TRUE ); m_skinDetails.SetShow( TRUE ); m_packIndex = SKIN_SELECT_PACK_DEFAULT; if(app.m_dlcManager.getPackCount(DLCManager::e_DLCType_Skin)>0) { m_currentPack = app.m_dlcManager.getPackContainingSkin(m_currentSkinPath); if(m_currentPack != NULL) { bool bFound = false; m_packIndex = app.m_dlcManager.getPackIndex(m_currentPack,bFound,DLCManager::e_DLCType_Skin) + SKIN_SELECT_MAX_DEFAULTS; } }
// If we have any favourites, set this to the favourites // first validate the favorite skins - we might have uninstalled the DLC needed for them app.ValidateFavoriteSkins(m_iPad);
if(app.GetPlayerFavoriteSkinsCount(m_iPad)>0) { m_packIndex = SKIN_SELECT_PACK_FAVORITES; }
handlePackIndexChanged(); updateCurrentFocus(); m_bIgnoreInput=false; app.m_dlcManager.checkForCorruptDLCAndAlert(); bool bInGame=(Minecraft::GetInstance()->level!=NULL);
if(bInGame) XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_AUTO);
return S_OK;}
void CScene_SkinSelect::AddFavoriteSkin(int iPad,int iSkinID){ // Is this favorite skin already in the array? unsigned int uiCurrentFavoriteSkinsCount=app.GetPlayerFavoriteSkinsCount(m_iPad);
for(int i=0;i<uiCurrentFavoriteSkinsCount;i++) { if(app.GetPlayerFavoriteSkin(m_iPad,i)==iSkinID) { app.SetPlayerFavoriteSkinsPos(m_iPad,i); return; } }
unsigned char ucPos=app.GetPlayerFavoriteSkinsPos(m_iPad); if(ucPos==(MAX_FAVORITE_SKINS-1)) { ucPos=0; } else { if(uiCurrentFavoriteSkinsCount>0) { ucPos++; } else { ucPos=0; } }
app.SetPlayerFavoriteSkin(iPad,(int)ucPos,iSkinID); app.SetPlayerFavoriteSkinsPos(m_iPad,ucPos); }