3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/persona/IPersonaClient.h"
7#include "mc/client/persona/SkinHandle.h"
8#include "mc/client/persona/SyncContext.h"
9#include "mc/client/persona/defaults/DefaultSkinType.h"
10#include "mc/client/services/persona/PersonaCharacterHandleArray.h"
11#include "mc/client/store/commerce/EntitlementChangeListener.h"
12#include "mc/deps/core/threading/SharedAsync.h"
13#include "mc/deps/core/utility/NonOwnerPointer.h"
14#include "mc/deps/core/utility/pub_sub/Subscription.h"
15#include "mc/world/actor/player/persona/PersonaCharacterHandle.h"
16#include "mc/world/actor/player/persona/ProfileType.h"
33namespace mce {
class UUID; }
36namespace persona::color {
class ColorInfo; }
37namespace persona::edu {
class Context; }
48 enum class SyncSource :
int {
58 ::ll::TypedStorage<8, 8, ::PersonaClient*> mPersonaClient;
59 ::ll::TypedStorage<8, 16, ::std::weak_ptr<bool>> mExistanceTracker;
65 virtual void _onEntitlementRefreshFinished() ;
75 using OnPersonaSyncedCallback = ::std::function<void()>;
79 using CreatePersonaCallback = ::std::function<void(::std::string
const&)>;
84 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::SkinRepository>> mSkinRepository;
85 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::CustomSkinManager>> mCustomSkinManager;
86 ::ll::TypedStorage<8, 8, ::IClientInstance&> mClient;
87 ::ll::TypedStorage<8, 8, ::PersonaRepository&> mPersonaRepository;
88 ::ll::TypedStorage<8, 16, ::gsl::not_null<::std::shared_ptr<::persona::edu::Context>>> mEduContext;
89 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::Social::IUserManager>> mUserManager;
90 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::DateManager const>> mDateManager;
91 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::PersonaService>> mPersonaService;
92 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::OptionRegistry>> mOptions;
93 ::ll::TypedStorage<8, 64, ::std::function<void()>> mOnPersonaSyncedCallback;
94 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mSkinUploadErrorSubscription;
95 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mXuidOptionSubscription;
96 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mPlayfabUserSignInSubscription;
97 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mPlayfabUserSignOutSubscription;
98 ::ll::TypedStorage<8, 112, ::SkinHandle> mSelectedSkinHandle;
99 ::ll::TypedStorage<8, 112, ::SkinHandle> mPendingSelectedSkin;
100 ::ll::TypedStorage<1, 1, bool> mSelectedSkinInitialized;
101 ::ll::TypedStorage<4, 4, uint> mUserId;
102 ::ll::TypedStorage<8, 40, ::persona::PersonaCharacterHandle> mSendPacketForCharacterAfterSave;
103 ::ll::TypedStorage<4, 4, int> mControllerId;
104 ::ll::TypedStorage<8, 32, ::std::string> mXuid;
105 ::ll::TypedStorage<8, 16, ::Bedrock::Threading::SharedAsync<void>> mLastQueuedSync;
106 ::ll::TypedStorage<8, 16, ::std::shared_ptr<bool>> mExistanceTracker;
107 ::ll::TypedStorage<1, 1, bool> mUserUpdateInProcess;
108 ::ll::TypedStorage<8, 8, int64> mPersonaSyncStartTime;
109 ::ll::TypedStorage<1, 1, bool> mPersonaSyncInitialized;
110 ::ll::TypedStorage<1, 1, bool> mSelectedSkinInitializedNotTimedOut;
111 ::ll::TypedStorage<1, 1, bool> mCustomSkinCleanupDone;
112 ::ll::TypedStorage<8, 64, ::std::unordered_set<::persona::ProfileType>> mProcessingProfileTypes;
113 ::ll::TypedStorage<1, 1, ::persona::ProfileType> mCurrentProfileType;
114 ::ll::TypedStorage<1, 1, ::persona::ProfileType> mSelectedSlot;
115 ::ll::TypedStorage<8, 240, ::persona::PersonaCharacterHandleArray> mPersonaCharacterHandles;
116 ::ll::TypedStorage<8, 40, ::persona::PersonaCharacterHandle> mTemporaryPersonaHandle;
117 ::ll::TypedStorage<1, 1, bool> mPendingSplitScreenInitSkinUpdate;
118 ::ll::TypedStorage<8, 40, ::persona::SyncContext> mSyncContext;
119 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::PersonaClient::SkinEntitlementChangeListener>>
120 mEntitlementChangeListener;
121 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mTaskGroup;
122 ::ll::TypedStorage<1, 1, bool> mIsLegacySkinMissingEntitlement;
127 PersonaClient& operator=(PersonaClient
const&);
128 PersonaClient(PersonaClient
const&);
134 virtual ~PersonaClient() =
default;
136 virtual bool isSelectedSkinPlatformLocked() const ;
138 virtual
void sendNewPlayerSkinPacket(
139 ::persona::ProfileType const profileType,
140 ::
std::
string const& oldSkinName,
146 virtual
void savePersona(::persona::PersonaCharacterHandle const& characterHandle) ;
148 virtual
void updateCharacterSkinData(
149 ::persona::PersonaCharacterHandle const& characterHandle,
153 virtual ::
SkinHandle const& getSelectedSkinHandle() const ;
155 virtual
void setPersonaLegacySlotSkin(::
SkinHandle const& skin) const ;
157 virtual ::persona::PersonaCharacterHandle getCurrentCharacterHandle() const ;
159 virtual
void createUpdatePersonaFromAppearance(
161 ::persona::ProfileType profileType,
163 ::persona::PersonaCharacterHandle const& personaToUpdateHandle,
164 bool shouldNotifyService,
172 MCNAPI PersonaClient(
175 ::Bedrock::NotNullNonOwnerPtr<::Social::IUserManager> userManager,
176 ::Bedrock::NotNullNonOwnerPtr<::
DateManager const> dateManager,
180 int const& controllerId,
182 ::
std::function<
void()> onPersonaSyncedCallback
187 MCNAPI ::
std::function<
void(::
std::
string const&)>
201 ::persona::PersonaCharacterHandle& activeCharacterHandle,
202 ::
std::function<
void(::
std::
string const&)> callback
212 _replaceSlotHandle(::persona::ProfileType profileType, ::persona::PersonaCharacterHandle const& newHandle);
214 MCNAPI
void _runSync(::PersonaClient::SyncSource source);
219 ::
Skin const* newAppearance,
220 bool notifyPersonaService,
228 bool notifyPersonaService,
237 ::persona::PersonaCharacterHandle const& handle,
238 ::
std::
string const& pieceId,
239 ::persona::FreeItemState const& freeItemState,
241 ::
std::function<
void(
bool)> callback
245 createPersona(::persona::ProfileType profileType, uint defaultAppearanceIndex, ::
std::function<
void()> callback);
248 ::persona::ProfileType profileType,
249 ::mce::UUID const& defaultCharacterId,
250 ::
std::function<
void()> callback
270 ::persona::PersonaCharacterHandle& activeCharacterHandle,
271 ::
std::function<
void(::
std::
string const&)> callback
296 ::persona::ProfileType profileType,
302 ::persona::PersonaCharacterHandle const& handle,
303 ::
std::function<
void(
bool)> callback
327 ::Bedrock::NotNullNonOwnerPtr<::Social::IUserManager> userManager,
328 ::Bedrock::NotNullNonOwnerPtr<::
DateManager const> dateManager,
332 int const& controllerId,
334 ::
std::function<
void()> onPersonaSyncedCallback
344 ::persona::ProfileType const profileType,
345 ::
std::
string const& oldSkinName,
351 MCNAPI
void $savePersona(::persona::PersonaCharacterHandle const& characterHandle);
364 ::persona::ProfileType profileType,
366 ::persona::PersonaCharacterHandle const& personaToUpdateHandle,
367 bool shouldNotifyService,
Definition CustomSkinManager.h:5
Definition DateManager.h:14
Definition IClientInstance.h:5
Definition IPersonaClient.h:5
Definition IPersonaRepository.h:5
Definition OptionRegistry.h:5
Definition PersonaAppearance.h:5
Definition PersonaClient.h:15
MCAPI void $_onEntitlementRefreshFinished()
Definition PersonaClient.h:5
MCAPI::std::string getPlayFabIdFromUser()
MCAPI ::std::function< void(::std::string const &)> _constructCreatePersonaCallback(::persona::ProfileType const profileType, ::std::function< void()> &&callback)
MCAPI::persona::PersonaCharacterHandle $getCurrentCharacterHandle() const
MCAPI void updatePersonaWithNewAppearance(::PersonaAppearance const &newAppearance, ::persona::PersonaCharacterHandle const &handle, ::std::function< void(bool)> callback)
MCAPI void equipDefaultSkin()
MCAPI void _onPlayFabSignIn(uint signedInLocalUserId)
MCAPI void updatePersonaFromAppearance(::persona::ProfileType profileType, ::std::function< void(::SkinHandle)> syncCompleteCallback)
static MCAPI ::SkinHandle getDefaultSkinHandle(::persona::DefaultSkinType defaultSkin)
MCAPI void changePersonaEmote(::persona::PersonaCharacterHandle const &handle, ::std::string const &pieceId, ::persona::FreeItemState const &freeItemState, int emoteWheelSlot, ::std::function< void(bool)> callback)
MCAPI ::std::vector<::persona::ProfileType > getNonLegacyPersonaFilledSlots() const
MCAPI bool arePlayerAnimationsReadyToRender() const
MCAPI::persona::PersonaCharacterHandle const & getTemporaryPersonaCharacterHandle(::persona::PersonaCharacterHandle &activeCharacterHandle, ::std::function< void(::std::string const &)> callback)
MCAPI void _createDefaultPersonaInSlot(::persona::ProfileType profileToPlace, int defaultIndexOverride)
MCAPI bool isSkinHandleDummySkin(::SkinHandle const &handle) const
MCAPI bool isPersonaAppearanceLoading(int slot) const
MCAPI bool $isSelectedSkinPlatformLocked() const
MCAPI void _setSelectedAppearance(::Skin const *newAppearance, bool notifyPersonaService, ::std::function< void(::SkinHandle)> requestCallback)
MCAPI void setSelectedSkinToPersona(bool notifyPersonaService)
MCAPI::SkinHandle const & $getSelectedSkinHandle() const
MCAPI void updateClassicSkinCape(::persona::PersonaCharacterHandle const &handle)
MCAPI::IPersonaRepository const & $getPersonaRepository() const
MCAPI void $updateCharacterSkinData(::persona::PersonaCharacterHandle const &characterHandle, ::SkinHandle const &handle)
MCAPI void _registerGeoDefaultSkins(::persona::DefaultSkinType type)
MCAPI void _firstTimePersonaSlotSetup()
static MCAPI ::Skin & mInvalidSkin()
MCAPI void createPersona(::persona::ProfileType profileType, uint defaultAppearanceIndex, ::std::function< void()> callback)
MCAPI::Skin const & getSelectedSkinOrDefault(bool checkOwnership)
MCAPI void _replaceSlotHandle(::persona::ProfileType profileType, ::persona::PersonaCharacterHandle const &newHandle)
MCAPI void $sendNewPlayerSkinPacket(::persona::ProfileType const profileType, ::std::string const &oldSkinName, bool isClassicSkin)
MCAPI void tryFullPersonaReload(::persona::ProfileType profileType)
MCAPI void _invalidatePersonaProfiles()
MCAPI void _handleReenteringScreen(::persona::PersonaCharacterHandle &activeCharacterHandle, ::std::function< void(::std::string const &)> callback)
MCAPI bool _canSendPlatformLockedSkinToCurrentConnection() const
MCAPI void _runSync(::PersonaClient::SyncSource source)
MCAPI void _startInitForEdu(::std::string const &skinToUse)
MCAPI bool hasDefaultSkin(::persona::DefaultSkinType type) const
MCAPI bool _updateSelectedPersonaProfileSkin()
MCAPI::SkinHandle _getAppearanceFromCharacter(::PersonaCharacter const &newCharacter) const
MCAPI void setSelectedSkinHandle(::SkinHandle const &skinHandle)
MCAPI::Skin const & getDefaultSkin(::persona::DefaultSkinType type) const
MCAPI void * $ctor(::std::shared_ptr<::SkinRepository > skinRepository, ::PersonaRepository &personaRepository, ::Bedrock::NotNullNonOwnerPtr<::Social::IUserManager > userManager, ::Bedrock::NotNullNonOwnerPtr<::DateManager const > dateManager, ::Bedrock::NotNullNonOwnerPtr<::PersonaService > personaService, ::std::weak_ptr<::OptionRegistry > options, uint const &userId, int const &controllerId, ::IClientInstance &client, ::std::function< void()> onPersonaSyncedCallback)
MCAPI void _handleNewScreen(::std::function< void(::std::string const &)> callback)
MCAPI void _setAppearanceOption(::Skin const *newAppearance)
MCAPI void setSelectedSkin(::Skin const *newSkin, ::std::function< void(::SkinHandle)> requestCallback)
MCAPI void $savePersona(::persona::PersonaCharacterHandle const &characterHandle)
MCAPI::Skin const & getSelectedSkinForMultiplayer(bool checkOwnership) const
MCAPI::std::string const & getSelectedProfileHash() const
MCAPI void _handleCustomSkinUploadErrors(::std::vector<::persona::CustomSkinUploadError > const &errors)
MCAPI void $setPersonaLegacySlotSkin(::SkinHandle const &skin) const
MCAPI void $createUpdatePersonaFromAppearance(::PersonaAppearance const &appearance, ::persona::ProfileType profileType, ::std::function< void(::SkinHandle)> syncCompleteCallback, ::persona::PersonaCharacterHandle const &personaToUpdateHandle, bool shouldNotifyService, bool)
MCAPI void _updateSelectedAppearance(::SkinHandle const &newAppearanceHandle, bool notifyPersonaService, ::std::function< void(::SkinHandle)> callback)
MCAPI void firePersonaInitializationCompleteEvent()
MCAPI void updateSelectedPersonaSkinSlot(::SkinHandle const &handle)
MCAPI void removeCurrentPersonaSlot()
Definition PersonaRepository.h:5
Definition PersonaService.h:5
Definition SkinHandle.h:5
Definition SkinRepository.h:5
Definition IUserManager.h:7
Definition TaskGroup.h:85
Definition PersonaCharacter.h:5
Definition CustomSkinUploadError.h:7
Definition FreeItemState.h:7