4jcraft/Minecraft.Client/Platform/Common/UI/UIScene_DLCMainMenu.cpp

238 lines
7.7 KiB
C++

#include "../../Minecraft.World/Platform/stdafx.h"
#include "UI.h"
#if defined(__PS3__) || defined(__ORBIS__)
#include "../Network/Sony/SonyCommerce.h"
#endif
#include "UIScene_DLCMainMenu.h"
#define PLAYER_ONLINE_TIMER_ID 0
#define PLAYER_ONLINE_TIMER_TIME 100
UIScene_DLCMainMenu::UIScene_DLCMainMenu(int iPad, void* initData,
UILayer* parentLayer)
: UIScene(iPad, parentLayer) {
// Setup all the Iggy references we need for this scene
initialiseMovie();
// Alert the app the we want to be informed of ethernet connections
app.SetLiveLinkRequired(true);
m_labelOffers.init(IDS_DOWNLOADABLE_CONTENT_OFFERS);
m_buttonListOffers.init(eControl_OffersList);
#if defined _XBOX_ONE || defined __ORBIS__
// load any local DLC images
app.LoadLocalDLCImages();
#endif
#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__)
// show a timer on this menu
m_Timer.setVisible(true);
m_bCategoriesShown = false;
#endif
if (m_loadedResolution == eSceneResolution_1080) {
#ifdef _DURANGO
m_labelXboxStore.init(IDS_XBOX_STORE);
#else
m_labelXboxStore.init(L"");
#endif
}
#if defined(_DURANGO)
m_Timer.setVisible(false);
m_buttonListOffers.addItem(IDS_DLC_MENU_SKINPACKS, e_DLC_SkinPack);
m_buttonListOffers.addItem(IDS_DLC_MENU_TEXTUREPACKS, e_DLC_TexturePacks);
m_buttonListOffers.addItem(IDS_DLC_MENU_MASHUPPACKS, e_DLC_MashupPacks);
app.AddDLCRequest(e_Marketplace_Content); // content is skin packs, texture
// packs and mash-up packs
// we also need to mount the local DLC so we can tell what's been purchased
app.StartInstallDLCProcess(iPad);
#endif
TelemetryManager->RecordMenuShown(iPad, eUIScene_DLCMainMenu, 0);
#if defined __ORBIS__ || defined __PSVITA__
app.GetCommerce()->ShowPsStoreIcon();
#endif
#if (defined __PS3__ || defined __ORBIS__ || defined __PSVITA__)
addTimer(PLAYER_ONLINE_TIMER_ID, PLAYER_ONLINE_TIMER_TIME);
#endif
}
UIScene_DLCMainMenu::~UIScene_DLCMainMenu() {
// Alert the app the we no longer want to be informed of ethernet
// connections
app.SetLiveLinkRequired(false);
#if defined _XBOX_ONE || defined __ORBIS__
app.FreeLocalDLCImages();
#endif
#ifdef _XBOX_ONE
// 4J-JEV: Have to switch back to user preferred languge now.
setLanguageOverride(true);
#endif
}
std::wstring UIScene_DLCMainMenu::getMoviePath() { return L"DLCMainMenu"; }
void UIScene_DLCMainMenu::updateTooltips() {
ui.SetTooltips(m_iPad, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK);
}
void UIScene_DLCMainMenu::handleInput(int iPad, int key, bool repeat,
bool pressed, bool released,
bool& handled) {
// app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d,
// down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE",
// pressed?"TRUE":"FALSE", released?"TRUE":"FALSE");
ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
switch (key) {
case ACTION_MENU_CANCEL:
if (pressed) {
#if defined __ORBIS__ || defined __PSVITA__
app.GetCommerce()->HidePsStoreIcon();
#endif
navigateBack();
}
break;
case ACTION_MENU_OK:
#ifdef __ORBIS__
case ACTION_MENU_TOUCHPAD_PRESS:
#endif
sendInputToMovie(key, repeat, pressed, released);
break;
case ACTION_MENU_UP:
case ACTION_MENU_DOWN:
case ACTION_MENU_LEFT:
case ACTION_MENU_RIGHT:
case ACTION_MENU_PAGEUP:
case ACTION_MENU_PAGEDOWN:
sendInputToMovie(key, repeat, pressed, released);
break;
}
}
void UIScene_DLCMainMenu::handlePress(F64 controlId, F64 childId) {
switch ((int)controlId) {
case eControl_OffersList: {
int iIndex = (int)childId;
DLCOffersParam* param = new DLCOffersParam();
param->iPad = m_iPad;
param->iType = iIndex;
// promote the DLC content request type
// Xbox One will have requested the marketplace content - there is
// only that type
#ifndef _XBOX_ONE
app.AddDLCRequest((eDLCMarketplaceType)iIndex, true);
#endif
killTimer(PLAYER_ONLINE_TIMER_ID);
ui.NavigateToScene(m_iPad, eUIScene_DLCOffersMenu, param);
break;
}
};
}
void UIScene_DLCMainMenu::handleTimerComplete(int id) {
#if (defined __PS3__ || defined __ORBIS__ || defined __PSVITA__)
switch (id) {
case PLAYER_ONLINE_TIMER_ID:
#ifndef _WINDOWS64
if (ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad()) ==
false) {
// check the player hasn't gone offline
// If they have, bring up the PSN warning and exit from the
// leaderboards
unsigned int uiIDA[1];
uiIDA[0] = IDS_OK;
C4JStorage::EMessageResult result = ui.RequestErrorMessage(
IDS_CONNECTION_LOST,
g_NetworkManager.CorrectErrorIDS(
IDS_CONNECTION_LOST_LIVE_NO_EXIT),
uiIDA, 1, ProfileManager.GetPrimaryPad(),
UIScene_DLCMainMenu::ExitDLCMainMenu, this);
}
#endif
break;
}
#endif
}
int UIScene_DLCMainMenu::ExitDLCMainMenu(void* pParam, int iPad,
C4JStorage::EMessageResult result) {
UIScene_DLCMainMenu* pClass = (UIScene_DLCMainMenu*)pParam;
#if defined __ORBIS__ || defined __PSVITA__
app.GetCommerce()->HidePsStoreIcon();
#endif
pClass->navigateBack();
return 0;
}
void UIScene_DLCMainMenu::handleGainFocus(bool navBack) {
UIScene::handleGainFocus(navBack);
updateTooltips();
if (navBack) {
// add the timer back in
#if (defined __PS3__ || defined __ORBIS__ || defined __PSVITA__)
addTimer(PLAYER_ONLINE_TIMER_ID, PLAYER_ONLINE_TIMER_TIME);
#endif
}
}
void UIScene_DLCMainMenu::tick() {
UIScene::tick();
#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__)
if ((m_bCategoriesShown == false) &&
(app.GetCommerceCategoriesRetrieved())) {
// disable the timer display on this menu
m_Timer.setVisible(false);
m_bCategoriesShown = true;
// add the categories to the list box
SonyCommerce::CategoryInfo* pCategories = app.GetCategoryInfo();
std::list<SonyCommerce::CategoryInfoSub>::iterator iter =
pCategories->subCategories.begin();
SonyCommerce::CategoryInfoSub category;
for (int i = 0; i < pCategories->countOfSubCategories; i++) {
// add a button in with the subcategory
category = (SonyCommerce::CategoryInfoSub)(*iter);
std::string teststring = category.categoryName;
m_buttonListOffers.addItem(teststring, i);
iter++;
}
// set the focus to the first thing in the categories if there are any
if (pCategories->countOfSubCategories > 0) {
m_buttonListOffers.setFocus(true);
} else {
#if defined __ORBIS__ || defined __PSVITA__ || defined __PS3__
app.CheckForEmptyStore(ProfileManager.GetPrimaryPad());
#endif
// need to display text to say no downloadable content available yet
m_labelOffers.setLabel(app.GetString(IDS_NO_DLCCATEGORIES));
#ifdef __ORBIS__
// 4J-JEV: TRC Requirement (R4055), need to display this system
// message.
ProfileManager.DisplaySystemMessage(
SCE_MSG_DIALOG_SYSMSG_TYPE_TRC_EMPTY_STORE,
ProfileManager.GetPrimaryPad());
#endif
}
}
#endif
}