Files
neoStudiosLCE-neoLegacy/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp
SevenToaster509 34504b7b93 feat: achievements
fully functional but some achievements dont work yet

EXPERIMENTAL!!!!
2026-04-26 15:27:19 +01:00

213 lines
5.8 KiB
C++

#include "stdafx.h"
#include "UI.h"
#include "UIComponent_PressStartToPlay.h"
#include "../../../Minecraft.World/StringHelpers.h"
UIComponent_PressStartToPlay::UIComponent_PressStartToPlay(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
{
// Setup all the Iggy references we need for this scene
initialiseMovie();
m_showingSaveIcon = false;
m_showingAutosaveTimer = false;
m_showingTrialTimer = false;
for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i)
{
m_showingPressStart[i] = false;
}
m_trialTimer = L"";
m_autosaveTimer = L"";
m_labelTrialTimer.init(L"");
m_labelTrialTimer.setVisible(false);
// 4J-JEV: This object is persistent, so this string needs to be able to handle language changes.
#ifdef __ORBIS__
m_labelPressStart.init( (UIString) [] { return replaceAll(app.GetString(IDS_PRESS_X_TO_JOIN), L"{*CONTROLLER_VK_A*}", app.GetVKReplacement(VK_PAD_A) ); });
#elif defined _XBOX_ONE
m_labelPressStart.init( (UIString) [] { return replaceAll(app.GetString(IDS_PRESS_START_TO_JOIN), L"{*CONTROLLER_VK_START*}", app.GetVKReplacement(VK_PAD_START) ); });
#else
m_labelPressStart.init(IDS_PRESS_START_TO_JOIN);
#endif
m_controlSaveIcon.setVisible(false);
m_controlPressStartPanel.setVisible(false);
m_playerDisplayName.setVisible(false);
}
wstring UIComponent_PressStartToPlay::getMoviePath()
{
return L"PressStartToPlay";
}
void UIComponent_PressStartToPlay::handleReload()
{
// 4J Stu - It's possible these could change during the reload, so can't use the normal controls refresh of it's state
m_controlSaveIcon.setVisible(m_showingSaveIcon);
m_labelTrialTimer.setVisible(m_showingAutosaveTimer);
m_labelTrialTimer.setLabel(m_autosaveTimer);
m_labelTrialTimer.setVisible(m_showingTrialTimer);
m_labelTrialTimer.setLabel(m_trialTimer);
bool showPressStart = false;
for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i)
{
bool show = m_showingPressStart[i];
showPressStart |= show;
if(show)
{
addTimer(0,3000);
IggyDataValue result;
IggyDataValue value[1];
value[0].type = IGGY_DATATYPE_number;
value[0].number = i;
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcShowController , 1 , value );
}
}
m_controlPressStartPanel.setVisible(showPressStart);
}
void UIComponent_PressStartToPlay::ShowAchievementToast(string achievementName, string achievementDescription, string achT)
{
/*IggyStringUTF8 stringVal;
stringVal.string = (char*)label.c_str();
stringVal.length = static_cast<S32>(label.length());
value[0].type = IGGY_DATATYPE_string_UTF8;
value[0].string8 = stringVal;*/
IggyDataValue result;
IggyDataValue value[3];
IggyStringUTF8 stringVal1;
value[0].type = IGGY_DATATYPE_string_UTF8;
stringVal1.string = (char*)achievementName.c_str();
stringVal1.length = static_cast<S32>(achievementName.length());
value[0].string8 = stringVal1;
IggyStringUTF8 stringVal2;
stringVal2.string = (char*)achievementDescription.c_str();
stringVal2.length = static_cast<S32>(achievementDescription.length());
value[1].type = IGGY_DATATYPE_string_UTF8;
value[1].string8 = stringVal2;
IggyStringUTF8 stringVal3;
stringVal3.string = (char*)achT.c_str();
stringVal3.length = static_cast<S32>(achT.length()+3);
value[2].type = IGGY_DATATYPE_string_UTF8;
value[2].string8 = stringVal3;
IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcShowAchToast, 3, value);
addTimer(1, 5000);
}
void UIComponent_PressStartToPlay::HideAchievementToast()
{
IggyDataValue result;
IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcHideAchToast, 0, nullptr);
Minecraft::GetInstance()->achID = 0;
}
void UIComponent_PressStartToPlay::handleTimerComplete(int id)
{
m_controlPressStartPanel.setVisible(false);
for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i)
{
m_showingPressStart[i] = false;
if (id == 1) {
HideAchievementToast();
killTimer(id);
ui.toastOn = false;
}
}
ui.ClearPressStart();
}
void UIComponent_PressStartToPlay::showPressStart(int iPad, bool show)
{
m_showingPressStart[iPad] = show;
if(!ui.IsExpectingOrReloadingSkin() && hasMovie())
{
m_controlPressStartPanel.setVisible(show);
if(show)
{
addTimer(0,3000);
IggyDataValue result;
IggyDataValue value[1];
value[0].type = IGGY_DATATYPE_number;
value[0].number = iPad;
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcShowController , 1 , value );
}
}
}
void UIComponent_PressStartToPlay::setTrialTimer(const wstring &label)
{
m_trialTimer = label;
if(!ui.IsExpectingOrReloadingSkin() && hasMovie())
{
m_labelTrialTimer.setLabel(label);
}
}
void UIComponent_PressStartToPlay::showTrialTimer(bool show)
{
m_showingTrialTimer = show;
if(!ui.IsExpectingOrReloadingSkin() && hasMovie())
{
m_labelTrialTimer.setVisible(show);
}
}
void UIComponent_PressStartToPlay::setAutosaveTimer(const wstring &label)
{
m_autosaveTimer = label;
if(!ui.IsExpectingOrReloadingSkin() && hasMovie())
{
m_labelTrialTimer.setLabel(label);
}
}
void UIComponent_PressStartToPlay::showAutosaveTimer(bool show)
{
m_showingAutosaveTimer = show;
if(!ui.IsExpectingOrReloadingSkin() && hasMovie())
{
m_labelTrialTimer.setVisible(show);
}
}
void UIComponent_PressStartToPlay::showSaveIcon(bool show)
{
m_showingSaveIcon = show;
if(!ui.IsExpectingOrReloadingSkin() && hasMovie())
{
m_controlSaveIcon.setVisible(show);
}
else
{
if(show) app.DebugPrintf("Tried to show save icon while texture pack reload was in progress\n");
}
}
void UIComponent_PressStartToPlay::showPlayerDisplayName(bool show)
{
#ifdef _XBOX_ONE
if(show)
{
m_playerDisplayName.setLabel(ProfileManager.GetDisplayName(ProfileManager.GetPrimaryPad()));
}
m_playerDisplayName.setVisible(show);
#else
m_playerDisplayName.setVisible(false);
#endif
}