mirror of
https://github.com/neoStudiosLCE/neoLegacy.git
synced 2026-06-11 22:03:00 +00:00
initial minigame loading + ui stuff
thank you rockefeler
This commit is contained in:
parent
6fba0c7d72
commit
0ccc633551
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
|
@ -1,425 +1,431 @@
|
|||
#pragma once
|
||||
using namespace std;
|
||||
#include "IUIController.h"
|
||||
#include "UIEnums.h"
|
||||
#include "UIGroup.h"
|
||||
#include <random>
|
||||
|
||||
class UIAbstractBitmapFont;
|
||||
class UIBitmapFont;
|
||||
class UIUnicodeBitmapFont;
|
||||
class UITTFFont;
|
||||
class UIComponent_DebugUIConsole;
|
||||
class UIComponent_DebugUIMarketingGuide;
|
||||
class UIControl;
|
||||
|
||||
// Base class for all shared functions between UIControllers
|
||||
class UIController : public IUIController
|
||||
{
|
||||
public:
|
||||
static int64_t iggyAllocCount;
|
||||
bool toastOn = false;
|
||||
// MGH - added to prevent crash loading Iggy movies while the skins were being reloaded
|
||||
static CRITICAL_SECTION ms_reloadSkinCS;
|
||||
static bool ms_bReloadSkinCSInitialised;
|
||||
|
||||
protected:
|
||||
UIComponent_DebugUIConsole *m_uiDebugConsole;
|
||||
UIComponent_DebugUIMarketingGuide *m_uiDebugMarketingGuide;
|
||||
|
||||
private:
|
||||
CRITICAL_SECTION m_navigationLock;
|
||||
|
||||
static const int UI_REPEAT_KEY_DELAY_MS = 300; // How long from press until the first repeat
|
||||
static const int UI_REPEAT_KEY_REPEAT_RATE_MS = 100; // How long in between repeats
|
||||
DWORD m_actionRepeatTimer[XUSER_MAX_COUNT][ACTION_MAX_MENU+1];
|
||||
|
||||
float m_fScreenWidth;
|
||||
float m_fScreenHeight;
|
||||
bool m_bScreenWidthSetup;
|
||||
|
||||
S32 m_tileOriginX, m_tileOriginY;
|
||||
|
||||
enum EFont
|
||||
{
|
||||
eFont_NotLoaded = 0,
|
||||
|
||||
eFont_Bitmap,
|
||||
eFont_Japanese,
|
||||
eFont_SimpChinese,
|
||||
eFont_TradChinese,
|
||||
eFont_Korean,
|
||||
|
||||
};
|
||||
|
||||
// 4J-JEV: It's important that currentFont == targetFont, unless updateCurrentLanguage is going to be called.
|
||||
EFont m_eCurrentFont, m_eTargetFont;
|
||||
|
||||
// 4J-JEV: Behaves like navigateToHome when not ingame. When in-game, it closes all player scenes instead.
|
||||
bool m_bCleanupOnReload;
|
||||
|
||||
EFont getFontForLanguage(int language);
|
||||
UITTFFont *createFont(EFont fontLanguage);
|
||||
|
||||
UIAbstractBitmapFont *m_mcBitmapFont;
|
||||
UITTFFont *m_mcTTFFont;
|
||||
UIBitmapFont *m_moj7, *m_moj11;
|
||||
UIUnicodeBitmapFont *m_unicodeBitmapFont;
|
||||
|
||||
std::mt19937 m_randomGenerator;
|
||||
std::uniform_real_distribution<float> m_randomDistribution;
|
||||
|
||||
public:
|
||||
void setCleanupOnReload();
|
||||
void updateCurrentFont();
|
||||
|
||||
|
||||
private:
|
||||
// 4J-PB - ui element type for PSVita touch control
|
||||
#ifdef __PSVITA__
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UIControl *pControl;
|
||||
S32 x1,y1,x2,y2;
|
||||
}
|
||||
UIELEMENT;
|
||||
// E3 - Fine for now, but we need to make this better!
|
||||
vector<UIELEMENT *> m_TouchBoxes[eUIGroup_COUNT][eUILayer_COUNT][eUIScene_COUNT];
|
||||
bool m_bTouchscreenPressed;
|
||||
#endif
|
||||
// 4J Stu - These should be in the order that they reference each other (i.e. they can only reference one with a lower value in the enum)
|
||||
enum ELibraries
|
||||
{
|
||||
eLibrary_Platform,
|
||||
eLibrary_GraphicsDefault,
|
||||
eLibrary_GraphicsHUD,
|
||||
eLibrary_GraphicsInGame,
|
||||
eLibrary_GraphicsTooltips,
|
||||
eLibrary_GraphicsLabels,
|
||||
eLibrary_Labels,
|
||||
eLibrary_InGame,
|
||||
eLibrary_HUD,
|
||||
eLibrary_Tooltips,
|
||||
eLibrary_Default,
|
||||
|
||||
eLibrary_LCDefault,
|
||||
eLibrary_LCInGame,
|
||||
eLibrary_LCGraphics,
|
||||
eLibrary_LCLabels,
|
||||
|
||||
#if defined(_WINDOWS64)
|
||||
// Non-HD skin libraries needed by 720p/480p scene SWFs.
|
||||
eLibraryFallback_Platform,
|
||||
eLibraryFallback_GraphicsDefault,
|
||||
eLibraryFallback_GraphicsHUD,
|
||||
eLibraryFallback_GraphicsInGame,
|
||||
eLibraryFallback_GraphicsTooltips,
|
||||
eLibraryFallback_GraphicsLabels,
|
||||
eLibraryFallback_Labels,
|
||||
eLibraryFallback_InGame,
|
||||
eLibraryFallback_HUD,
|
||||
eLibraryFallback_Tooltips,
|
||||
eLibraryFallback_Default,
|
||||
|
||||
// Optional DR-specific HD libraries used by some 1080p menu SWFs.
|
||||
// Keep these after the normal HD and fallback sets so they don't disturb
|
||||
// existing references and can be loaded only when the files exist.
|
||||
eLibraryDR_GraphicsDefault,
|
||||
eLibraryDR_Labels,
|
||||
eLibraryDR_Default,
|
||||
#endif
|
||||
|
||||
eLibrary_Count,
|
||||
};
|
||||
|
||||
IggyLibrary m_iggyLibraries[eLibrary_Count];
|
||||
|
||||
protected:
|
||||
GDrawFunctions *gdraw_funcs;
|
||||
|
||||
private:
|
||||
HIGGYEXP iggy_explorer;
|
||||
HIGGYPERFMON iggy_perfmon;
|
||||
bool m_iggyPerfmonEnabled;
|
||||
|
||||
bool m_bMenuDisplayed[XUSER_MAX_COUNT]; // track each players menu displayed
|
||||
bool m_bMenuToBeClosed[XUSER_MAX_COUNT]; // actioned at the end of the game loop
|
||||
int m_iCountDown[XUSER_MAX_COUNT]; // ticks to block input
|
||||
|
||||
bool m_bCloseAllScenes[eUIGroup_COUNT];
|
||||
|
||||
int m_iPressStartQuadrantsMask;
|
||||
|
||||
C4JRender::eViewportType m_currentRenderViewport;
|
||||
bool m_bCustomRenderPosition;
|
||||
|
||||
static DWORD m_dwTrialTimerLimitSecs;
|
||||
|
||||
unordered_map<wstring, byteArray> m_substitutionTextures;
|
||||
|
||||
typedef struct _CachedMovieData
|
||||
{
|
||||
byteArray m_ba;
|
||||
int64_t m_expiry;
|
||||
} CachedMovieData;
|
||||
unordered_map<wstring, CachedMovieData> m_cachedMovieData;
|
||||
|
||||
typedef struct _QueuedMessageBoxData
|
||||
{
|
||||
MessageBoxInfo info;
|
||||
int iPad;
|
||||
EUILayer layer;
|
||||
} QueuedMessageBoxData;
|
||||
vector<QueuedMessageBoxData *> m_queuedMessageBoxData;
|
||||
|
||||
unsigned int m_winUserIndex;
|
||||
EUIScene m_mouseDraggingSliderScene;
|
||||
int m_mouseDraggingSliderId;
|
||||
bool m_mouseClickConsumedByScene;
|
||||
bool m_bMouseHoverHorizontalList;
|
||||
int m_lastHoverMouseX;
|
||||
int m_lastHoverMouseY;
|
||||
//bool m_bSysUIShowing;
|
||||
bool m_bSystemUIShowing;
|
||||
C4JThread *m_reloadSkinThread;
|
||||
bool m_navigateToHomeOnReload;
|
||||
int m_accumulatedTicks;
|
||||
uint64_t m_lastUiSfx; // Tracks time (ms) of last UI sound effect
|
||||
|
||||
D3D11_RECT m_customRenderingClearRect;
|
||||
|
||||
unordered_map<size_t, UIScene *> m_registeredCallbackScenes; // A collection of scenes and unique id's that are used in async callbacks so we can safely handle when they get destroyed
|
||||
CRITICAL_SECTION m_registeredCallbackScenesCS;;
|
||||
|
||||
public:
|
||||
UIController();
|
||||
#ifdef __PSVITA__
|
||||
void TouchBoxAdd(UIControl *pControl,UIScene *pUIScene);
|
||||
bool TouchBoxHit(UIScene *pUIScene,S32 x, S32 y);
|
||||
void TouchBoxesClear(UIScene *pUIScene);
|
||||
void TouchBoxRebuild(UIScene *pUIScene);
|
||||
|
||||
void HandleTouchInput(unsigned int iPad, unsigned int key, bool bPressed, bool bRepeat, bool bReleased);
|
||||
void SendTouchInput(unsigned int iPad, unsigned int key, bool bPressed, bool bRepeat, bool bReleased);
|
||||
|
||||
private:
|
||||
void TouchBoxAdd(UIControl *pControl,EUIGroup eUIGroup,EUILayer eUILayer,EUIScene eUIscene, UIControl *pMainPanelControl);
|
||||
UIELEMENT *m_ActiveUIElement;
|
||||
UIELEMENT *m_HighlightedUIElement;
|
||||
#endif
|
||||
|
||||
protected:
|
||||
UIGroup *m_groups[eUIGroup_COUNT];
|
||||
|
||||
public:
|
||||
|
||||
auto& getGroups() { return m_groups; }
|
||||
|
||||
void showComponent(int iPad, EUIScene scene, EUILayer layer, EUIGroup group, bool show)
|
||||
{
|
||||
m_groups[group]->showComponent(iPad, scene, layer, show);
|
||||
}
|
||||
|
||||
void removeComponent(EUIScene scene, EUILayer layer, EUIGroup group)
|
||||
{
|
||||
m_groups[group]->removeComponent(scene, layer);
|
||||
}
|
||||
|
||||
protected:
|
||||
// Should be called from the platforms init function
|
||||
void preInit(S32 width, S32 height);
|
||||
void postInit();
|
||||
|
||||
|
||||
public:
|
||||
CRITICAL_SECTION m_Allocatorlock;
|
||||
void SetupFont();
|
||||
bool PendingFontChange();
|
||||
bool UsingBitmapFont();
|
||||
|
||||
public:
|
||||
// TICKING
|
||||
virtual void tick();
|
||||
|
||||
private:
|
||||
void loadSkins();
|
||||
IggyLibrary loadSkin(const wstring &skinPath, const wstring &skinName);
|
||||
|
||||
public:
|
||||
void ReloadSkin();
|
||||
virtual void StartReloadSkinThread();
|
||||
virtual bool IsReloadingSkin();
|
||||
virtual bool IsExpectingOrReloadingSkin();
|
||||
virtual void CleanUpSkinReload();
|
||||
|
||||
private:
|
||||
static int reloadSkinThreadProc(void* lpParam);
|
||||
|
||||
public:
|
||||
byteArray getMovieData(const wstring &filename);
|
||||
|
||||
// INPUT
|
||||
private:
|
||||
void tickInput();
|
||||
void UpdateCursorIcon(UIControl *hitCtrl);
|
||||
void handleInput();
|
||||
void handleKeyPress(unsigned int iPad, unsigned int key);
|
||||
|
||||
protected:
|
||||
static rrbool RADLINK ExternalFunctionCallback( void * user_callback_data , Iggy * player , IggyExternalFunctionCallUTF16 * call );
|
||||
|
||||
public:
|
||||
// RENDERING
|
||||
float getScreenWidth() { return m_fScreenWidth; }
|
||||
float getScreenHeight() { return m_fScreenHeight; }
|
||||
void updateScreenSize(S32 w, S32 h) { m_fScreenWidth = (float)w; m_fScreenHeight = (float)h; app.DebugPrintf("[UI-INIT] updateScreenSize: %d x %d\n", w, h); }
|
||||
|
||||
virtual void render() = 0;
|
||||
void getRenderDimensions(C4JRender::eViewportType viewport, S32 &width, S32 &height);
|
||||
void setupRenderPosition(C4JRender::eViewportType viewport);
|
||||
void setupRenderPosition(S32 xOrigin, S32 yOrigin);
|
||||
|
||||
void SetSysUIShowing(bool bVal);
|
||||
static void SetSystemUIShowing(LPVOID lpParam,bool bVal);
|
||||
|
||||
protected:
|
||||
virtual void setTileOrigin(S32 xPos, S32 yPos) = 0;
|
||||
|
||||
public:
|
||||
|
||||
virtual CustomDrawData *setupCustomDraw(UIScene *scene, IggyCustomDrawCallbackRegion *region) = 0;
|
||||
virtual CustomDrawData *calculateCustomDraw(IggyCustomDrawCallbackRegion *region) = 0;
|
||||
virtual void endCustomDraw(IggyCustomDrawCallbackRegion *region) = 0;
|
||||
protected:
|
||||
// Should be called from the platforms render function
|
||||
void renderScenes();
|
||||
|
||||
public:
|
||||
virtual void beginIggyCustomDraw4J(IggyCustomDrawCallbackRegion *region, CustomDrawData *customDrawRegion) = 0;
|
||||
void setupCustomDrawGameState();
|
||||
void endCustomDrawGameState();
|
||||
void setupCustomDrawMatrices(UIScene *scene, CustomDrawData *customDrawRegion);
|
||||
void setupCustomDrawGameStateAndMatrices(UIScene *scene, CustomDrawData *customDrawRegion);
|
||||
void endCustomDrawMatrices();
|
||||
void endCustomDrawGameStateAndMatrices();
|
||||
|
||||
protected:
|
||||
|
||||
static void RADLINK CustomDrawCallback(void *user_callback_data, Iggy *player, IggyCustomDrawCallbackRegion *Region);
|
||||
static GDrawTexture * RADLINK TextureSubstitutionCreateCallback( void * user_callback_data , IggyUTF16 * texture_name , S32 * width , S32 * height , void **destroy_callback_data );
|
||||
static void RADLINK TextureSubstitutionDestroyCallback( void * user_callback_data , void * destroy_callback_data , GDrawTexture * handle );
|
||||
|
||||
virtual GDrawTexture *getSubstitutionTexture(int textureId) { return nullptr; }
|
||||
virtual void destroySubstitutionTexture(void *destroyCallBackData, GDrawTexture *handle) {}
|
||||
|
||||
public:
|
||||
void registerSubstitutionTexture(const wstring &textureName, PBYTE pbData, DWORD dwLength);
|
||||
void unregisterSubstitutionTexture(const wstring &textureName, bool deleteData);
|
||||
|
||||
public:
|
||||
// NAVIGATION
|
||||
bool NavigateToScene(int iPad, EUIScene scene, void *initData = nullptr, EUILayer layer = eUILayer_Scene, EUIGroup group = eUIGroup_PAD);
|
||||
bool NavigateBack(int iPad, bool forceUsePad = false, EUIScene eScene = eUIScene_COUNT, EUILayer eLayer = eUILayer_COUNT);
|
||||
void NavigateToHomeMenu();
|
||||
UIScene *GetTopScene(int iPad, EUILayer layer = eUILayer_Scene, EUIGroup group = eUIGroup_PAD);
|
||||
|
||||
size_t RegisterForCallbackId(UIScene *scene);
|
||||
void UnregisterCallbackId(size_t id);
|
||||
UIScene *GetSceneFromCallbackId(size_t id);
|
||||
void EnterCallbackIdCriticalSection();
|
||||
void LeaveCallbackIdCriticalSection();
|
||||
|
||||
private:
|
||||
void setFullscreenMenuDisplayed(bool displayed);
|
||||
|
||||
public:
|
||||
void CloseAllPlayersScenes();
|
||||
void CloseUIScenes(int iPad, bool forceIPad = false);
|
||||
|
||||
virtual bool IsPauseMenuDisplayed(int iPad);
|
||||
virtual bool IsContainerMenuDisplayed(int iPad);
|
||||
virtual bool IsIgnorePlayerJoinMenuDisplayed(int iPad);
|
||||
virtual bool IsIgnoreAutosaveMenuDisplayed(int iPad);
|
||||
virtual void SetIgnoreAutosaveMenuDisplayed(int iPad, bool displayed);
|
||||
virtual bool IsSceneInStack(int iPad, EUIScene eScene);
|
||||
bool GetMenuDisplayed(int iPad);
|
||||
void SetMenuDisplayed(int iPad,bool bVal);
|
||||
virtual void CheckMenuDisplayed();
|
||||
void AnimateKeyPress(int iPad, int iAction, bool bRepeat, bool bPressed, bool bReleased);
|
||||
void OverrideSFX(int iPad, int iAction,bool bVal);
|
||||
|
||||
// TOOLTIPS
|
||||
virtual void SetTooltipText( unsigned int iPad, unsigned int tooltip, int iTextID );
|
||||
virtual void SetEnableTooltips( unsigned int iPad, BOOL bVal );
|
||||
virtual void ShowTooltip( unsigned int iPad, unsigned int tooltip, bool show );
|
||||
virtual void SetTooltips( unsigned int iPad, int iA, int iB=-1, int iX=-1, int iY=-1 , int iLT=-1, int iRT=-1, int iLB=-1, int iRB=-1, int iLS=-1, int iRS=-1, int iBack=-1, bool forceUpdate = false);
|
||||
virtual void EnableTooltip( unsigned int iPad, unsigned int tooltip, bool enable );
|
||||
virtual void RefreshTooltips(unsigned int iPad);
|
||||
|
||||
virtual void PlayUISFX(ESoundEffect eSound);
|
||||
|
||||
virtual void DisplayGamertag(unsigned int iPad, bool show);
|
||||
virtual void SetSelectedItem(unsigned int iPad, const wstring &name);
|
||||
virtual void UpdateSelectedItemPos(unsigned int iPad);
|
||||
|
||||
virtual void HandleDLCMountingComplete();
|
||||
virtual void HandleDLCInstalled(int iPad);
|
||||
#ifdef _XBOX_ONE
|
||||
virtual void HandleDLCLicenseChange();
|
||||
#endif
|
||||
virtual void HandleTMSDLCFileRetrieved(int iPad);
|
||||
virtual void HandleTMSBanFileRetrieved(int iPad);
|
||||
virtual void HandleInventoryUpdated(int iPad);
|
||||
virtual void HandleGameTick();
|
||||
|
||||
virtual void SetTutorial(int iPad, Tutorial *tutorial);
|
||||
virtual void SetTutorialDescription(int iPad, TutorialPopupInfo *info);
|
||||
virtual void RemoveInteractSceneReference(int iPad, UIScene *scene);
|
||||
virtual void SetTutorialVisible(int iPad, bool visible);
|
||||
virtual bool IsTutorialVisible(int iPad);
|
||||
|
||||
virtual void UpdatePlayerBasePositions();
|
||||
virtual void SetEmptyQuadrantLogo(int iSection);
|
||||
virtual void HideAllGameUIElements();
|
||||
virtual void ShowOtherPlayersBaseScene(unsigned int iPad, bool show);
|
||||
|
||||
virtual void ShowTrialTimer(bool show);
|
||||
virtual void SetTrialTimerLimitSecs(unsigned int uiSeconds);
|
||||
virtual void UpdateTrialTimer(unsigned int iPad);
|
||||
virtual void ReduceTrialTimerValue();
|
||||
|
||||
virtual void ShowAutosaveCountdownTimer(bool show);
|
||||
virtual void UpdateAutosaveCountdownTimer(unsigned int uiSeconds);
|
||||
virtual void ShowSavingMessage(unsigned int iPad, C4JStorage::ESavingMessage eVal);
|
||||
|
||||
virtual void ShowPlayerDisplayname(bool show);
|
||||
virtual bool PressStartPlaying(unsigned int iPad);
|
||||
virtual void ShowPressStart(unsigned int iPad);
|
||||
virtual void HidePressStart();
|
||||
void ShowAchievementToast(string achievementName, string achievementDescription, byteArray b, string achT = "");
|
||||
void ClearPressStart();
|
||||
|
||||
virtual C4JStorage::EMessageResult RequestAlertMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=nullptr,LPVOID lpParam=nullptr, WCHAR *pwchFormatString=nullptr);
|
||||
virtual C4JStorage::EMessageResult RequestErrorMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=nullptr,LPVOID lpParam=nullptr, WCHAR *pwchFormatString=nullptr);
|
||||
private:
|
||||
virtual C4JStorage::EMessageResult RequestMessageBox(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad,int( *Func)(LPVOID,int,const C4JStorage::EMessageResult),LPVOID lpParam, WCHAR *pwchFormatString,DWORD dwFocusButton, bool bIsError);
|
||||
|
||||
public:
|
||||
C4JStorage::EMessageResult RequestUGCMessageBox(UINT title = -1, UINT message = -1, int iPad = -1, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult) = nullptr, LPVOID lpParam = nullptr);
|
||||
C4JStorage::EMessageResult RequestContentRestrictedMessageBox(UINT title = -1, UINT message = -1, int iPad = -1, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult) = nullptr, LPVOID lpParam = nullptr);
|
||||
|
||||
virtual void SetWinUserIndex(unsigned int iPad);
|
||||
unsigned int GetWinUserIndex();
|
||||
|
||||
virtual void ShowUIDebugConsole(bool show);
|
||||
virtual void ShowUIDebugMarketingGuide(bool show);
|
||||
void logDebugString(const string &text);
|
||||
UIScene* FindScene(EUIScene sceneType);
|
||||
|
||||
public:
|
||||
char *m_defaultBuffer, *m_tempBuffer;
|
||||
void setFontCachingCalculationBuffer(int length);
|
||||
|
||||
|
||||
};
|
||||
#pragma once
|
||||
using namespace std;
|
||||
#include "IUIController.h"
|
||||
#include "UIEnums.h"
|
||||
#include "UIGroup.h"
|
||||
#include <random>
|
||||
|
||||
class UIAbstractBitmapFont;
|
||||
class UIBitmapFont;
|
||||
class UIUnicodeBitmapFont;
|
||||
class UITTFFont;
|
||||
class UIComponent_DebugUIConsole;
|
||||
class UIComponent_DebugUIMarketingGuide;
|
||||
class UIControl;
|
||||
|
||||
// Base class for all shared functions between UIControllers
|
||||
class UIController : public IUIController
|
||||
{
|
||||
public:
|
||||
static int64_t iggyAllocCount;
|
||||
bool toastOn = false;
|
||||
// MGH - added to prevent crash loading Iggy movies while the skins were being reloaded
|
||||
static CRITICAL_SECTION ms_reloadSkinCS;
|
||||
static bool ms_bReloadSkinCSInitialised;
|
||||
|
||||
protected:
|
||||
UIComponent_DebugUIConsole *m_uiDebugConsole;
|
||||
UIComponent_DebugUIMarketingGuide *m_uiDebugMarketingGuide;
|
||||
|
||||
private:
|
||||
CRITICAL_SECTION m_navigationLock;
|
||||
|
||||
static const int UI_REPEAT_KEY_DELAY_MS = 300; // How long from press until the first repeat
|
||||
static const int UI_REPEAT_KEY_REPEAT_RATE_MS = 100; // How long in between repeats
|
||||
DWORD m_actionRepeatTimer[XUSER_MAX_COUNT][ACTION_MAX_MENU+1];
|
||||
|
||||
float m_fScreenWidth;
|
||||
float m_fScreenHeight;
|
||||
bool m_bScreenWidthSetup;
|
||||
|
||||
S32 m_tileOriginX, m_tileOriginY;
|
||||
|
||||
enum EFont
|
||||
{
|
||||
eFont_NotLoaded = 0,
|
||||
|
||||
eFont_Bitmap,
|
||||
eFont_Japanese,
|
||||
eFont_SimpChinese,
|
||||
eFont_TradChinese,
|
||||
eFont_Korean,
|
||||
|
||||
};
|
||||
|
||||
// 4J-JEV: It's important that currentFont == targetFont, unless updateCurrentLanguage is going to be called.
|
||||
EFont m_eCurrentFont, m_eTargetFont;
|
||||
|
||||
// 4J-JEV: Behaves like navigateToHome when not ingame. When in-game, it closes all player scenes instead.
|
||||
bool m_bCleanupOnReload;
|
||||
|
||||
EFont getFontForLanguage(int language);
|
||||
UITTFFont *createFont(EFont fontLanguage);
|
||||
|
||||
UIAbstractBitmapFont *m_mcBitmapFont;
|
||||
UITTFFont *m_mcTTFFont;
|
||||
UIBitmapFont *m_moj7, *m_moj11;
|
||||
UIUnicodeBitmapFont *m_unicodeBitmapFont;
|
||||
|
||||
std::mt19937 m_randomGenerator;
|
||||
std::uniform_real_distribution<float> m_randomDistribution;
|
||||
|
||||
public:
|
||||
void setCleanupOnReload();
|
||||
void updateCurrentFont();
|
||||
|
||||
|
||||
private:
|
||||
// 4J-PB - ui element type for PSVita touch control
|
||||
#ifdef __PSVITA__
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UIControl *pControl;
|
||||
S32 x1,y1,x2,y2;
|
||||
}
|
||||
UIELEMENT;
|
||||
// E3 - Fine for now, but we need to make this better!
|
||||
vector<UIELEMENT *> m_TouchBoxes[eUIGroup_COUNT][eUILayer_COUNT][eUIScene_COUNT];
|
||||
bool m_bTouchscreenPressed;
|
||||
#endif
|
||||
// 4J Stu - These should be in the order that they reference each other (i.e. they can only reference one with a lower value in the enum)
|
||||
enum ELibraries
|
||||
{
|
||||
eLibrary_Platform,
|
||||
eLibrary_GraphicsDefault,
|
||||
eLibrary_GraphicsHUD,
|
||||
eLibrary_GraphicsInGame,
|
||||
eLibrary_GraphicsTooltips,
|
||||
eLibrary_GraphicsLabels,
|
||||
eLibrary_Labels,
|
||||
eLibrary_InGame,
|
||||
eLibrary_HUD,
|
||||
eLibrary_Tooltips,
|
||||
eLibrary_Default,
|
||||
|
||||
eLibrary_LCDefault,
|
||||
eLibrary_LCInGame,
|
||||
eLibrary_LCGraphics,
|
||||
eLibrary_LCLabels,
|
||||
eLibrary_LCGraphicsLabels,
|
||||
eLibrary_LCGraphicsHud,
|
||||
eLibrary_LCGraphicsInGame,
|
||||
eLibrary_LCGraphicsTooltips,
|
||||
eLibrary_LCHud,
|
||||
eLibrary_LCTooltips,
|
||||
|
||||
#if defined(_WINDOWS64)
|
||||
// Non-HD skin libraries needed by 720p/480p scene SWFs.
|
||||
eLibraryFallback_Platform,
|
||||
eLibraryFallback_GraphicsDefault,
|
||||
eLibraryFallback_GraphicsHUD,
|
||||
eLibraryFallback_GraphicsInGame,
|
||||
eLibraryFallback_GraphicsTooltips,
|
||||
eLibraryFallback_GraphicsLabels,
|
||||
eLibraryFallback_Labels,
|
||||
eLibraryFallback_InGame,
|
||||
eLibraryFallback_HUD,
|
||||
eLibraryFallback_Tooltips,
|
||||
eLibraryFallback_Default,
|
||||
|
||||
// Optional DR-specific HD libraries used by some 1080p menu SWFs.
|
||||
// Keep these after the normal HD and fallback sets so they don't disturb
|
||||
// existing references and can be loaded only when the files exist.
|
||||
eLibraryDR_GraphicsDefault,
|
||||
eLibraryDR_Labels,
|
||||
eLibraryDR_Default,
|
||||
#endif
|
||||
|
||||
eLibrary_Count,
|
||||
};
|
||||
|
||||
IggyLibrary m_iggyLibraries[eLibrary_Count];
|
||||
|
||||
protected:
|
||||
GDrawFunctions *gdraw_funcs;
|
||||
|
||||
private:
|
||||
HIGGYEXP iggy_explorer;
|
||||
HIGGYPERFMON iggy_perfmon;
|
||||
bool m_iggyPerfmonEnabled;
|
||||
|
||||
bool m_bMenuDisplayed[XUSER_MAX_COUNT]; // track each players menu displayed
|
||||
bool m_bMenuToBeClosed[XUSER_MAX_COUNT]; // actioned at the end of the game loop
|
||||
int m_iCountDown[XUSER_MAX_COUNT]; // ticks to block input
|
||||
|
||||
bool m_bCloseAllScenes[eUIGroup_COUNT];
|
||||
|
||||
int m_iPressStartQuadrantsMask;
|
||||
|
||||
C4JRender::eViewportType m_currentRenderViewport;
|
||||
bool m_bCustomRenderPosition;
|
||||
|
||||
static DWORD m_dwTrialTimerLimitSecs;
|
||||
|
||||
unordered_map<wstring, byteArray> m_substitutionTextures;
|
||||
|
||||
typedef struct _CachedMovieData
|
||||
{
|
||||
byteArray m_ba;
|
||||
int64_t m_expiry;
|
||||
} CachedMovieData;
|
||||
unordered_map<wstring, CachedMovieData> m_cachedMovieData;
|
||||
|
||||
typedef struct _QueuedMessageBoxData
|
||||
{
|
||||
MessageBoxInfo info;
|
||||
int iPad;
|
||||
EUILayer layer;
|
||||
} QueuedMessageBoxData;
|
||||
vector<QueuedMessageBoxData *> m_queuedMessageBoxData;
|
||||
|
||||
unsigned int m_winUserIndex;
|
||||
EUIScene m_mouseDraggingSliderScene;
|
||||
int m_mouseDraggingSliderId;
|
||||
bool m_mouseClickConsumedByScene;
|
||||
bool m_bMouseHoverHorizontalList;
|
||||
int m_lastHoverMouseX;
|
||||
int m_lastHoverMouseY;
|
||||
//bool m_bSysUIShowing;
|
||||
bool m_bSystemUIShowing;
|
||||
C4JThread *m_reloadSkinThread;
|
||||
bool m_navigateToHomeOnReload;
|
||||
int m_accumulatedTicks;
|
||||
uint64_t m_lastUiSfx; // Tracks time (ms) of last UI sound effect
|
||||
|
||||
D3D11_RECT m_customRenderingClearRect;
|
||||
|
||||
unordered_map<size_t, UIScene *> m_registeredCallbackScenes; // A collection of scenes and unique id's that are used in async callbacks so we can safely handle when they get destroyed
|
||||
CRITICAL_SECTION m_registeredCallbackScenesCS;;
|
||||
|
||||
public:
|
||||
UIController();
|
||||
#ifdef __PSVITA__
|
||||
void TouchBoxAdd(UIControl *pControl,UIScene *pUIScene);
|
||||
bool TouchBoxHit(UIScene *pUIScene,S32 x, S32 y);
|
||||
void TouchBoxesClear(UIScene *pUIScene);
|
||||
void TouchBoxRebuild(UIScene *pUIScene);
|
||||
|
||||
void HandleTouchInput(unsigned int iPad, unsigned int key, bool bPressed, bool bRepeat, bool bReleased);
|
||||
void SendTouchInput(unsigned int iPad, unsigned int key, bool bPressed, bool bRepeat, bool bReleased);
|
||||
|
||||
private:
|
||||
void TouchBoxAdd(UIControl *pControl,EUIGroup eUIGroup,EUILayer eUILayer,EUIScene eUIscene, UIControl *pMainPanelControl);
|
||||
UIELEMENT *m_ActiveUIElement;
|
||||
UIELEMENT *m_HighlightedUIElement;
|
||||
#endif
|
||||
|
||||
protected:
|
||||
UIGroup *m_groups[eUIGroup_COUNT];
|
||||
|
||||
public:
|
||||
|
||||
auto& getGroups() { return m_groups; }
|
||||
|
||||
void showComponent(int iPad, EUIScene scene, EUILayer layer, EUIGroup group, bool show)
|
||||
{
|
||||
m_groups[group]->showComponent(iPad, scene, layer, show);
|
||||
}
|
||||
|
||||
void removeComponent(EUIScene scene, EUILayer layer, EUIGroup group)
|
||||
{
|
||||
m_groups[group]->removeComponent(scene, layer);
|
||||
}
|
||||
|
||||
protected:
|
||||
// Should be called from the platforms init function
|
||||
void preInit(S32 width, S32 height);
|
||||
void postInit();
|
||||
|
||||
|
||||
public:
|
||||
CRITICAL_SECTION m_Allocatorlock;
|
||||
void SetupFont();
|
||||
bool PendingFontChange();
|
||||
bool UsingBitmapFont();
|
||||
|
||||
public:
|
||||
// TICKING
|
||||
virtual void tick();
|
||||
|
||||
private:
|
||||
void loadSkins();
|
||||
IggyLibrary loadSkin(const wstring &skinPath, const wstring &skinName);
|
||||
|
||||
public:
|
||||
void ReloadSkin();
|
||||
virtual void StartReloadSkinThread();
|
||||
virtual bool IsReloadingSkin();
|
||||
virtual bool IsExpectingOrReloadingSkin();
|
||||
virtual void CleanUpSkinReload();
|
||||
|
||||
private:
|
||||
static int reloadSkinThreadProc(void* lpParam);
|
||||
|
||||
public:
|
||||
byteArray getMovieData(const wstring &filename);
|
||||
|
||||
// INPUT
|
||||
private:
|
||||
void tickInput();
|
||||
void UpdateCursorIcon(UIControl *hitCtrl);
|
||||
void handleInput();
|
||||
void handleKeyPress(unsigned int iPad, unsigned int key);
|
||||
|
||||
protected:
|
||||
static rrbool RADLINK ExternalFunctionCallback( void * user_callback_data , Iggy * player , IggyExternalFunctionCallUTF16 * call );
|
||||
|
||||
public:
|
||||
// RENDERING
|
||||
float getScreenWidth() { return m_fScreenWidth; }
|
||||
float getScreenHeight() { return m_fScreenHeight; }
|
||||
void updateScreenSize(S32 w, S32 h) { m_fScreenWidth = (float)w; m_fScreenHeight = (float)h; app.DebugPrintf("[UI-INIT] updateScreenSize: %d x %d\n", w, h); }
|
||||
|
||||
virtual void render() = 0;
|
||||
void getRenderDimensions(C4JRender::eViewportType viewport, S32 &width, S32 &height);
|
||||
void setupRenderPosition(C4JRender::eViewportType viewport);
|
||||
void setupRenderPosition(S32 xOrigin, S32 yOrigin);
|
||||
|
||||
void SetSysUIShowing(bool bVal);
|
||||
static void SetSystemUIShowing(LPVOID lpParam,bool bVal);
|
||||
|
||||
protected:
|
||||
virtual void setTileOrigin(S32 xPos, S32 yPos) = 0;
|
||||
|
||||
public:
|
||||
|
||||
virtual CustomDrawData *setupCustomDraw(UIScene *scene, IggyCustomDrawCallbackRegion *region) = 0;
|
||||
virtual CustomDrawData *calculateCustomDraw(IggyCustomDrawCallbackRegion *region) = 0;
|
||||
virtual void endCustomDraw(IggyCustomDrawCallbackRegion *region) = 0;
|
||||
protected:
|
||||
// Should be called from the platforms render function
|
||||
void renderScenes();
|
||||
|
||||
public:
|
||||
virtual void beginIggyCustomDraw4J(IggyCustomDrawCallbackRegion *region, CustomDrawData *customDrawRegion) = 0;
|
||||
void setupCustomDrawGameState();
|
||||
void endCustomDrawGameState();
|
||||
void setupCustomDrawMatrices(UIScene *scene, CustomDrawData *customDrawRegion);
|
||||
void setupCustomDrawGameStateAndMatrices(UIScene *scene, CustomDrawData *customDrawRegion);
|
||||
void endCustomDrawMatrices();
|
||||
void endCustomDrawGameStateAndMatrices();
|
||||
|
||||
protected:
|
||||
|
||||
static void RADLINK CustomDrawCallback(void *user_callback_data, Iggy *player, IggyCustomDrawCallbackRegion *Region);
|
||||
static GDrawTexture * RADLINK TextureSubstitutionCreateCallback( void * user_callback_data , IggyUTF16 * texture_name , S32 * width , S32 * height , void **destroy_callback_data );
|
||||
static void RADLINK TextureSubstitutionDestroyCallback( void * user_callback_data , void * destroy_callback_data , GDrawTexture * handle );
|
||||
|
||||
virtual GDrawTexture *getSubstitutionTexture(int textureId) { return nullptr; }
|
||||
virtual void destroySubstitutionTexture(void *destroyCallBackData, GDrawTexture *handle) {}
|
||||
|
||||
public:
|
||||
void registerSubstitutionTexture(const wstring &textureName, PBYTE pbData, DWORD dwLength);
|
||||
void unregisterSubstitutionTexture(const wstring &textureName, bool deleteData);
|
||||
|
||||
public:
|
||||
// NAVIGATION
|
||||
bool NavigateToScene(int iPad, EUIScene scene, void *initData = nullptr, EUILayer layer = eUILayer_Scene, EUIGroup group = eUIGroup_PAD);
|
||||
bool NavigateBack(int iPad, bool forceUsePad = false, EUIScene eScene = eUIScene_COUNT, EUILayer eLayer = eUILayer_COUNT);
|
||||
void NavigateToHomeMenu();
|
||||
UIScene *GetTopScene(int iPad, EUILayer layer = eUILayer_Scene, EUIGroup group = eUIGroup_PAD);
|
||||
|
||||
size_t RegisterForCallbackId(UIScene *scene);
|
||||
void UnregisterCallbackId(size_t id);
|
||||
UIScene *GetSceneFromCallbackId(size_t id);
|
||||
void EnterCallbackIdCriticalSection();
|
||||
void LeaveCallbackIdCriticalSection();
|
||||
|
||||
private:
|
||||
void setFullscreenMenuDisplayed(bool displayed);
|
||||
|
||||
public:
|
||||
void CloseAllPlayersScenes();
|
||||
void CloseUIScenes(int iPad, bool forceIPad = false);
|
||||
|
||||
virtual bool IsPauseMenuDisplayed(int iPad);
|
||||
virtual bool IsContainerMenuDisplayed(int iPad);
|
||||
virtual bool IsIgnorePlayerJoinMenuDisplayed(int iPad);
|
||||
virtual bool IsIgnoreAutosaveMenuDisplayed(int iPad);
|
||||
virtual void SetIgnoreAutosaveMenuDisplayed(int iPad, bool displayed);
|
||||
virtual bool IsSceneInStack(int iPad, EUIScene eScene);
|
||||
bool GetMenuDisplayed(int iPad);
|
||||
void SetMenuDisplayed(int iPad,bool bVal);
|
||||
virtual void CheckMenuDisplayed();
|
||||
void AnimateKeyPress(int iPad, int iAction, bool bRepeat, bool bPressed, bool bReleased);
|
||||
void OverrideSFX(int iPad, int iAction,bool bVal);
|
||||
|
||||
// TOOLTIPS
|
||||
virtual void SetTooltipText( unsigned int iPad, unsigned int tooltip, int iTextID );
|
||||
virtual void SetEnableTooltips( unsigned int iPad, BOOL bVal );
|
||||
virtual void ShowTooltip( unsigned int iPad, unsigned int tooltip, bool show );
|
||||
virtual void SetTooltips( unsigned int iPad, int iA, int iB=-1, int iX=-1, int iY=-1 , int iLT=-1, int iRT=-1, int iLB=-1, int iRB=-1, int iLS=-1, int iRS=-1, int iBack=-1, bool forceUpdate = false);
|
||||
virtual void EnableTooltip( unsigned int iPad, unsigned int tooltip, bool enable );
|
||||
virtual void RefreshTooltips(unsigned int iPad);
|
||||
|
||||
virtual void PlayUISFX(ESoundEffect eSound);
|
||||
|
||||
virtual void DisplayGamertag(unsigned int iPad, bool show);
|
||||
virtual void SetSelectedItem(unsigned int iPad, const wstring &name);
|
||||
virtual void UpdateSelectedItemPos(unsigned int iPad);
|
||||
|
||||
virtual void HandleDLCMountingComplete();
|
||||
virtual void HandleDLCInstalled(int iPad);
|
||||
#ifdef _XBOX_ONE
|
||||
virtual void HandleDLCLicenseChange();
|
||||
#endif
|
||||
virtual void HandleTMSDLCFileRetrieved(int iPad);
|
||||
virtual void HandleTMSBanFileRetrieved(int iPad);
|
||||
virtual void HandleInventoryUpdated(int iPad);
|
||||
virtual void HandleGameTick();
|
||||
|
||||
virtual void SetTutorial(int iPad, Tutorial *tutorial);
|
||||
virtual void SetTutorialDescription(int iPad, TutorialPopupInfo *info);
|
||||
virtual void RemoveInteractSceneReference(int iPad, UIScene *scene);
|
||||
virtual void SetTutorialVisible(int iPad, bool visible);
|
||||
virtual bool IsTutorialVisible(int iPad);
|
||||
|
||||
virtual void UpdatePlayerBasePositions();
|
||||
virtual void SetEmptyQuadrantLogo(int iSection);
|
||||
virtual void HideAllGameUIElements();
|
||||
virtual void ShowOtherPlayersBaseScene(unsigned int iPad, bool show);
|
||||
|
||||
virtual void ShowTrialTimer(bool show);
|
||||
virtual void SetTrialTimerLimitSecs(unsigned int uiSeconds);
|
||||
virtual void UpdateTrialTimer(unsigned int iPad);
|
||||
virtual void ReduceTrialTimerValue();
|
||||
|
||||
virtual void ShowAutosaveCountdownTimer(bool show);
|
||||
virtual void UpdateAutosaveCountdownTimer(unsigned int uiSeconds);
|
||||
virtual void ShowSavingMessage(unsigned int iPad, C4JStorage::ESavingMessage eVal);
|
||||
|
||||
virtual void ShowPlayerDisplayname(bool show);
|
||||
virtual bool PressStartPlaying(unsigned int iPad);
|
||||
virtual void ShowPressStart(unsigned int iPad);
|
||||
virtual void HidePressStart();
|
||||
void ShowAchievementToast(string achievementName, string achievementDescription, byteArray b, string achT = "");
|
||||
void ClearPressStart();
|
||||
|
||||
virtual C4JStorage::EMessageResult RequestAlertMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=nullptr,LPVOID lpParam=nullptr, WCHAR *pwchFormatString=nullptr);
|
||||
virtual C4JStorage::EMessageResult RequestErrorMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=nullptr,LPVOID lpParam=nullptr, WCHAR *pwchFormatString=nullptr);
|
||||
private:
|
||||
virtual C4JStorage::EMessageResult RequestMessageBox(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad,int( *Func)(LPVOID,int,const C4JStorage::EMessageResult),LPVOID lpParam, WCHAR *pwchFormatString,DWORD dwFocusButton, bool bIsError);
|
||||
|
||||
public:
|
||||
C4JStorage::EMessageResult RequestUGCMessageBox(UINT title = -1, UINT message = -1, int iPad = -1, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult) = nullptr, LPVOID lpParam = nullptr);
|
||||
C4JStorage::EMessageResult RequestContentRestrictedMessageBox(UINT title = -1, UINT message = -1, int iPad = -1, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult) = nullptr, LPVOID lpParam = nullptr);
|
||||
|
||||
virtual void SetWinUserIndex(unsigned int iPad);
|
||||
unsigned int GetWinUserIndex();
|
||||
|
||||
virtual void ShowUIDebugConsole(bool show);
|
||||
virtual void ShowUIDebugMarketingGuide(bool show);
|
||||
void logDebugString(const string &text);
|
||||
UIScene* FindScene(EUIScene sceneType);
|
||||
|
||||
public:
|
||||
char *m_defaultBuffer, *m_tempBuffer;
|
||||
void setFontCachingCalculationBuffer(int length);
|
||||
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,12 +6,68 @@
|
|||
|
||||
UIScene_FullscreenProgress::UIScene_FullscreenProgress(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
|
||||
{
|
||||
LoadingInputParams *params = static_cast<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;
|
||||
|
||||
// Setup all the Iggy references we need for this scene
|
||||
initialiseMovie();
|
||||
|
||||
if (m_CompletionData && m_CompletionData->bIsMinigame)
|
||||
{
|
||||
byteArray iconBytes = app.getArchiveFile(L"Graphics\\BattleModeIcon.png");
|
||||
if (iconBytes.data && iconBytes.length > 0)
|
||||
{
|
||||
registerSubstitutionTexture(L"mini_game_battle", iconBytes.data, iconBytes.length, true);
|
||||
}
|
||||
|
||||
IggyName funcSetType = registerFastName( L"SetLoadingScreenType" );
|
||||
IggyDataValue result;
|
||||
IggyDataValue value[1];
|
||||
value[0].type = IGGY_DATATYPE_number;
|
||||
value[0].number = 1.0;
|
||||
IggyResult out = IggyPlayerCallMethodRS( getMovie(), &result, IggyPlayerRootPath( getMovie() ), funcSetType, 1, value );
|
||||
|
||||
// set the texture for the minigame logo inside the SWF dynamically
|
||||
IggyValuePath gmIconPath;
|
||||
if (IggyValuePathMakeNameRef(&gmIconPath, IggyPlayerRootPath(getMovie()), "GMIcon"))
|
||||
{
|
||||
// this is to make the logo smaller
|
||||
// by default it looks huge
|
||||
// 5.0 is the original scale
|
||||
IggyName nameScaleX = registerFastName(L"scaleX");
|
||||
IggyName nameScaleY = registerFastName(L"scaleY");
|
||||
IggyValueSetF64RS(&gmIconPath, nameScaleX, nullptr, 3.45);
|
||||
IggyValueSetF64RS(&gmIconPath, nameScaleY, nullptr, 3.5);
|
||||
|
||||
IggyValuePath mgLogoPath;
|
||||
if (IggyValuePathMakeNameRef(&mgLogoPath, &gmIconPath, "MG_Logo"))
|
||||
{
|
||||
IggyName funcSetTextureName = registerFastName(L"SetTextureName");
|
||||
IggyDataValue resultLogo;
|
||||
IggyDataValue valueLogo[1];
|
||||
IggyStringUTF16 stringVal;
|
||||
stringVal.string = (IggyUTF16*)L"mini_game_battle";
|
||||
stringVal.length = wcslen(L"mini_game_battle");
|
||||
valueLogo[0].type = IGGY_DATATYPE_string_UTF16;
|
||||
valueLogo[0].string16 = stringVal;
|
||||
IggyPlayerCallMethodRS(getMovie(), &resultLogo, &mgLogoPath, funcSetTextureName, 1, valueLogo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
parentLayer->addComponent(iPad,eUIComponent_Panorama);
|
||||
parentLayer->addComponent(iPad,eUIComponent_Logo);
|
||||
parentLayer->showComponent(iPad,eUIComponent_Logo,true);
|
||||
parentLayer->showComponent(iPad,eUIComponent_Logo, true);
|
||||
parentLayer->showComponent(iPad,eUIComponent_MenuBackground,false);
|
||||
|
||||
m_controlTimer.setVisible( false );
|
||||
|
|
@ -26,19 +82,6 @@ UIScene_FullscreenProgress::UIScene_FullscreenProgress(int iPad, void *initData,
|
|||
m_buttonConfirm.init( app.GetString( IDS_CONFIRM_OK ), eControl_Confirm );
|
||||
m_buttonConfirm.setVisible(false);
|
||||
|
||||
LoadingInputParams *params = static_cast<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);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,34 @@
|
|||
#include "stdafx.h"
|
||||
#include "UI.h"
|
||||
#include "UIScene_MinigamesCreateMenu.h"
|
||||
#include "UIScene_FullscreenProgress.h"
|
||||
#include "../../Minecraft.h"
|
||||
#include "../../MinecraftServer.h"
|
||||
#include "../../../Minecraft.World/File.h"
|
||||
#include "../../../Minecraft.World/InputOutputStream.h"
|
||||
#include "../../TexturePackRepository.h"
|
||||
// mini gaimes menus By aRockefeler o aRockefort
|
||||
// string localization by Fireblade
|
||||
namespace
|
||||
{
|
||||
LoadSaveDataThreadParam* LoadLobbySaveData()
|
||||
{
|
||||
File lobbySave(L"Windows64Media\\Lobby\\Lobby.mcs");
|
||||
if (!lobbySave.exists())
|
||||
lobbySave = File(L"Windows64\\Lobby\\Lobby.mcs");
|
||||
|
||||
if (!lobbySave.exists())
|
||||
return nullptr;
|
||||
|
||||
int64_t fileSize = lobbySave.length();
|
||||
FileInputStream fis(lobbySave);
|
||||
byteArray ba(static_cast<unsigned int>(fileSize));
|
||||
fis.read(ba);
|
||||
fis.close();
|
||||
|
||||
return new LoadSaveDataThreadParam(ba.data, ba.length, lobbySave.getName());
|
||||
}
|
||||
|
||||
const wchar_t* GetBattleModeLabel(int mode)
|
||||
{
|
||||
switch (mode)
|
||||
|
|
@ -385,13 +408,61 @@ void UIScene_MinigamesCreateMenu::checkStateAndStartGame()
|
|||
|
||||
void UIScene_MinigamesCreateMenu::LaunchGame()
|
||||
{
|
||||
// this is for debugging
|
||||
// if the menu is already complete you can remove this
|
||||
app.DebugPrintf("[MGDBG] MiniGamesCreateMenu Create pressed for type=%d mode=%d online=%d public=%d friends=%d invite=%d\n",
|
||||
m_iMiniGameType,
|
||||
m_iBattleModeSelection,
|
||||
m_MoreOptionsParams.bOnlineGame ? 1 : 0,
|
||||
m_bPublicGame ? 1 : 0,
|
||||
m_MoreOptionsParams.bAllowFriendsOfFriends ? 1 : 0,
|
||||
m_MoreOptionsParams.bInviteOnly ? 1 : 0);
|
||||
SyncBattleCheckboxStates();
|
||||
m_bIgnoreInput = true;
|
||||
|
||||
LoadSaveDataThreadParam* saveData = LoadLobbySaveData();
|
||||
if (!saveData)
|
||||
{
|
||||
app.DebugPrintf("[MGDBG] Failed to load Lobby.mcs (Windows64Media/Lobby).\n");
|
||||
m_bIgnoreInput = false;
|
||||
return;
|
||||
}
|
||||
|
||||
app.SetTutorialMode(false);
|
||||
StorageManager.ResetSaveData();
|
||||
StorageManager.SetSaveTitle(L"Lobby");
|
||||
app.SetAutosaveTimerTime();
|
||||
|
||||
app.SetGameHostOption(eGameHostOption_FriendsOfFriends, m_MoreOptionsParams.bAllowFriendsOfFriends);
|
||||
app.SetGameHostOption(eGameHostOption_Gamertags, app.GetGameSettings(m_iPad, eGameSetting_GamertagsVisible) ? 1 : 0);
|
||||
app.SetGameHostOption(eGameHostOption_PvP, m_MoreOptionsParams.bPVP);
|
||||
app.SetGameHostOption(eGameHostOption_TrustPlayers, m_MoreOptionsParams.bTrust);
|
||||
app.SetGameHostOption(eGameHostOption_FireSpreads, m_MoreOptionsParams.bFireSpreads);
|
||||
app.SetGameHostOption(eGameHostOption_TNT, m_MoreOptionsParams.bTNT);
|
||||
app.SetGameHostOption(eGameHostOption_HostCanFly, m_MoreOptionsParams.bHostPrivileges);
|
||||
app.SetGameHostOption(eGameHostOption_HostCanChangeHunger, m_MoreOptionsParams.bHostPrivileges);
|
||||
app.SetGameHostOption(eGameHostOption_HostCanBeInvisible, m_MoreOptionsParams.bHostPrivileges);
|
||||
app.SetGameHostOption(eGameHostOption_WasntSaveOwner, false);
|
||||
|
||||
bool isClientSide = ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad())
|
||||
&& m_MoreOptionsParams.bOnlineGame;
|
||||
bool isPrivate = m_MoreOptionsParams.bInviteOnly ? true : false;
|
||||
|
||||
g_NetworkManager.HostGame(0, isClientSide, isPrivate, MINECRAFT_NET_MAX_PLAYERS, 0);
|
||||
|
||||
#ifndef _XBOX
|
||||
g_NetworkManager.FakeLocalPlayerJoined();
|
||||
#endif
|
||||
|
||||
NetworkGameInitData* param = new NetworkGameInitData();
|
||||
param->seed = 0;
|
||||
param->saveData = saveData;
|
||||
param->settings = app.GetGameHostOption(eGameHostOption_All);
|
||||
param->savePlatform = SAVE_FILE_PLATFORM_LOCAL;
|
||||
|
||||
LoadingInputParams* loadingParams = new LoadingInputParams();
|
||||
loadingParams->func = &CGameNetworkManager::RunNetworkGameThreadProc;
|
||||
loadingParams->lpParam = static_cast<LPVOID>(param);
|
||||
|
||||
UIFullscreenProgressCompletionData* completionData = new UIFullscreenProgressCompletionData();
|
||||
completionData->bShowBackground = TRUE;
|
||||
completionData->bShowLogo = TRUE;
|
||||
completionData->bShowTips = TRUE;
|
||||
completionData->type = e_ProgressCompletion_CloseAllPlayersUIScenes;
|
||||
completionData->iPad = DEFAULT_XUI_MENU_USER;
|
||||
completionData->bIsMinigame = TRUE;
|
||||
loadingParams->completionData = completionData;
|
||||
|
||||
ui.NavigateToScene(m_iPad, eUIScene_FullscreenProgress, loadingParams);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ UIScene_MinigamesMenu::UIScene_MinigamesMenu(int iPad, void *initData, UILayer *
|
|||
// here the code ask for the swf
|
||||
std::wstring UIScene_MinigamesMenu::getMoviePath()
|
||||
{
|
||||
app.DebugPrintf("[MGDBG] UIScene_MinigamesMenu getMoviePath -> MiniGamesMenu\n");// and this is for debugging too
|
||||
return L"MiniGamesMenu";
|
||||
app.DebugPrintf("[MGDBG] UIScene_MinigamesMenu getMoviePath -> LoadCreateJoinMenu\n");// and this is for debugging too
|
||||
return L"LoadCreateJoinMenu";
|
||||
}
|
||||
|
||||
void UIScene_MinigamesMenu::ApplyMiniGamesLabels()
|
||||
|
|
|
|||
|
|
@ -218,6 +218,7 @@ typedef struct _UIFullscreenProgressCompletionData
|
|||
BOOL bShowBackground;
|
||||
BOOL bShowLogo;
|
||||
BOOL bShowTips;
|
||||
BOOL bIsMinigame;
|
||||
ProgressionCompletionType type;
|
||||
int iPad;
|
||||
EUIScene scene;
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in a new issue