105 lines
2.9 KiB
C#
105 lines
2.9 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using SzafaKit.Foundation;
|
|
using UnityEngine;
|
|
|
|
namespace SzafaKit.Console {
|
|
public enum CVarKind {
|
|
Int,
|
|
Float,
|
|
Vector2,
|
|
Vector3,
|
|
Vector4,
|
|
String
|
|
}
|
|
|
|
[Serializable]
|
|
public class CVar {
|
|
[field: SerializeField]
|
|
public CVarKind Kind { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public string Name { get; private set; }
|
|
|
|
[field: SerializeField]
|
|
public string Description { get; private set; }
|
|
|
|
public int IntValue;
|
|
public float FloatValue;
|
|
public Vector2 Vector2Value;
|
|
public Vector3 Vector3Value;
|
|
public Vector4 Vector4Value;
|
|
public string StringValue;
|
|
|
|
public event Action OnChanged = delegate { };
|
|
|
|
public CVar(string name, string description) {
|
|
Kind = CVarKind.Int;
|
|
Name = name;
|
|
Description = description;
|
|
IntValue = 0;
|
|
}
|
|
|
|
public void Set(int value) {
|
|
Kind = CVarKind.Int;
|
|
IntValue = value;
|
|
OnChanged?.Invoke();
|
|
}
|
|
|
|
public void Set(float value) {
|
|
Kind = CVarKind.Float;
|
|
FloatValue = value;
|
|
OnChanged?.Invoke();
|
|
}
|
|
|
|
public void Set(Vector2 value) {
|
|
Kind = CVarKind.Vector2;
|
|
Vector2Value = value;
|
|
OnChanged?.Invoke();
|
|
}
|
|
|
|
public void Set(Vector3 value) {
|
|
Kind = CVarKind.Vector3;
|
|
Vector3Value = value;
|
|
OnChanged?.Invoke();
|
|
}
|
|
|
|
public void Set(Vector4 value) {
|
|
Kind = CVarKind.Vector4;
|
|
Vector4Value = value;
|
|
OnChanged?.Invoke();
|
|
}
|
|
|
|
public void Set(string value) {
|
|
Kind = CVarKind.String;
|
|
StringValue = value;
|
|
OnChanged?.Invoke();
|
|
}
|
|
|
|
public void ParseFromString(string str) {
|
|
if (float.TryParse(str, out float f)) {
|
|
Set(f);
|
|
} else if (int.TryParse(str, out int i)) {
|
|
Set(i);
|
|
} else {
|
|
Set(str);
|
|
}
|
|
}
|
|
|
|
public override string ToString() {
|
|
return Kind switch {
|
|
CVarKind.Int => IntValue.ToString(),
|
|
CVarKind.Float => FloatValue.ToString(CultureInfo.InvariantCulture),
|
|
CVarKind.Vector2 => Vector2Value.ToString(),
|
|
CVarKind.Vector3 => Vector3Value.ToString(),
|
|
CVarKind.Vector4 => Vector4Value.ToString(),
|
|
CVarKind.String => $"\"{StringValue}\"",
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
};
|
|
}
|
|
|
|
public static CVar Create(string name, string description = "") {
|
|
return SzafaEngine.Shared.GetService<ConsoleService>().CreateCVar(name, description);
|
|
}
|
|
}
|
|
} |