/ GUNRPG.ClientModels / WeaponModels.cs
WeaponModels.cs
 1  namespace GUNRPG.ClientModels;
 2  
 3  /// <summary>
 4  /// Weapon stats returned from GET /weapons.
 5  /// </summary>
 6  public sealed class WeaponStats
 7  {
 8      public string Name { get; init; } = string.Empty;
 9  
10      // Firepower
11      public int RoundsPerMinute { get; init; }
12      public float BulletVelocityMetersPerSecond { get; init; }
13  
14      // Magazine
15      public int MagazineSize { get; init; }
16      public int ReloadTimeMs { get; init; }
17  
18      // Damage
19      public float BaseDamage { get; init; }
20      public float HeadshotMultiplier { get; init; }
21      public List<WeaponDamageRange> DamageRanges { get; init; } = new();
22  
23      // Accuracy
24      public float HipfireSpreadDegrees { get; init; }
25      public float ADSSpreadDegrees { get; init; }
26  
27      // Recoil
28      public float VerticalRecoil { get; init; }
29      public float HorizontalRecoil { get; init; }
30      public float RecoilRecoveryTimeMs { get; init; }
31  
32      // Handling
33      public int ADSTimeMs { get; init; }
34      public float FlinchResistance { get; init; }
35      public float SuppressionFactor { get; init; }
36  
37      // Mobility
38      public float MovementSpeedMetersPerSecond { get; init; }
39      public float SprintingMovementSpeedMetersPerSecond { get; init; }
40      public float ADSMovementSpeedMetersPerSecond { get; init; }
41      public float SprintToFireTimeMs { get; init; }
42  }
43  
44  /// <summary>
45  /// A damage bracket for a weapon (damage varies by distance).
46  /// Null <see cref="MaxMeters"/> means the bracket is unbounded (no maximum distance).
47  /// </summary>
48  public sealed class WeaponDamageRange
49  {
50      public float MinMeters { get; init; }
51      public float? MaxMeters { get; init; }
52      public float Damage { get; init; }
53      public float HeadDamage { get; init; }
54  }