using System.Collections.Generic;
namespace Ubisoft
{
///
/// It holds preferences only locally in memory. They are NOT persisted.
///
public class HtPlayerPrefs_Memory : HtPlayerPrefs
{
private Dictionary StoredKeys { get; set; }
private Dictionary BoolValues { get; set; }
private Dictionary FloatValues { get; set; }
private Dictionary IntValues { get; set; }
private Dictionary LongValues { get; set; }
private Dictionary StringValues { get; set; }
///
/// Create an HtPlayerPrefs_Memory object to store data in memory for the channel passed in. These data are NOT persisted.
///
/// Name of the channel to use to store data saved through this object.
/// An HtLogger.Channel object to use to log data to.
/// If no object is passed in then a default one called 'HT_PlayerPrefs('channel')' is created.
/// When true logs are printed out. Use it only for debug purposes.
/// Make sure that Trace is the minimum log level set in your Logger configuration.
public HtPlayerPrefs_Memory(string channel, HtLogger.Channel logger = null, bool isVerbose = false) : base(channel, logger, isVerbose)
{
StoredKeys = new Dictionary();
BoolValues = new Dictionary();
FloatValues = new Dictionary();
IntValues = new Dictionary();
LongValues = new Dictionary();
StringValues = new Dictionary();
}
#region HtPlayerPrefs
public override bool GetBool(string key, bool defaultValue = false)
{
_ = BoolValues.TryGetValue(key, out defaultValue);
return defaultValue;
}
public override float GetFloat(string key, float defaultValue = 0f)
{
_ = FloatValues.TryGetValue(key, out defaultValue);
return defaultValue;
}
public override int GetInt(string key, int defaultValue = 0)
{
_ = IntValues.TryGetValue(key, out defaultValue);
return defaultValue;
}
public override long GetLong(string key, long defaultValue = 0)
{
_ = LongValues.TryGetValue(key, out defaultValue);
return defaultValue;
}
public override string GetString(string key, string defaultValue = "")
{
_ = StringValues.TryGetValue(key, out defaultValue);
return defaultValue;
}
public override IHtPlayerPrefs.EType GetType(string key)
{
return StoredKeys.ContainsKey(key) ? StoredKeys[key] : IHtPlayerPrefs.EType.None;
}
public override bool HasKey(string key)
{
return StoredKeys.ContainsKey(key);
}
protected override void ExtendedDeleteAll()
{
StoredKeys.Clear();
UpdateRawStoredKeys();
BoolValues.Clear();
FloatValues.Clear();
IntValues.Clear();
LongValues.Clear();
StringValues.Clear();
}
protected override void ExtendedDeleteKey(string key)
{
if (StoredKeys.ContainsKey(key))
{
IHtPlayerPrefs.EType type = StoredKeys[key];
switch (type)
{
case IHtPlayerPrefs.EType.Bool:
if (BoolValues.ContainsKey(key))
{
_ = BoolValues.Remove(key);
}
break;
case IHtPlayerPrefs.EType.Float:
if (FloatValues.ContainsKey(key))
{
_ = FloatValues.Remove(key);
}
break;
case IHtPlayerPrefs.EType.Int:
if (IntValues.ContainsKey(key))
{
_ = IntValues.Remove(key);
}
break;
case IHtPlayerPrefs.EType.Long:
if (LongValues.ContainsKey(key))
{
_ = LongValues.Remove(key);
}
break;
case IHtPlayerPrefs.EType.String:
if (StringValues.ContainsKey(key))
{
_ = StringValues.Remove(key);
}
break;
}
_ = StoredKeys.Remove(key);
UpdateRawStoredKeys();
}
}
protected override void ExtendedSave()
{
// Nothing since data only need to be stored im memory
}
protected override void ExtendedSetBool(string key, bool value)
{
if (BoolValues.ContainsKey(key))
{
BoolValues[key] = value;
}
else
{
BoolValues.Add(key, value);
AddStoredKey(key, IHtPlayerPrefs.EType.Bool);
}
}
protected override void ExtendedSetFloat(string key, float value)
{
if (FloatValues.ContainsKey(key))
{
FloatValues[key] = value;
}
else
{
FloatValues.Add(key, value);
AddStoredKey(key, IHtPlayerPrefs.EType.Float);
}
}
protected override void ExtendedSetInt(string key, int value)
{
if (IntValues.ContainsKey(key))
{
IntValues[key] = value;
}
else
{
IntValues.Add(key, value);
AddStoredKey(key, IHtPlayerPrefs.EType.Int);
}
}
protected override void ExtendedSetLong(string key, long value)
{
if (LongValues.ContainsKey(key))
{
LongValues[key] = value;
}
else
{
LongValues.Add(key, value);
AddStoredKey(key, IHtPlayerPrefs.EType.Long);
}
}
protected override void ExtendedSetString(string key, string value)
{
if (StringValues.ContainsKey(key))
{
StringValues[key] = value;
}
else
{
StringValues.Add(key, value);
AddStoredKey(key, IHtPlayerPrefs.EType.String);
}
}
public override string ToString()
{
return $"StoredKeys: {RawStoredKeys}\nContent: {ContentAsString()}";
}
#endregion
#region Private Methods
private string ContentAsString()
{
string returnValue = "";
string valueAsString;
foreach (KeyValuePair pair in StoredKeys)
{
if (HasKey(pair.Key))
{
if (pair.Value != IHtPlayerPrefs.EType.None)
{
valueAsString = null;
switch (pair.Value)
{
case IHtPlayerPrefs.EType.Bool:
valueAsString = GetBool(pair.Key).ToString();
break;
case IHtPlayerPrefs.EType.Int:
valueAsString = GetInt(pair.Key).ToString();
break;
case IHtPlayerPrefs.EType.Long:
valueAsString = GetLong(pair.Key).ToString();
break;
case IHtPlayerPrefs.EType.Float:
valueAsString = GetFloat(pair.Key).ToString();
break;
case IHtPlayerPrefs.EType.String:
valueAsString = GetString(pair.Key);
break;
}
if (valueAsString != null)
{
if (!string.IsNullOrEmpty(returnValue))
{
returnValue += $",";
}
returnValue += $"{pair.Key}:{valueAsString}";
}
}
}
}
return returnValue;
}
private void AddStoredKey(string key, IHtPlayerPrefs.EType type)
{
if (!StoredKeys.ContainsKey(key) && type != IHtPlayerPrefs.EType.None)
{
StoredKeys.Add(key, type);
RawStoredKeys = AddRawStoredKey(key, type, RawStoredKeys);
}
}
private string RawStoredKeys { get; set; }
private void UpdateRawStoredKeys()
{
string value = "";
foreach (KeyValuePair pair in StoredKeys)
{
value = AddRawStoredKey(pair.Key, pair.Value, value);
}
RawStoredKeys = value;
}
#endregion
}
}