Files
crtr/Assets/Cryville/Crtr/Settings.cs
2023-02-21 22:47:42 +08:00

223 lines
4.9 KiB
C#

using Cryville.Common.ComponentModel;
using System.ComponentModel;
using UnityEngine;
using RangeAttribute = Cryville.Common.ComponentModel.RangeAttribute;
namespace Cryville.Crtr {
public class Settings {
[Category("graphics")]
[LogarithmicScale][Range(0.01f, 20f)][Step(0.5f)][Precision(1e-2)]
public float BackwardClippingDistance {
get {
return PlayerPrefs.GetFloat("BackwardClippingDistance", 0.2f);
}
set {
PlayerPrefs.SetFloat("BackwardClippingDistance", value);
}
}
static readonly Settings _default = new Settings();
[Browsable(false)]
public static Settings Default {
get {
return _default;
}
}
[Category("gameplay")]
public bool DisableGC {
get {
return PlayerPrefs.GetInt("DisableGC", 1) == 1;
}
set {
PlayerPrefs.SetInt("DisableGC", value ? 1 : 0);
}
}
[Category("gameplay")]
[Range(-1, 5)]
public int ForceSyncFrames {
get {
return PlayerPrefs.GetInt("ForceSyncFrames", 5);
}
set {
PlayerPrefs.SetInt("ForceSyncFrames", value);
}
}
[Browsable(false)]
[Category("data")]
[Description("The directory where the game files are stored.")]
public string GameDataPath {
get {
string dataPath = Application.persistentDataPath;
#if UNITY_ANDROID && !UNITY_EDITOR
dataPath = "/storage/emulated/0/data/crtr";
#endif
return PlayerPrefs.GetString("GameDataPath", dataPath);
}
set {
PlayerPrefs.SetString("GameDataPath", value);
}
}
[Category("gameplay")]
[Step(0.01f)][Precision(1e-3)]
public float GraphicalOffset {
get {
return PlayerPrefs.GetFloat("GraphicalOffset", 0);
}
set {
PlayerPrefs.SetFloat("GraphicalOffset", value);
}
}
[Browsable(false)]
public string LastRunVersion {
get {
return PlayerPrefs.GetString("LastRunVersion", "0.0");
}
set {
PlayerPrefs.SetString("LastRunVersion", value);
}
}
[Browsable(false)]
[Category("data")]
[Description("The chart file to load.")]
public string LoadChart {
get {
return PlayerPrefs.GetString("LoadChart", "");
}
set {
PlayerPrefs.SetString("LoadChart", value);
}
}
[Browsable(false)]
[Category("data")]
[Description("The ruleset file to load.")]
public string LoadRuleset {
get {
return PlayerPrefs.GetString("LoadRuleset", "");
}
set {
PlayerPrefs.SetString("LoadRuleset", value);
}
}
[Browsable(false)]
[Category("data")]
[Description("The ruleset config file to load.")]
public string LoadRulesetConfig {
get {
return PlayerPrefs.GetString("LoadRulesetConfig", "");
}
set {
PlayerPrefs.SetString("LoadRulesetConfig", value);
}
}
[Browsable(false)]
[Category("data")]
[Description("The skin file to load.")]
public string LoadSkin {
get {
return PlayerPrefs.GetString("LoadSkin", "");
}
set {
PlayerPrefs.SetString("LoadSkin", value);
}
}
[Category("graphics")]
[LogarithmicScale][Range(0.1f, 200f)][Step(0.5f)][Precision(1e-1)]
public float RenderDistance {
get {
return PlayerPrefs.GetFloat("RenderDistance", 4);
}
set {
PlayerPrefs.SetFloat("RenderDistance", value);
}
}
[Category("graphics")]
[Description("The span before the renderer fetches the object data again. Smaller value generates more detailed objects while increasing CPU load. Leave 0 to let the game decides the value automatically.")]
[Range(0, 0.1f)][Precision(1e-3)]
public float RenderStep {
get {
return PlayerPrefs.GetFloat("RenderStep", 0f);
}
set {
PlayerPrefs.SetFloat("RenderStep", value);
}
}
[Category("gameplay")]
[Step(0.04f)][Precision(1e-3)]
public float SoundOffset {
get {
return PlayerPrefs.GetFloat("SoundOffset", 0);
}
set {
PlayerPrefs.SetFloat("SoundOffset", value);
}
}
[Browsable(false)]
[Category("debug")]
[Range(0, float.PositiveInfinity)][Step(10f)][Precision(1e-1)]
public float StartOffset {
get {
return PlayerPrefs.GetFloat("StartOffset", 0);
}
set {
PlayerPrefs.SetFloat("StartOffset", value);
}
}
[Category("graphics")]
[LogarithmicScale][Range(15, 1024)][Step(0.5f)]
public int TargetFrameRate {
get {
return PlayerPrefs.GetInt("TargetFrameRate", 60);
}
set {
PlayerPrefs.SetInt("TargetFrameRate", value);
}
}
[Category("graphics")]
public bool VSync {
get {
return PlayerPrefs.GetInt("VSync", 0) == 1;
}
set {
PlayerPrefs.SetInt("VSync", value ? 1 : 0);
}
}
[Category("debug")]
public bool ClearLogOnPlay {
get {
return PlayerPrefs.GetInt("ClearLogOnPlay", 1) == 1;
}
set {
PlayerPrefs.SetInt("ClearLogOnPlay", value ? 1 : 0);
}
}
[Category("debug")]
public bool HideLogOnPlay {
get {
return PlayerPrefs.GetInt("HideLogOnPlay", 1) == 1;
}
set {
PlayerPrefs.SetInt("HideLogOnPlay", value ? 1 : 0);
}
}
public void Save() { PlayerPrefs.Save(); }
public void Reset() { PlayerPrefs.DeleteAll(); }
}
}