44 lines
1.7 KiB
C#
44 lines
1.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace Ironspore
|
|
{
|
|
[Serializable]
|
|
public sealed class GameSettingsData
|
|
{
|
|
public int version = 1;
|
|
public float masterVolume = 1;
|
|
public int qualityLevel = 2;
|
|
public int resolutionWidth = 1280;
|
|
public int resolutionHeight = 720;
|
|
public bool fullscreen;
|
|
public float mouseSensitivity = 1;
|
|
public float aimSensitivity = 1;
|
|
public string bindingOverrides = "";
|
|
|
|
public GameSettingsData Copy() => (GameSettingsData)MemberwiseClone();
|
|
|
|
public GameSettingsData Normalize(int qualityCount)
|
|
{
|
|
var copy = Copy();
|
|
copy.masterVolume = FiniteClamp(masterVolume, 0, 1, 1);
|
|
copy.mouseSensitivity = FiniteClamp(mouseSensitivity, .1f, 5, 1);
|
|
copy.aimSensitivity = FiniteClamp(aimSensitivity, .1f, 2, 1);
|
|
copy.qualityLevel = Mathf.Clamp(qualityLevel, 0, Mathf.Max(0, qualityCount - 1));
|
|
if (resolutionWidth < 640 || resolutionWidth > 16384 || resolutionHeight < 360 || resolutionHeight > 16384)
|
|
{
|
|
copy.resolutionWidth = 1280;
|
|
copy.resolutionHeight = 720;
|
|
}
|
|
copy.bindingOverrides = bindingOverrides ?? "";
|
|
return copy;
|
|
}
|
|
|
|
public bool SameDisplay(GameSettingsData other) => resolutionWidth == other.resolutionWidth
|
|
&& resolutionHeight == other.resolutionHeight && fullscreen == other.fullscreen;
|
|
|
|
static float FiniteClamp(float value, float min, float max, float fallback) =>
|
|
float.IsNaN(value) || float.IsInfinity(value) ? fallback : Mathf.Clamp(value, min, max);
|
|
}
|
|
}
|