Files

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);
}
}