/ GUNRPG.Tests / FlinchIntegrationTests.cs
FlinchIntegrationTests.cs
 1  using GUNRPG.Core;
 2  using GUNRPG.Core.Combat;
 3  using GUNRPG.Core.Events;
 4  using GUNRPG.Core.Operators;
 5  using GUNRPG.Core.Weapons;
 6  using Xunit;
 7  
 8  namespace GUNRPG.Tests;
 9  
10  public class FlinchIntegrationTests
11  {
12      [Fact]
13      public void DamageAppliedEvent_AppliesFlinchToTarget()
14      {
15          var weapon = WeaponFactory.CreateSturmwolf45();
16          var attacker = new Operator("Attacker")
17          {
18              EquippedWeapon = weapon,
19              CurrentAmmo = 30
20          };
21          var defender = new Operator("Defender")
22          {
23              EquippedWeapon = weapon
24          };
25  
26          float damage = 20f;
27          var evt = new DamageAppliedEvent(
28              eventTimeMs: 0,
29              shooter: attacker,
30              target: defender,
31              damage: damage,
32              bodyPart: BodyPart.UpperTorso,
33              sequenceNumber: 0,
34              weaponName: weapon.Name);
35  
36          evt.Execute();
37  
38          Assert.True(defender.FlinchSeverity > 0f);
39          Assert.Equal(1, defender.FlinchShotsRemaining);
40      }
41  
42      [Fact]
43      public void ShotFiredEvent_ConsumesFlinchAfterShot()
44      {
45          var weapon = WeaponFactory.CreateSturmwolf45();
46          var shooter = new Operator("Shooter")
47          {
48              EquippedWeapon = weapon,
49              CurrentAmmo = 30,
50              Accuracy = 1.0f
51          };
52          var target = new Operator("Target")
53          {
54              EquippedWeapon = weapon
55          };
56  
57          shooter.ApplyFlinch(0.5f);
58          Assert.Equal(1, shooter.FlinchShotsRemaining);
59  
60          var evt = new ShotFiredEvent(
61              eventTimeMs: 0,
62              shooter: shooter,
63              target: target,
64              sequenceNumber: 0,
65              random: new Random(1),
66              eventQueue: null,
67              debugOptions: null);
68  
69          evt.Execute();
70  
71          Assert.Equal(0, shooter.FlinchShotsRemaining);
72          Assert.Equal(0f, shooter.FlinchSeverity, 3);
73      }
74  }