/ 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 }