554 lines
18 KiB
Ucode
554 lines
18 KiB
Ucode
|
/**
|
||
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* This class holds the data used in reading/writing online player data.
|
||
|
* The online player data is stored by an external service.
|
||
|
*/
|
||
|
class OnlinePlayerStorage extends Object
|
||
|
dependson(Settings)
|
||
|
native;
|
||
|
|
||
|
/** Enum indicating who owns a given online profile proprety */
|
||
|
enum EOnlineProfilePropertyOwner
|
||
|
{
|
||
|
/** No owner assigned */
|
||
|
OPPO_None,
|
||
|
/** Owned by the online service */
|
||
|
OPPO_OnlineService,
|
||
|
/** Owned by the game in question */
|
||
|
OPPO_Game
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Structure used to hold the information for a given profile setting
|
||
|
*/
|
||
|
struct native OnlineProfileSetting
|
||
|
{
|
||
|
/** Which party owns the data (online service vs game) */
|
||
|
var EOnlineProfilePropertyOwner Owner;
|
||
|
/** The profile setting comprised of unique id and union of held types */
|
||
|
var SettingsProperty ProfileSetting;
|
||
|
|
||
|
structcpptext
|
||
|
{
|
||
|
/** Does nothing (no init version) */
|
||
|
FOnlineProfileSetting(void)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Zeroes members
|
||
|
*/
|
||
|
FOnlineProfileSetting(EEventParm) :
|
||
|
Owner(0),
|
||
|
ProfileSetting(EC_EventParm)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Copy constructor. Copies the other into this object
|
||
|
*
|
||
|
* @param Other the other structure to copy
|
||
|
*/
|
||
|
FOnlineProfileSetting(const FOnlineProfileSetting& Other) :
|
||
|
Owner(0),
|
||
|
ProfileSetting(EC_EventParm)
|
||
|
{
|
||
|
Owner = Other.Owner;
|
||
|
ProfileSetting = Other.ProfileSetting;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Assignment operator. Copies the other into this object
|
||
|
*
|
||
|
* @param Other the other structure to copy
|
||
|
*/
|
||
|
FOnlineProfileSetting& operator=(const FOnlineProfileSetting& Other)
|
||
|
{
|
||
|
if (&Other != this)
|
||
|
{
|
||
|
Owner = Other.Owner;
|
||
|
ProfileSetting = Other.ProfileSetting;
|
||
|
}
|
||
|
return *this;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
/** Used to determine if the read online player data is the proper version or not */
|
||
|
var const int VersionNumber;
|
||
|
/** id for profile setting that contains the version # */
|
||
|
var const int VersionSettingsId;
|
||
|
/** id for profile setting that contains the save count */
|
||
|
var const int SaveCountSettingId;
|
||
|
|
||
|
/** Current set of player data that is either returned from a read or to be written out */
|
||
|
var array<OnlineProfileSetting> ProfileSettings;
|
||
|
|
||
|
/** Holds the set of mappings from native format to human readable format */
|
||
|
var array<SettingsPropertyPropertyMetaData> ProfileMappings;
|
||
|
|
||
|
/** Enum indicating the current async action happening on the player data */
|
||
|
enum EOnlinePlayerStorageAsyncState
|
||
|
{
|
||
|
/** No read/write operation has started on this storage object */
|
||
|
OPAS_NotStarted,
|
||
|
/** Read operation is currently in progress */
|
||
|
OPAS_Read,
|
||
|
/** Write operation is currently in progress */
|
||
|
OPAS_Write,
|
||
|
/** Read/write operation has completed */
|
||
|
OPAS_Finished
|
||
|
};
|
||
|
|
||
|
/** Indicates the state of the profile (whether an async action is happening and what type) */
|
||
|
//@HSL_BEGIN - BWJ - 2-21-17 - Removing const so we can modify in script
|
||
|
var /*const*/ EOnlinePlayerStorageAsyncState AsyncState;
|
||
|
//@HSL_END
|
||
|
|
||
|
/** The device id this data is stored to if applicable */
|
||
|
var int DeviceId;
|
||
|
|
||
|
/**
|
||
|
* Searches the profile setting array for the matching string setting name and returns the id
|
||
|
*
|
||
|
* @param ProfileSettingName the name of the profile setting being searched for
|
||
|
* @param ProfileSettingId the id of the context that matches the name
|
||
|
*
|
||
|
* @return true if the seting was found, false otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingId(name ProfileSettingName,out int ProfileSettingId);
|
||
|
|
||
|
/**
|
||
|
* Finds the human readable name for the profile setting
|
||
|
*
|
||
|
* @param ProfileSettingId the id to look up in the mappings table
|
||
|
*
|
||
|
* @return the name of the string setting that matches the id or NAME_None if not found
|
||
|
*/
|
||
|
native function name GetProfileSettingName(int ProfileSettingId);
|
||
|
|
||
|
/**
|
||
|
* Finds the localized column header text for the profile setting
|
||
|
*
|
||
|
* @param ProfileSettingId the id to look up in the mappings table
|
||
|
*
|
||
|
* @return the string to use as the list column header for the profile setting that matches the id, or an empty string if not found.
|
||
|
*/
|
||
|
native function string GetProfileSettingColumnHeader( int ProfileSettingId );
|
||
|
|
||
|
/**
|
||
|
* Finds the index of an OnlineProfileSetting struct given its settings id.
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the struct to search for
|
||
|
*
|
||
|
* @return the index into the ProfileSettings array for the struct with the matching id.
|
||
|
*/
|
||
|
native final function int FindProfileSettingIndex( int ProfileSettingId ) const;
|
||
|
|
||
|
/**
|
||
|
* Finds the index of SettingsPropertyPropertyMetaData struct, given its settings id.
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the struct to search for
|
||
|
*
|
||
|
* @return the index into the ProfileMappings array for the struct with the matching id.
|
||
|
*/
|
||
|
native final function int FindProfileMappingIndex( int ProfileSettingId ) const;
|
||
|
|
||
|
/**
|
||
|
* Finds the index of SettingsPropertyPropertyMetaData struct, given its settings name.
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the struct to search for
|
||
|
*
|
||
|
* @return the index into the ProfileMappings array for the struct with the matching name.
|
||
|
*/
|
||
|
native final function int FindProfileMappingIndexByName( name ProfileSettingName ) const;
|
||
|
|
||
|
/**
|
||
|
* Finds the default index of SettingsPropertyPropertyMetaData struct, given its settings name.
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the struct to search for
|
||
|
*
|
||
|
* @return the index into the default ProfileMappings array for the struct with the matching name.
|
||
|
*/
|
||
|
native final static function int FindDefaultProfileMappingIndexByName( name ProfileSettingName ) const;
|
||
|
|
||
|
/**
|
||
|
* Determines if the setting is id mapped or not
|
||
|
*
|
||
|
* @param ProfileSettingId the id to look up in the mappings table
|
||
|
*
|
||
|
* @return TRUE if the setting is id mapped, FALSE if it is a raw value
|
||
|
*/
|
||
|
native function bool IsProfileSettingIdMapped(int ProfileSettingId);
|
||
|
|
||
|
/**
|
||
|
* Finds the human readable name for a profile setting's value. Searches the
|
||
|
* profile settings mappings for the specifc profile setting and then searches
|
||
|
* the set of values for the specific value index and returns that value's
|
||
|
* human readable name
|
||
|
*
|
||
|
* @param ProfileSettingId the id to look up in the mappings table
|
||
|
* @param Value the out param that gets the value copied to it
|
||
|
* @param ValueMapID optional parameter that allows you to select a specific index in the ValueMappings instead
|
||
|
* of automatically using the currently set index (if -1 is passed in, which is the default, it means to just
|
||
|
* use the set index
|
||
|
*
|
||
|
* @return true if found, false otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingValue(int ProfileSettingId,out string Value,optional int ValueMapID = -1);
|
||
|
|
||
|
/**
|
||
|
* Finds the human readable name for a profile setting's value. Searches the
|
||
|
* profile settings mappings for the specifc profile setting and then searches
|
||
|
* the set of values for the specific value index and returns that value's
|
||
|
* human readable name
|
||
|
*
|
||
|
* @param ProfileSettingId the id to look up in the mappings table
|
||
|
*
|
||
|
* @return the name of the value or NAME_None if not value mapped
|
||
|
*/
|
||
|
native function name GetProfileSettingValueName(int ProfileSettingId);
|
||
|
|
||
|
/**
|
||
|
* Searches the profile settings mappings for the specifc profile setting and
|
||
|
* then adds all of the possible values to the out parameter
|
||
|
*
|
||
|
* @param ProfileSettingId the id to look up in the mappings table
|
||
|
* @param Values the out param that gets the list of values copied to it
|
||
|
*
|
||
|
* @return true if found and value mapped, false otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingValues(int ProfileSettingId,out array<name> Values);
|
||
|
|
||
|
/**
|
||
|
* Finds the human readable name for a profile setting's value. Searches the
|
||
|
* profile settings mappings for the specifc profile setting and then searches
|
||
|
* the set of values for the specific value index and returns that value's
|
||
|
* human readable name
|
||
|
*
|
||
|
* @param ProfileSettingName the name of the profile setting to find the string value of
|
||
|
* @param Value the out param that gets the value copied to it
|
||
|
*
|
||
|
* @return true if found, false otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingValueByName(name ProfileSettingName,out string Value);
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by name and sets the value index to the
|
||
|
* value contained in the profile setting meta data
|
||
|
*
|
||
|
* @param ProfileSettingName the name of the profile setting to find
|
||
|
* @param NewValue the string value to use
|
||
|
*
|
||
|
* @return true if the profile setting was found and the value was set, false otherwise
|
||
|
*/
|
||
|
native function bool SetProfileSettingValueByName(name ProfileSettingName,const out string NewValue);
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by name and sets the value index to the
|
||
|
* value contained in the profile setting meta data
|
||
|
*
|
||
|
* @param ProfileSettingName the name of the profile setting to set the string value of
|
||
|
* @param NewValue the string value to use
|
||
|
*
|
||
|
* @return true if the profile setting was found and the value was set, false otherwise
|
||
|
*/
|
||
|
native function bool SetProfileSettingValue(int ProfileSettingId,const out string NewValue);
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by id and gets the value index
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the profile setting to return
|
||
|
* @param ValueId the out value of the id
|
||
|
* @param ListIndex the out value of the index where that value lies in the ValueMappings list
|
||
|
*
|
||
|
* @return true if the profile setting was found and id mapped, false otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingValueId(int ProfileSettingId,out int ValueId,optional out int ListIndex);
|
||
|
|
||
|
/**
|
||
|
* Maps a list index into a value mappings array to the actual value that should be stored in the profile
|
||
|
*
|
||
|
* @param ProfileSettingId The ID of the profile setting to use for index to value conversion
|
||
|
* @param ListIndex The index into the value options array to convert
|
||
|
* @param Value The out param that will contain the value to save in the profile
|
||
|
*
|
||
|
* @return TRUE if the profile settings was found, FALSE if not
|
||
|
*/
|
||
|
native function bool GetProfileSettingValueFromListIndex(int ProfileSettingId, int ListIndex, out int Value);
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by id and gets the value index
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the profile setting to return
|
||
|
* @param Value the out value of the setting
|
||
|
*
|
||
|
* @return true if the profile setting was found and not id mapped, false otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingValueInt(int ProfileSettingId,out int Value);
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by id and gets the value index
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the profile setting to return
|
||
|
* @param Value the out value of the setting
|
||
|
*
|
||
|
* @return true if the profile setting was found and not id mapped, false otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingValueFloat(int ProfileSettingId,out float Value);
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by id and sets the value
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the profile setting to return
|
||
|
* @param Value the new value
|
||
|
*
|
||
|
* @return true if the profile setting was found and id mapped, false otherwise
|
||
|
*/
|
||
|
native function bool SetProfileSettingValueId(int ProfileSettingId,int Value);
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by id and sets the value
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the profile setting to return
|
||
|
* @param Value the new value
|
||
|
*
|
||
|
* @return true if the profile setting was found and not id mapped, false otherwise
|
||
|
*/
|
||
|
native function bool SetProfileSettingValueInt(int ProfileSettingId,int Value);
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by id and sets the value
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the profile setting to return
|
||
|
* @param Value the new value
|
||
|
*
|
||
|
* @return true if the profile setting was found and not id mapped, false otherwise
|
||
|
*/
|
||
|
native function bool SetProfileSettingValueFloat(int ProfileSettingId,float Value);
|
||
|
|
||
|
/**
|
||
|
* Determines the mapping type for the specified property
|
||
|
*
|
||
|
* @param ProfileId the ID to get the mapping type for
|
||
|
* @param OutType the out var the value is placed in
|
||
|
*
|
||
|
* @return TRUE if found, FALSE otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingMappingType(int ProfileId,out EPropertyValueMappingType OutType);
|
||
|
|
||
|
/**
|
||
|
* Get the list of Ids this profile setting maps to
|
||
|
*
|
||
|
* @param ProfileId the ID to get the mapping type for
|
||
|
* @param Ids the list of IDs that are in this mapping
|
||
|
*
|
||
|
* @return TRUE if found, FALSE otherwise
|
||
|
*/
|
||
|
native static function bool GetProfileSettingMappingIds(int ProfileId,out array<int> Ids);
|
||
|
|
||
|
/**
|
||
|
* Determines the min and max values of a property that is clamped to a range
|
||
|
*
|
||
|
* @param ProfileId the ID to get the mapping type for
|
||
|
* @param OutMinValue the out var the min value is placed in
|
||
|
* @param OutMaxValue the out var the max value is placed in
|
||
|
* @param RangeIncrement the amount the range can be adjusted by the UI in any single update
|
||
|
* @param bFormatAsInt whether the range's value should be treated as an int.
|
||
|
*
|
||
|
* @return TRUE if found and is a range property, FALSE otherwise
|
||
|
*/
|
||
|
native function bool GetProfileSettingRange(int ProfileId,out float OutMinValue,out float OutMaxValue,out float RangeIncrement,out byte bFormatAsInt);
|
||
|
|
||
|
/**
|
||
|
* Sets the value of a ranged property, clamping to the min/max values
|
||
|
*
|
||
|
* @param ProfileId the ID of the property to set
|
||
|
* @param NewValue the new value to apply to the
|
||
|
*
|
||
|
* @return TRUE if found and is a range property, FALSE otherwise
|
||
|
*/
|
||
|
native function bool SetRangedProfileSettingValue(int ProfileId,float NewValue);
|
||
|
|
||
|
/**
|
||
|
* Gets the value of a ranged property
|
||
|
*
|
||
|
* @param ProfileId the ID to get the value of
|
||
|
* @param OutValue the out var that receives the value
|
||
|
*
|
||
|
* @return TRUE if found and is a range property, FALSE otherwise
|
||
|
*/
|
||
|
native function bool GetRangedProfileSettingValue(int ProfileId,out float OutValue);
|
||
|
|
||
|
/**
|
||
|
* Adds an id to the array, assuming that it doesn't already exist
|
||
|
*
|
||
|
* @param SettingId the id to add to the array
|
||
|
*/
|
||
|
native function AddSettingInt(int SettingId);
|
||
|
|
||
|
/**
|
||
|
* Adds an id to the array, assuming that it doesn't already exist
|
||
|
*
|
||
|
* @param SettingId the id to add to the array
|
||
|
*/
|
||
|
native function AddSettingFloat(int SettingId);
|
||
|
|
||
|
cpptext
|
||
|
{
|
||
|
public:
|
||
|
/**
|
||
|
* Finds the specified profile setting
|
||
|
*
|
||
|
* @param SettingId to search for
|
||
|
*
|
||
|
* @return pointer to the setting or NULL if not found
|
||
|
*/
|
||
|
FORCEINLINE FOnlineProfileSetting* FindSetting(INT SettingId)
|
||
|
{
|
||
|
for (INT ProfileIndex = 0; ProfileIndex < ProfileSettings.Num(); ++ProfileIndex)
|
||
|
{
|
||
|
FOnlineProfileSetting& Setting = ProfileSettings(ProfileIndex);
|
||
|
if (Setting.ProfileSetting.PropertyId == SettingId)
|
||
|
{
|
||
|
return &Setting;
|
||
|
}
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Finds the specified property's meta data
|
||
|
*
|
||
|
* @param PropertyId id of the property to search the meta data for
|
||
|
*
|
||
|
* @return pointer to the property meta data or NULL if not found
|
||
|
*/
|
||
|
FORCEINLINE FSettingsPropertyPropertyMetaData* FindProfileSettingMetaData(INT ProfileId)
|
||
|
{
|
||
|
for (INT MetaDataIndex = 0; MetaDataIndex < ProfileMappings.Num(); MetaDataIndex++)
|
||
|
{
|
||
|
FSettingsPropertyPropertyMetaData& MetaData = ProfileMappings(MetaDataIndex);
|
||
|
if (MetaData.Id == ProfileId)
|
||
|
{
|
||
|
return &MetaData;
|
||
|
}
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by id and sets the value
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the profile setting to return
|
||
|
* @param Value the new value of the setting
|
||
|
*
|
||
|
* @return true if the profile setting was found and not id mapped, false otherwise
|
||
|
*/
|
||
|
template<typename TYPE>
|
||
|
FORCEINLINE UBOOL SetProfileSettingTypedValue(INT ProfileSettingId,TYPE Value)
|
||
|
{
|
||
|
// Search for the profile setting id in the mappings
|
||
|
for (INT Index = 0; Index < ProfileMappings.Num(); Index++)
|
||
|
{
|
||
|
const FSettingsPropertyPropertyMetaData& MetaData = ProfileMappings(Index);
|
||
|
if (MetaData.Id == ProfileSettingId)
|
||
|
{
|
||
|
// Find the profile setting that matches this id
|
||
|
for (INT Index2 = 0; Index2 < ProfileSettings.Num(); Index2++)
|
||
|
{
|
||
|
FOnlineProfileSetting& Setting = ProfileSettings(Index2);
|
||
|
if (Setting.ProfileSetting.PropertyId == ProfileSettingId)
|
||
|
{
|
||
|
// If this is a raw value, then read it
|
||
|
if (MetaData.MappingType == PVMT_RawValue)
|
||
|
{
|
||
|
Setting.ProfileSetting.Data.SetData(Value);
|
||
|
return TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Searches for the profile setting by id and sets the value
|
||
|
*
|
||
|
* @param ProfileSettingId the id of the profile setting to return
|
||
|
* @param Value the new value of the setting
|
||
|
*
|
||
|
* @return true if the profile setting was found and not id mapped, false otherwise
|
||
|
*/
|
||
|
template<typename TYPE>
|
||
|
FORCEINLINE void AddSettingTypedValue(INT ProfileSettingId)
|
||
|
{
|
||
|
// Don't add if it already exists
|
||
|
if (FindSetting(ProfileSettingId) == NULL)
|
||
|
{
|
||
|
TYPE Type = 0;
|
||
|
// Construct an zeroed setting of the right type
|
||
|
FOnlineProfileSetting Setting(EC_EventParm);
|
||
|
Setting.Owner = OPPO_Game;
|
||
|
Setting.ProfileSetting.PropertyId = ProfileSettingId;
|
||
|
Setting.ProfileSetting.Data.SetData(Type);
|
||
|
// Now add this to the array
|
||
|
ProfileSettings.AddItem(Setting);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/** Finalize the clean up process */
|
||
|
virtual void FinishDestroy(void);
|
||
|
|
||
|
/**
|
||
|
* Increments the number of times this profile has been saved
|
||
|
*
|
||
|
* @param NewCount the new number to use as the save count
|
||
|
* @param ProfileSettings the array to search for the setting to update
|
||
|
*/
|
||
|
static void SetProfileSaveCount(INT NewCount,TArray<FOnlineProfileSetting>& ProfileSettings,INT SaveCountId);
|
||
|
|
||
|
/**
|
||
|
* Reads the number of times this profile has been saved
|
||
|
*
|
||
|
* @param ProfileSettings the array to search for the value
|
||
|
*
|
||
|
* @return the number of times the profile data has been saved
|
||
|
*/
|
||
|
static INT GetProfileSaveCount(const TArray<FOnlineProfileSetting>& ProfileSettings,INT SaveCountId);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Clear out the settings. Subclasses can override to set their own defaults.
|
||
|
*/
|
||
|
native event SetToDefaults();
|
||
|
|
||
|
/**
|
||
|
* Adds the version number to the read data if not present
|
||
|
*/
|
||
|
native function AppendVersionToSettings();
|
||
|
|
||
|
/** Returns the version number that was found in the profile read results */
|
||
|
native function int GetVersionNumber();
|
||
|
|
||
|
/** Sets the version number to the class default */
|
||
|
native function SetDefaultVersionNumber();
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
// This must be set by subclasses
|
||
|
VersionNumber=-1
|
||
|
VersionSettingsId=0
|
||
|
SaveCountSettingId=1
|
||
|
// Set to an invalid device
|
||
|
DeviceId=-1
|
||
|
}
|