Files
Fishing2/Assets/Scripts/Common/Services/Settings/Base/OptionBase.cs

109 lines
2.3 KiB
C#

using UnityEngine;
namespace NBF.Setting
{
public interface IOptionBase
{
string Name { get; }
void Initialize(ISettings root);
void Apply();
int GetValue();
void SetValue(int index);
bool HaveNotApple();
ISettings Root { get; }
string GetDisplayString();
}
public abstract class OptionBase : IOptionBase
{
protected string SaveKey => $"Setting_{Group}_{Name}";
public abstract string Name { get; }
/// <summary>
/// 所在组
/// </summary>
public abstract string Group { get; }
/// <summary>
/// 所在分切页
/// </summary>
public abstract string Tab { get; }
/// <summary>
/// 默认值
/// </summary>
protected abstract int DefaultValue { get; }
/// <summary>
/// 当前的值
/// </summary>
protected int Value;
/// <summary>
/// 保存的值
/// </summary>
protected int SaveValue;
public virtual bool HaveNotApple()
{
return !Value.Equals(SaveValue);
}
public ISettings Root { get; private set; }
public void Initialize(ISettings root)
{
Root = root;
Load();
OnInitialize();
Apply();
}
/// <summary>
/// 加载用户的设置
/// </summary>
public virtual void Load()
{
var value = PlayerPrefs.GetInt(SaveKey, DefaultValue);
Value = value;
SaveValue = value;
}
public virtual void Apply()
{
PlayerPrefs.SetInt(SaveKey, Value);
SaveValue = Value;
OnApply();
}
public virtual void Reset()
{
Value = DefaultValue;
}
public virtual string GetDisplayString()
{
return GetValue().ToString();
}
public virtual int GetValue()
{
return Value;
}
public virtual void SetValue(int value)
{
Value = value;
}
protected virtual void OnInitialize()
{
}
protected abstract void OnApply();
}
}