using UnityEngine; namespace ProjectI.Combat { public abstract class WeaponDefinition : ScriptableObject { public string displayName; public int weaponId; [Min(1)] public int pelletCount = 1; public float spreadDegrees; public float falloffStart = 25; public float falloffEnd = 55; [Range(.01f, 1)] public float minimumDamageFraction = .5f; public float damage = 20; [Min(1)] public float headshotMultiplier = 1.5f; public int magazineSize = 30; [Tooltip("Rounds per second. The shared weapon state enforces this on the host.")] [Min(0.01f)] public double rateOfFire = 8.333333333333333; public double reloadDuration = 1.5; public float range = 60; public bool automatic = true; public float recoilDegrees = 0.7f; public float recoilRecovery = 8; public float aimFieldOfView = 60; public Color tracerColor = new Color(0.4f, 1, 0.8f); public double shotInterval => 1 / rateOfFire; public WeaponTuning Tuning => new WeaponTuning(damage, magazineSize, shotInterval, reloadDuration, range, automatic); public virtual bool UsesTracer => true; public abstract WeaponFireResult ResolveShotServer(WeaponShotContext context); } }