Data class that describes aiming effects for a weapon, including spread modifier, ADS sensitivity, viewmodel FOV, player FOV zoom and FOV transition speeds. Provides Clone and FillDefaults helpers to copy or populate unspecified (-1) values from a default instance.
namespace SWB.Base;
/// <summary>
/// Describes effects of aiming with a weapon
/// Any value set to -1 implies "don't modify" or "use default"
/// </summary>
public class AimInfo
{
/// <summary>
/// Spread modifier to apply when Aiming Down Sights (ADS).
/// </summary>
[Property] public float SpreadModifier { get; set; } = 0.25f;
/// <summary>
/// Input sensitivity multiplier when aiming down sights (ADS). (lower is slower, 0 to disable)
/// </summary>
[Property] public float Sensitivity { get; set; } = 0.85f;
/// <summary>
/// FOV For the view model when aiming down sights.
/// </summary>
[Property, Group( "FOV" )] public float ViewModelFOV { get; set; } = -1f;
/// <summary>
/// Optical zoom applied to the player camera when aiming down sights.
/// A value of 1.3 provides 1.3x magnification.
/// </summary>
[Property, Group( "FOV" )] public float PlayerFOVZoom { get; set; } = -1f;
/// <summary>
/// FOV aim in speed
/// </summary>
[Property, Group( "FOV" ), Title( "Aim in FOV speed" )] public float AimInFOVSpeed { get; set; } = 1f;
/// <summary>
/// FOV aim out speed
/// </summary>
[Property, Group( "FOV" ), Title( "Aim out FOV speed" )] public float AimOutFOVSpeed { get; set; } = 1f;
public AimInfo Clone()
{
// Can't use MemberwiseClone because of whitelist restrictions
return new AimInfo()
{
SpreadModifier = SpreadModifier,
Sensitivity = Sensitivity,
ViewModelFOV = ViewModelFOV,
PlayerFOVZoom = PlayerFOVZoom,
AimInFOVSpeed = AimInFOVSpeed,
AimOutFOVSpeed = AimOutFOVSpeed
};
}
// Utility to fill unset values from a default AimInfo
public void FillDefaults( AimInfo defaults )
{
if ( Sensitivity == -1 ) Sensitivity = defaults.Sensitivity;
if ( ViewModelFOV == -1 ) ViewModelFOV = defaults.ViewModelFOV;
if ( PlayerFOVZoom == -1 ) PlayerFOVZoom = defaults.PlayerFOVZoom;
if ( AimInFOVSpeed == -1 ) AimInFOVSpeed = defaults.AimInFOVSpeed;
if ( AimOutFOVSpeed == -1 ) AimOutFOVSpeed = defaults.AimOutFOVSpeed;
if ( SpreadModifier == -1 ) SpreadModifier = defaults.SpreadModifier;
}
}