diff --git a/minecraft/platform/IPlatformNetwork.h b/minecraft/platform/IPlatformNetwork.h new file mode 100644 index 000000000..675a2e0a6 --- /dev/null +++ b/minecraft/platform/IPlatformNetwork.h @@ -0,0 +1,92 @@ +#pragma once + +#include +#include +#include + +#include "../4J.Common/4J_Compat.h" + +class INetworkPlayer; +class ClientConnection; +class Minecraft; +class CGameNetworkManager; +struct FriendSessionInfo; +using SessionID = uint64_t; + +class IPlatformNetwork { +public: + enum eJoinFailedReason { + JOIN_FAILED_SERVER_FULL, + JOIN_FAILED_INSUFFICIENT_PRIVILEGES, + JOIN_FAILED_NONSPECIFIC, + }; + + virtual ~IPlatformNetwork() = default; + + virtual bool Initialise(CGameNetworkManager* pGameNetworkManager, + int flagIndexSize) = 0; + virtual void Terminate() = 0; + virtual void DoWork() = 0; + + // Players + virtual int GetPlayerCount() = 0; + virtual int GetOnlinePlayerCount() = 0; + virtual int GetLocalPlayerMask(int playerIndex) = 0; + virtual bool AddLocalPlayerByUserIndex(int userIndex) = 0; + virtual bool RemoveLocalPlayerByUserIndex(int userIndex) = 0; + virtual INetworkPlayer* GetLocalPlayerByUserIndex(int userIndex) = 0; + virtual INetworkPlayer* GetPlayerByIndex(int playerIndex) = 0; + virtual INetworkPlayer* GetPlayerByXuid(PlayerUID xuid) = 0; + virtual INetworkPlayer* GetPlayerBySmallId(unsigned char smallId) = 0; + virtual INetworkPlayer* GetHostPlayer() = 0; + virtual bool ShouldMessageForFullSession() = 0; + + // Session + virtual bool IsHost() = 0; + virtual bool IsInSession() = 0; + virtual bool IsInGameplay() = 0; + virtual bool IsReadyToPlayOrIdle() = 0; + virtual bool IsInStatsEnabledSession() = 0; + virtual bool SessionHasSpace(unsigned int spaceRequired = 1) = 0; + virtual bool IsAddingPlayer() = 0; + virtual bool IsLocalGame() = 0; + virtual void SetLocalGame(bool isLocal) = 0; + virtual bool IsPrivateGame() = 0; + virtual void SetPrivateGame(bool isPrivate) = 0; + virtual bool IsLeavingGame() = 0; + virtual void ResetLeavingGame() = 0; + + // Hosting / joining + virtual void HostGame(int localUsersMask, bool bOnlineGame, bool bIsPrivate, + unsigned char publicSlots, unsigned char privateSlots) = 0; + virtual int JoinGame(FriendSessionInfo* searchResult, int dwLocalUsersMask, + int dwPrimaryUserIndex) = 0; + virtual void CancelJoinGame() {} + virtual bool LeaveGame(bool bMigrateHost) = 0; + virtual void SendInviteGUI(int quadrant) = 0; + virtual int GetJoiningReadyPercentage() = 0; + + // Callbacks + virtual void RegisterPlayerChangedCallback( + int iPad, + void (*callback)(void*, INetworkPlayer*, bool), + void* callbackParam) = 0; + virtual void UnRegisterPlayerChangedCallback( + int iPad, + void (*callback)(void*, INetworkPlayer*, bool), + void* callbackParam) = 0; + + virtual void HandleSignInChange() = 0; + + // Stats + virtual std::wstring GatherStats() = 0; + virtual std::wstring GatherRTTStats() = 0; + + // Session list + virtual std::vector* GetSessionList(int iPad, + int localPlayers, + bool partyOnly) = 0; + virtual void SetSessionsUpdatedCallback( + void (*SessionsUpdatedCallback)(void*), void* pSearchParam) = 0; + virtual void ForceFriendsSessionRefresh() = 0; +}; diff --git a/minecraft/platform/IPlatformSound.h b/minecraft/platform/IPlatformSound.h new file mode 100644 index 000000000..10a7b1d29 --- /dev/null +++ b/minecraft/platform/IPlatformSound.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include + +class File; +class Mob; +class Options; + +class IPlatformSound { +public: + virtual ~IPlatformSound() = default; + + virtual void init(Options*) = 0; + virtual void destroy() = 0; + virtual void tick(std::shared_ptr* players, float a) = 0; + + // SFX + virtual void play(int iSound, float x, float y, float z, float volume, + float pitch) = 0; + virtual void playUI(int iSound, float volume, float pitch) = 0; + + // Streaming / music + virtual void playStreaming(const std::wstring& name, float x, float y, + float z, float volume, float pitch, + bool bMusicDelay = true) = 0; + virtual void playMusicTick() = 0; + virtual void updateMusicVolume(float fVal) = 0; + virtual void updateSystemMusicPlaying(bool isPlaying) = 0; + virtual void updateSoundEffectVolume(float fVal) = 0; + + // Asset registration + virtual void add(const std::wstring& name, File* file) = 0; + virtual void addMusic(const std::wstring& name, File* file) = 0; + virtual void addStreaming(const std::wstring& name, File* file) = 0; + virtual char* ConvertSoundPathToName(const std::wstring& name, + bool bConvertSpaces = false) = 0; +}; diff --git a/minecraft/platform/IPlatformUIController.h b/minecraft/platform/IPlatformUIController.h new file mode 100644 index 000000000..fd2f074ae --- /dev/null +++ b/minecraft/platform/IPlatformUIController.h @@ -0,0 +1,112 @@ +#pragma once + +#include + +#include "IPlatformStorage.h" + +// Forward declarations for game types used by the UI interface. +// Full definitions live in the Client module. +enum EUIScene : int; +enum EUILayer : int; +enum EUIGroup : int; +enum ESoundEffect : int; +struct TutorialPopupInfo; + +class IPlatformUIController { +public: + virtual ~IPlatformUIController() = default; + + virtual void tick() = 0; + virtual void render() = 0; + + // Skin + virtual void StartReloadSkinThread() = 0; + virtual bool IsReloadingSkin() = 0; + virtual void CleanUpSkinReload() = 0; + + // Navigation + virtual bool NavigateToScene(int iPad, EUIScene scene, + void* initData = nullptr, + EUILayer layer = static_cast(0), + EUIGroup group = static_cast(0)) = 0; + virtual bool NavigateBack(int iPad, bool forceUsePad = false, + EUIScene eScene = static_cast(-1), + EUILayer eLayer = static_cast(-1)) = 0; + virtual void CloseUIScenes(int iPad, bool forceIPad = false) = 0; + virtual void CloseAllPlayersScenes() = 0; + + // Menu state + virtual bool IsPauseMenuDisplayed(int iPad) = 0; + virtual bool IsContainerMenuDisplayed(int iPad) = 0; + virtual bool IsIgnorePlayerJoinMenuDisplayed(int iPad) = 0; + virtual bool IsIgnoreAutosaveMenuDisplayed(int iPad) = 0; + virtual void SetIgnoreAutosaveMenuDisplayed(int iPad, bool displayed) = 0; + virtual bool IsSceneInStack(int iPad, EUIScene eScene) = 0; + virtual bool GetMenuDisplayed(int iPad) = 0; + virtual void CheckMenuDisplayed() = 0; + + // Tooltips + virtual void SetTooltipText(unsigned int iPad, unsigned int tooltip, + int iTextID) = 0; + virtual void SetEnableTooltips(unsigned int iPad, bool bVal) = 0; + virtual void ShowTooltip(unsigned int iPad, unsigned int tooltip, + bool show) = 0; + 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) = 0; + virtual void EnableTooltip(unsigned int iPad, unsigned int tooltip, + bool enable) = 0; + virtual void RefreshTooltips(unsigned int iPad) = 0; + + // Sound + virtual void PlayUISFX(ESoundEffect eSound) = 0; + + // Debug + virtual void ShowUIDebugConsole(bool show) {} + virtual void ShowUIDebugMarketingGuide(bool show) {} + + // HUD + virtual void DisplayGamertag(unsigned int iPad, bool show) = 0; + virtual void SetSelectedItem(unsigned int iPad, + const std::wstring& name) = 0; + virtual void UpdateSelectedItemPos(unsigned int iPad) = 0; + + // Events + virtual void HandleDLCMountingComplete() = 0; + virtual void HandleDLCInstalled(int iPad) = 0; + virtual void HandleTMSDLCFileRetrieved(int iPad) = 0; + virtual void HandleTMSBanFileRetrieved(int iPad) = 0; + virtual void HandleInventoryUpdated(int iPad) = 0; + virtual void HandleGameTick() = 0; + + // Tutorial + virtual void SetTutorialDescription(int iPad, TutorialPopupInfo* info) = 0; + virtual void SetTutorialVisible(int iPad, bool visible) = 0; + virtual bool IsTutorialVisible(int iPad) = 0; + + // Layout + virtual void UpdatePlayerBasePositions() = 0; + virtual void SetEmptyQuadrantLogo(int iSection) = 0; + virtual void HideAllGameUIElements() = 0; + virtual void ShowOtherPlayersBaseScene(unsigned int iPad, bool show) = 0; + + // Trial timer + virtual void ShowTrialTimer(bool show) = 0; + virtual void SetTrialTimerLimitSecs(unsigned int uiSeconds) = 0; + virtual void UpdateTrialTimer(unsigned int iPad) = 0; + virtual void ReduceTrialTimerValue() = 0; + + // Autosave + virtual void ShowAutosaveCountdownTimer(bool show) = 0; + virtual void UpdateAutosaveCountdownTimer(unsigned int uiSeconds) = 0; + virtual void ShowSavingMessage(unsigned int iPad, + IPlatformStorage::ESavingMessage eVal) = 0; + + // Start screen + virtual bool PressStartPlaying(unsigned int iPad) = 0; + virtual void ShowPressStart(unsigned int iPad) = 0; + + virtual void SetWinUserIndex(unsigned int iPad) = 0; +}; diff --git a/minecraft/platform/Platform.h b/minecraft/platform/Platform.h index 2790f6514..14d7b877e 100644 --- a/minecraft/platform/Platform.h +++ b/minecraft/platform/Platform.h @@ -1,6 +1,9 @@ #pragma once #include "IPlatformInput.h" +#include "IPlatformNetwork.h" #include "IPlatformProfile.h" #include "IPlatformRender.h" +#include "IPlatformSound.h" #include "IPlatformStorage.h" +#include "IPlatformUIController.h"