234 lines
5.1 KiB
C#
234 lines
5.1 KiB
C#
using Cryville.Common.ComponentModel;
|
|
using System.ComponentModel;
|
|
using UnityEngine;
|
|
using RangeAttribute = Cryville.Common.ComponentModel.RangeAttribute;
|
|
|
|
namespace Cryville.Crtr {
|
|
public class Settings {
|
|
static readonly Settings _default = new();
|
|
[Browsable(false)]
|
|
public static Settings Default {
|
|
get {
|
|
return _default;
|
|
}
|
|
}
|
|
|
|
[Category("gameplay")]
|
|
[Range(0, 10)][Precision(1)]
|
|
public int AreaJudgePrecision {
|
|
get {
|
|
return PlayerPrefs.GetInt("AreaJudgePrecision", 4);
|
|
}
|
|
set {
|
|
PlayerPrefs.SetInt("AreaJudgePrecision", value);
|
|
}
|
|
}
|
|
|
|
[Category("gameplay")]
|
|
[Range(-1, 30)]
|
|
public int ForceSyncFrames {
|
|
get {
|
|
return PlayerPrefs.GetInt("ForceSyncFrames", 6);
|
|
}
|
|
set {
|
|
PlayerPrefs.SetInt("ForceSyncFrames", value);
|
|
}
|
|
}
|
|
|
|
[Category("gameplay")]
|
|
[Step(0.02)][Precision(1e-3)]
|
|
public float GraphicalOffset {
|
|
get {
|
|
return PlayerPrefs.GetFloat("GraphicalOffset", 0);
|
|
}
|
|
set {
|
|
PlayerPrefs.SetFloat("GraphicalOffset", value);
|
|
}
|
|
}
|
|
|
|
[Category("gameplay")]
|
|
[Step(0.1)][Precision(1e-3)]
|
|
public float SoundOffset {
|
|
get {
|
|
return PlayerPrefs.GetFloat("SoundOffset", 0);
|
|
}
|
|
set {
|
|
PlayerPrefs.SetFloat("SoundOffset", value);
|
|
}
|
|
}
|
|
|
|
[Category("gameplay")]
|
|
[Range(0, double.PositiveInfinity)][Step(60)][Precision(1e-1)]
|
|
public float StartOffset {
|
|
get {
|
|
return PlayerPrefs.GetFloat("StartOffset", 0);
|
|
}
|
|
set {
|
|
PlayerPrefs.SetFloat("StartOffset", value);
|
|
}
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public string LastRunVersion {
|
|
get {
|
|
return PlayerPrefs.GetString("LastRunVersion", "0.0");
|
|
}
|
|
set {
|
|
PlayerPrefs.SetString("LastRunVersion", 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);
|
|
}
|
|
}
|
|
|
|
[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(-4.6, 3)][Step(1)][Precision(1e-2)]
|
|
public float BackwardRenderDistance {
|
|
get {
|
|
return PlayerPrefs.GetFloat("BackwardClippingDistance", 0.2f);
|
|
}
|
|
set {
|
|
PlayerPrefs.SetFloat("BackwardClippingDistance", value);
|
|
}
|
|
}
|
|
|
|
[Category("graphics")]
|
|
[LogarithmicScale][Range(-2.3, 6)][Step(1)][Precision(1e-1)]
|
|
public float ForwardRenderDistance {
|
|
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.1)][Precision(1e-3)]
|
|
public float RenderStep {
|
|
get {
|
|
return PlayerPrefs.GetFloat("RenderStep", 0f);
|
|
}
|
|
set {
|
|
PlayerPrefs.SetFloat("RenderStep", value);
|
|
}
|
|
}
|
|
|
|
[Category("graphics")]
|
|
[LogarithmicScale][Range(1.15, 3.5)][Step(2)]
|
|
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);
|
|
}
|
|
}
|
|
|
|
[Category("debug")]
|
|
public bool DisableGC {
|
|
get {
|
|
return PlayerPrefs.GetInt("DisableGC", 1) == 1;
|
|
}
|
|
set {
|
|
PlayerPrefs.SetInt("DisableGC", value ? 1 : 0);
|
|
}
|
|
}
|
|
|
|
public void Save() { PlayerPrefs.Save(); }
|
|
public void Reset() { PlayerPrefs.DeleteAll(); }
|
|
}
|
|
}
|