using System;
using System.Collections.Generic;
using LitJson;
using UnityEngine;
namespace NitroxClient.GameLogic.PlayerLogic.PlayerPreferences
{
///
/// This abstraction allows us to write tests against the preferences manager. Otherwise - we are unduly tied to Unity.
///
public class UnityPreferenceStateProvider : IPreferenceStateProvider
{
private const string UNITY_PREF_KEY_NAME = "NITROX_PLAYER_PREFS";
public PlayerPreferenceState GetPreferenceState()
{
JsonMapper.RegisterImporter((double value) => Convert.ToSingle(value));
JsonMapper.RegisterExporter((value, writer) => writer.Write(Convert.ToDouble(value)));
string playerPreferencesJson = PlayerPrefs.GetString(UNITY_PREF_KEY_NAME);
if (string.IsNullOrEmpty(playerPreferencesJson) || playerPreferencesJson == "{}")
{
return new PlayerPreferenceState
{
Preferences = new Dictionary()
};
}
return JsonMapper.ToObject(playerPreferencesJson);
}
public void SavePreferenceState(PlayerPreferenceState preferenceState)
{
JsonMapper.RegisterImporter((double value) => Convert.ToSingle(value));
JsonMapper.RegisterExporter((value, writer) => writer.Write(Convert.ToDouble(value)));
string playerPreferencesJson = JsonMapper.ToJson(preferenceState);
PlayerPrefs.SetString(UNITY_PREF_KEY_NAME, playerPreferencesJson);
}
}
}