mirror of
https://github.com/DeltaV-Station/Delta-v.git
synced 2026-09-29 23:57:29 +00:00
Initial decoupling pass on Damageable (#43103)
* Initial decoupling pass on Damageable * ope * e * mroaw * ok sure on the medibot thing * no medibot bounds * okidooks * arcryox era * cryox moment
This commit is contained in:
committed by
Coryler
parent
1416f45199
commit
f889c9f817
@@ -89,7 +89,7 @@ namespace Content.IntegrationTests.Tests.Commands
|
||||
Assert.That(mobStateSystem.IsDead(human, mobState), Is.False);
|
||||
Assert.That(mobStateSystem.IsIncapacitated(human, mobState), Is.False);
|
||||
|
||||
Assert.That(damageable.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(damSystem.GetTotalDamage((human, damageable)), Is.EqualTo(FixedPoint2.Zero));
|
||||
});
|
||||
});
|
||||
await pair.CleanReturnAsync();
|
||||
|
||||
@@ -138,7 +138,6 @@ public sealed class SuicideCommandTests
|
||||
MindComponent mindComponent = default;
|
||||
MobStateComponent mobStateComp = default;
|
||||
MobThresholdsComponent mobThresholdsComp = default;
|
||||
DamageableComponent damageableComp = default;
|
||||
await server.WaitPost(() =>
|
||||
{
|
||||
if (mind != null)
|
||||
@@ -146,7 +145,6 @@ public sealed class SuicideCommandTests
|
||||
|
||||
mobStateComp = entManager.GetComponent<MobStateComponent>(player);
|
||||
mobThresholdsComp = entManager.GetComponent<MobThresholdsComponent>(player);
|
||||
damageableComp = entManager.GetComponent<DamageableComponent>(player);
|
||||
|
||||
var slashProto = protoMan.Index(DamageType);
|
||||
damageableSystem.TryChangeDamage(player, new DamageSpecifier(slashProto, FixedPoint2.New(46.5)));
|
||||
@@ -165,7 +163,7 @@ public sealed class SuicideCommandTests
|
||||
//Assert.That(mobStateSystem.IsDead(player, mobStateComp)); // DeltaV - /suicide is the same as /ghost
|
||||
Assert.That(entManager.TryGetComponent<GhostComponent>(mindComponent.CurrentEntity, out var ghostComp) &&
|
||||
!ghostComp.CanReturnToBody);
|
||||
//Assert.That(damageableComp.Damage.GetTotal(), Is.EqualTo(lethalDamageThreshold)); // DeltaV - /suicide is the same as /ghost
|
||||
// Assert.That(damageableSystem.GetTotalDamage(player), Is.EqualTo(lethalDamageThreshold)); // DeltaV - /suicide is the same as /ghost
|
||||
});
|
||||
});
|
||||
|
||||
@@ -214,7 +212,7 @@ public sealed class SuicideCommandTests
|
||||
consoleHost.GetSessionShell(playerMan.Sessions.First()).ExecuteCommand("suicide");
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
//Assert.That(mobStateSystem.IsAlive(player, mobStateComp)); // DeltaV:
|
||||
//Assert.That(mobStateSystem.IsAlive(player, mobStateComp)); // DeltaV:
|
||||
Assert.That(entManager.TryGetComponent<GhostComponent>(mindComponent.CurrentEntity, out var ghostComp) &&
|
||||
!ghostComp.CanReturnToBody);
|
||||
});
|
||||
@@ -291,7 +289,7 @@ public sealed class SuicideCommandTests
|
||||
//Assert.That(mobStateSystem.IsDead(player, mobStateComp)); // DeltaV
|
||||
Assert.That(entManager.TryGetComponent<GhostComponent>(mindComponent.CurrentEntity, out var ghostComp) &&
|
||||
!ghostComp.CanReturnToBody);
|
||||
//Assert.That(damageableComp.Damage.DamageDict["Slash"], Is.EqualTo(lethalDamageThreshold)); // DeltaV
|
||||
// Assert.That(damageableSystem.GetAllDamage((player, damageableComp)).DamageDict["Slash"], Is.EqualTo(lethalDamageThreshold)); // Delta V
|
||||
});
|
||||
});
|
||||
|
||||
@@ -366,7 +364,7 @@ public sealed class SuicideCommandTests
|
||||
//Assert.That(mobStateSystem.IsDead(player, mobStateComp)); // DeltaV
|
||||
Assert.That(entManager.TryGetComponent<GhostComponent>(mindComponent.CurrentEntity, out var ghostComp) &&
|
||||
!ghostComp.CanReturnToBody);
|
||||
//Assert.That(damageableComp.Damage.DamageDict["Slash"], Is.EqualTo(lethalDamageThreshold / 2)); // DeltaV
|
||||
// Assert.That(damageableSystem.GetAllDamage((player, damageableComp)).DamageDict["Slash"], Is.EqualTo(lethalDamageThreshold / 2)); // Delta V
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -19,17 +19,16 @@ public sealed class WindowRepair : InteractionTest
|
||||
|
||||
// Damage the entity.
|
||||
var sys = SEntMan.System<DamageableSystem>();
|
||||
var comp = Comp<DamageableComponent>();
|
||||
var damageType = Server.ProtoMan.Index(BluntDamageType);
|
||||
var damage = new DamageSpecifier(damageType, FixedPoint2.New(10));
|
||||
Assert.That(comp.Damage.GetTotal(), Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sys.GetTotalDamage(STarget.Value), Is.EqualTo(FixedPoint2.Zero));
|
||||
await Server.WaitPost(() => sys.TryChangeDamage(SEntMan.GetEntity(Target).Value, damage, ignoreResistances: true));
|
||||
await RunTicks(5);
|
||||
Assert.That(comp.Damage.GetTotal(), Is.GreaterThan(FixedPoint2.Zero));
|
||||
Assert.That(sys.GetTotalDamage(STarget.Value), Is.GreaterThan(FixedPoint2.Zero));
|
||||
|
||||
// Repair the entity
|
||||
await InteractUsing(Weld);
|
||||
Assert.That(comp.Damage.GetTotal(), Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sys.GetTotalDamage(STarget.Value), Is.EqualTo(FixedPoint2.Zero));
|
||||
|
||||
// Validate that we can still deconstruct the entity (i.e., that welding deconstruction is not blocked).
|
||||
await Interact(
|
||||
|
||||
@@ -147,6 +147,7 @@ namespace Content.IntegrationTests.Tests.Damageable
|
||||
await server.WaitAssertion(() =>
|
||||
{
|
||||
var uid = sDamageableEntity;
|
||||
var ent = new Entity<DamageableComponent>(uid, sDamageableComponent);
|
||||
|
||||
// Check that damage is evenly distributed over a group if its a nice multiple
|
||||
var types = group3.DamageTypes;
|
||||
@@ -157,11 +158,11 @@ namespace Content.IntegrationTests.Tests.Damageable
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(damageToDeal));
|
||||
Assert.That(sDamageableComponent.DamagePerGroup[group3.ID], Is.EqualTo(damageToDeal));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(damageToDeal));
|
||||
Assert.That(sDamageableSystem.GetDamagePerGroup(ent)[group3.ID], Is.EqualTo(damageToDeal));
|
||||
foreach (var type in types)
|
||||
{
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict.TryGetValue(type, out typeDamage));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict.TryGetValue(type, out typeDamage));
|
||||
Assert.That(typeDamage, Is.EqualTo(damageToDeal / types.Count));
|
||||
}
|
||||
});
|
||||
@@ -171,11 +172,11 @@ namespace Content.IntegrationTests.Tests.Damageable
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableComponent.DamagePerGroup[group3.ID], Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetDamagePerGroup(ent)[group3.ID], Is.EqualTo(FixedPoint2.Zero));
|
||||
foreach (var type in types)
|
||||
{
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict.TryGetValue(type, out typeDamage));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict.TryGetValue(type, out typeDamage));
|
||||
Assert.That(typeDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
}
|
||||
});
|
||||
@@ -190,11 +191,11 @@ namespace Content.IntegrationTests.Tests.Damageable
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.New(14)));
|
||||
Assert.That(sDamageableComponent.DamagePerGroup[group3.ID], Is.EqualTo(FixedPoint2.New(14)));
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict[type3a.ID], Is.EqualTo(FixedPoint2.New(4.66f)));
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict[type3b.ID], Is.EqualTo(FixedPoint2.New(4.67f)));
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict[type3c.ID], Is.EqualTo(FixedPoint2.New(4.67f)));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.New(14)));
|
||||
Assert.That(sDamageableSystem.GetDamagePerGroup(ent)[group3.ID], Is.EqualTo(FixedPoint2.New(14)));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict[type3a.ID], Is.EqualTo(FixedPoint2.New(4.66f)));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict[type3b.ID], Is.EqualTo(FixedPoint2.New(4.67f)));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict[type3c.ID], Is.EqualTo(FixedPoint2.New(4.67f)));
|
||||
});
|
||||
|
||||
// Heal
|
||||
@@ -202,36 +203,36 @@ namespace Content.IntegrationTests.Tests.Damageable
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableComponent.DamagePerGroup[group3.ID], Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetDamagePerGroup(ent)[group3.ID], Is.EqualTo(FixedPoint2.Zero));
|
||||
foreach (var type in types)
|
||||
{
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict.TryGetValue(type, out typeDamage));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict.TryGetValue(type, out typeDamage));
|
||||
Assert.That(typeDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
}
|
||||
|
||||
// Test that unsupported groups return false when setting/getting damage (and don't change damage)
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
|
||||
});
|
||||
damage = new DamageSpecifier(group1, FixedPoint2.New(10)) + new DamageSpecifier(type2b, FixedPoint2.New(10));
|
||||
sDamageableSystem.ChangeDamage(uid, damage, true);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(sDamageableComponent.DamagePerGroup.TryGetValue(group1.ID, out _), Is.False);
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict.TryGetValue(type1.ID, out typeDamage), Is.False);
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetDamagePerGroup(ent).TryGetValue(group1.ID, out _), Is.False);
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict.TryGetValue(type1.ID, out typeDamage), Is.False);
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
|
||||
});
|
||||
|
||||
// Test SetAll and ClearAll function
|
||||
sDamageableSystem.SetAllDamage((sDamageableEntity, sDamageableComponent), 10);
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.New(10 * sDamageableComponent.Damage.DamageDict.Count)));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.New(10 * sDamageableSystem.GetAllDamage(uid).DamageDict.Count)));
|
||||
sDamageableSystem.SetAllDamage((sDamageableEntity, sDamageableComponent), 0);
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
|
||||
sDamageableSystem.SetAllDamage((sDamageableEntity, sDamageableComponent), 10);
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.New(10 * sDamageableComponent.Damage.DamageDict.Count)));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.New(10 * sDamageableSystem.GetAllDamage(uid).DamageDict.Count)));
|
||||
sDamageableSystem.ClearAllDamage((sDamageableEntity, sDamageableComponent));
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
|
||||
|
||||
// Test 'wasted' healing
|
||||
sDamageableSystem.ChangeDamage(uid, new DamageSpecifier(type3a, 5));
|
||||
@@ -240,18 +241,18 @@ namespace Content.IntegrationTests.Tests.Damageable
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict[type3a.ID], Is.EqualTo(FixedPoint2.New(1.34)));
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict[type3b.ID], Is.EqualTo(FixedPoint2.New(3.33)));
|
||||
Assert.That(sDamageableComponent.Damage.DamageDict[type3c.ID], Is.EqualTo(FixedPoint2.New(0)));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict[type3a.ID], Is.EqualTo(FixedPoint2.New(1.34)));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict[type3b.ID], Is.EqualTo(FixedPoint2.New(3.33)));
|
||||
Assert.That(sDamageableSystem.GetAllDamage(uid).DamageDict[type3c.ID], Is.EqualTo(FixedPoint2.New(0)));
|
||||
});
|
||||
|
||||
// Test Over-Healing
|
||||
sDamageableSystem.ChangeDamage(uid, new DamageSpecifier(group3, FixedPoint2.New(-100)));
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
|
||||
|
||||
// Test that if no health change occurred, returns false
|
||||
sDamageableSystem.ChangeDamage(uid, new DamageSpecifier(group3, -100));
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
|
||||
});
|
||||
await pair.CleanReturnAsync();
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace Content.IntegrationTests.Tests.Destructible
|
||||
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bruteDamage * -10);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.New(20)));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(sDestructibleEntity), Is.EqualTo(FixedPoint2.New(20)));
|
||||
|
||||
// No new thresholds reached, healing should not trigger it
|
||||
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
|
||||
|
||||
@@ -195,7 +195,7 @@ namespace Content.IntegrationTests.Tests.Destructible
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
// Check that the total damage matches
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.New(50)));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(sDestructibleEntity), Is.EqualTo(FixedPoint2.New(50)));
|
||||
|
||||
// Both thresholds should have triggered
|
||||
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Has.Exactly(2).Items);
|
||||
@@ -252,7 +252,7 @@ namespace Content.IntegrationTests.Tests.Destructible
|
||||
sDamageableSystem.ClearAllDamage((sDestructibleEntity, sDamageableComponent));
|
||||
|
||||
// Check that the entity has 0 damage
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(sDestructibleEntity), Is.EqualTo(FixedPoint2.Zero));
|
||||
|
||||
// Set both thresholds to only trigger once
|
||||
foreach (var destructibleThreshold in sDestructibleComponent.Thresholds)
|
||||
@@ -267,7 +267,7 @@ namespace Content.IntegrationTests.Tests.Destructible
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
// Check that the total damage matches
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.New(50)));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(sDestructibleEntity), Is.EqualTo(FixedPoint2.New(50)));
|
||||
|
||||
// No thresholds should have triggered as they were already triggered before, and they are set to only trigger once
|
||||
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
|
||||
@@ -283,7 +283,7 @@ namespace Content.IntegrationTests.Tests.Destructible
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
// Check that the total damage matches
|
||||
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.New(50)));
|
||||
Assert.That(sDamageableSystem.GetTotalDamage(sDestructibleEntity), Is.EqualTo(FixedPoint2.New(50)));
|
||||
|
||||
// They shouldn't have been triggered by changing TriggersOnce
|
||||
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
|
||||
|
||||
@@ -11,6 +11,7 @@ using Content.Server.RoundEnd;
|
||||
using Content.Server.Shuttles.Components;
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared.Damage.Components;
|
||||
using Content.Shared.Damage.Systems;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.GameTicking;
|
||||
using Content.Shared.Hands.Components;
|
||||
@@ -58,6 +59,7 @@ public sealed class NukeOpsTest
|
||||
var invSys = server.System<InventorySystem>();
|
||||
var factionSys = server.System<NpcFactionSystem>();
|
||||
var roundEndSys = server.System<RoundEndSystem>();
|
||||
var damageSys = server.System<DamageableSystem>();
|
||||
|
||||
server.CfgMan.SetCVar(CCVars.GridFill, true);
|
||||
|
||||
@@ -231,12 +233,11 @@ public sealed class NukeOpsTest
|
||||
var totalSeconds = 30;
|
||||
var totalTicks = (int)Math.Ceiling(totalSeconds / server.Timing.TickPeriod.TotalSeconds);
|
||||
var increment = 5;
|
||||
var damage = entMan.GetComponent<DamageableComponent>(player);
|
||||
for (var tick = 0; tick < totalTicks; tick += increment)
|
||||
{
|
||||
await pair.RunTicksSync(increment);
|
||||
Assert.That(resp.SuffocationCycles, Is.LessThanOrEqualTo(resp.SuffocationCycleThreshold));
|
||||
Assert.That(damage.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
|
||||
Assert.That(damageSys.GetTotalDamage(player), Is.EqualTo(FixedPoint2.Zero));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ public sealed class DefibrillatorTest : InteractionTest
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(targetMobState.CurrentState, Is.EqualTo(MobState.Alive), "Target mob was not alive when spawned.");
|
||||
Assert.That(targetDamageable.TotalDamage, Is.EqualTo(FixedPoint2.Zero), "Target mob was damaged when spawned.");
|
||||
Assert.That(damageableSystem.GetTotalDamage(STarget!.Value), Is.EqualTo(FixedPoint2.Zero), "Target mob was damaged when spawned.");
|
||||
});
|
||||
|
||||
// Get the damage needed to kill or crit the target.
|
||||
@@ -64,7 +64,7 @@ public sealed class DefibrillatorTest : InteractionTest
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(targetMobState.CurrentState, Is.EqualTo(MobState.Dead), "Target mob did not die from deadly damage amount.");
|
||||
Assert.That(targetDamageable.TotalDamage, Is.EqualTo(deathThreshold), "Target mob had the wrong total damage amount after being killed.");
|
||||
Assert.That(damageableSystem.GetTotalDamage(STarget!.Value), Is.EqualTo(deathThreshold), "Target mob had the wrong total damage amount after being killed.");
|
||||
});
|
||||
|
||||
// Spawn a defib and activate it.
|
||||
@@ -82,7 +82,7 @@ public sealed class DefibrillatorTest : InteractionTest
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(targetMobState.CurrentState, Is.EqualTo(MobState.Dead), "Target mob was revived despite being over the death damage threshold.");
|
||||
Assert.That(targetDamageable.TotalDamage, Is.GreaterThan(deathThreshold), "Target mob did not take damage from being defibrillated.");
|
||||
Assert.That(damageableSystem.GetTotalDamage(STarget!.Value), Is.GreaterThan(deathThreshold), "Target mob did not take damage from being defibrillated.");
|
||||
});
|
||||
|
||||
// Set the damage halfway between the crit and death thresholds so that the target can be revived.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Content.IntegrationTests.Tests.Movement;
|
||||
using Content.Server.NPC.HTN;
|
||||
using Content.Shared.Damage.Components;
|
||||
using Content.Shared.Damage.Systems;
|
||||
using Content.Shared.Item.ItemToggle;
|
||||
using Content.Shared.Item.ItemToggle.Components;
|
||||
using Content.Shared.Mobs;
|
||||
@@ -44,9 +45,8 @@ public sealed class MousetrapMouseMoveOverTest : MovementTest
|
||||
|
||||
// The mouse is spawned by the test before the atmosphere is added, so it has some barotrauma damage already
|
||||
// TODO: fix this since it can have an impact on integration tests
|
||||
Assert.That(SEntMan.TryGetComponent<DamageableComponent>(SPlayer, out var damageComp),
|
||||
$"Player does not have a DamageableComponent.");
|
||||
var startingDamage = damageComp.TotalDamage;
|
||||
var damageSystem = Server.System<DamageableSystem>();
|
||||
var startingDamage = damageSystem.GetTotalDamage(SPlayer);
|
||||
|
||||
Assert.That(SEntMan.TryGetComponent<MobStateComponent>(SPlayer, out var mouseMobStateComp),
|
||||
$"{MouseProtoId} does not have a MobStateComponent.");
|
||||
@@ -58,7 +58,7 @@ public sealed class MousetrapMouseMoveOverTest : MovementTest
|
||||
Assert.That(Delta(), Is.LessThan(0.5), "Mouse did not move over mousetrap.");
|
||||
|
||||
// Walking over an inactive trap does not trigger it
|
||||
Assert.That(damageComp.TotalDamage, Is.LessThanOrEqualTo(startingDamage), "Mouse took damage from inactive trap!");
|
||||
Assert.That(damageSystem.GetTotalDamage(SPlayer), Is.LessThanOrEqualTo(startingDamage), "Mouse took damage from inactive trap!");
|
||||
Assert.That(itemToggleComp.Activated, Is.False, "Mousetrap was activated.");
|
||||
|
||||
// Activate the trap
|
||||
@@ -72,7 +72,7 @@ public sealed class MousetrapMouseMoveOverTest : MovementTest
|
||||
Assert.That(Delta(), Is.LessThan(0.1), "Mouse moved past active mousetrap.");
|
||||
|
||||
// Walking over an active trap triggers it
|
||||
Assert.That(damageComp.TotalDamage, Is.GreaterThan(startingDamage), "Mouse did not take damage from active trap!");
|
||||
Assert.That(damageSystem.GetTotalDamage(SPlayer), Is.GreaterThan(startingDamage), "Mouse did not take damage from active trap!");
|
||||
Assert.That(itemToggleComp.Activated, Is.False, "Mousetrap was not deactivated after triggering.");
|
||||
Assert.That(mouseMobStateComp.CurrentState, Is.EqualTo(MobState.Dead), "Mouse was not killed by trap.");
|
||||
}
|
||||
@@ -117,9 +117,8 @@ public sealed class MousetrapHumanMoveOverTest : MovementTest
|
||||
Assert.That(itemToggleSystem.TrySetActive(STarget.Value, true), "Could not activate the mouse trap.");
|
||||
});
|
||||
|
||||
Assert.That(SEntMan.TryGetComponent<DamageableComponent>(SPlayer, out var damageComp),
|
||||
$"Player does not have a DamageableComponent.");
|
||||
var startingDamage = damageComp.TotalDamage;
|
||||
var damageSystem = Server.System<DamageableSystem>();
|
||||
var startingDamage = damageSystem.GetTotalDamage(SPlayer);
|
||||
|
||||
// Move player over the trap
|
||||
await Move(DirectionFlag.East, 0.5f);
|
||||
@@ -127,7 +126,7 @@ public sealed class MousetrapHumanMoveOverTest : MovementTest
|
||||
Assert.That(Delta(), Is.LessThan(0.5), "Player did not move over mousetrap.");
|
||||
|
||||
// Walking over the trap without shoes activates it
|
||||
Assert.That(damageComp.TotalDamage, Is.GreaterThan(startingDamage), "Player did not take damage.");
|
||||
Assert.That(damageSystem.GetTotalDamage(SPlayer), Is.GreaterThan(startingDamage), "Player did not take damage.");
|
||||
Assert.That(itemToggleComp.Activated, Is.False, "Mousetrap was not deactivated after triggering.");
|
||||
|
||||
// Reactivate the trap
|
||||
@@ -135,7 +134,7 @@ public sealed class MousetrapHumanMoveOverTest : MovementTest
|
||||
{
|
||||
Assert.That(itemToggleSystem.TrySetActive(STarget.Value, true), "Could not activate the mouse trap.");
|
||||
});
|
||||
var afterStepDamage = damageComp.TotalDamage;
|
||||
var afterStepDamage = damageSystem.GetTotalDamage(SPlayer);
|
||||
|
||||
// Give the player some shoes
|
||||
await PlaceInHands(ShoesProtoId);
|
||||
@@ -147,7 +146,7 @@ public sealed class MousetrapHumanMoveOverTest : MovementTest
|
||||
Assert.That(Delta(), Is.GreaterThan(0.5), "Player did not move back over mousetrap.");
|
||||
|
||||
// Walking over the trap with shoes on does not activate it
|
||||
Assert.That(damageComp.TotalDamage, Is.LessThanOrEqualTo(afterStepDamage), "Player took damage from trap!");
|
||||
Assert.That(damageSystem.GetTotalDamage(SPlayer), Is.LessThanOrEqualTo(afterStepDamage), "Player took damage from trap!");
|
||||
Assert.That(itemToggleComp.Activated, "Mousetrap was deactivated despite the player being protected by shoes.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,14 +196,14 @@ public sealed class VendingInteractionTest : InteractionTest
|
||||
private async Task BreakVendor()
|
||||
{
|
||||
var damageableSys = SEntMan.System<DamageableSystem>();
|
||||
Assert.That(TryComp<DamageableComponent>(out var damageableComp), $"{VendingMachineProtoId} does not have DamageableComponent.");
|
||||
Assert.That(damageableComp.Damage.GetTotal(), Is.EqualTo(FixedPoint2.Zero), $"{VendingMachineProtoId} started with unexpected damage.");
|
||||
Assert.That(HasComp<DamageableComponent>(), $"{VendingMachineProtoId} does not have DamageableComponent.");
|
||||
Assert.That(damageableSys.GetAllDamage(STarget!.Value).GetTotal(), Is.EqualTo(FixedPoint2.Zero), $"{VendingMachineProtoId} started with unexpected damage.");
|
||||
|
||||
// Damage the vending machine to the point that it breaks
|
||||
var damageType = ProtoMan.Index(TestDamageType);
|
||||
var damage = new DamageSpecifier(damageType, FixedPoint2.New(100));
|
||||
await Server.WaitPost(() => damageableSys.TryChangeDamage(SEntMan.GetEntity(Target).Value, damage, ignoreResistances: true));
|
||||
await RunTicks(5);
|
||||
Assert.That(damageableComp.Damage.GetTotal(), Is.GreaterThan(FixedPoint2.Zero), $"{VendingMachineProtoId} did not take damage.");
|
||||
Assert.That(damageableSys.GetAllDamage(STarget!.Value).GetTotal(), Is.GreaterThan(FixedPoint2.Zero), $"{VendingMachineProtoId} did not take damage.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using Content.IntegrationTests.Tests.Interaction;
|
||||
using Content.Shared.Damage.Components;
|
||||
using Content.Shared.Damage.Systems;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.Weapons.Ranged.Components;
|
||||
using Content.Shared.Weapons.Ranged.Systems;
|
||||
using Content.Shared.Wieldable.Components;
|
||||
@@ -17,6 +19,7 @@ public sealed class WeaponTests : InteractionTest
|
||||
public async Task GunRequiresWieldTest()
|
||||
{
|
||||
var gunSystem = SEntMan.System<SharedGunSystem>();
|
||||
var damageSystem = SEntMan.System<DamageableSystem>();
|
||||
|
||||
await AddAtmosphere(); // prevent the Urist from suffocating
|
||||
|
||||
@@ -44,8 +47,8 @@ public sealed class WeaponTests : InteractionTest
|
||||
Assert.That(updatedAmmo,
|
||||
Is.EqualTo(startAmmo),
|
||||
"Mosin discharged ammo when the weapon should not have fired!");
|
||||
Assert.That(damageComp.TotalDamage.Value,
|
||||
Is.EqualTo(0),
|
||||
Assert.That(damageSystem.GetTotalDamage(ToServer(urist)),
|
||||
Is.EqualTo(FixedPoint2.Zero),
|
||||
"Urist took damage when the weapon should not have fired!");
|
||||
|
||||
await UseInHand();
|
||||
@@ -56,8 +59,8 @@ public sealed class WeaponTests : InteractionTest
|
||||
updatedAmmo = gunSystem.GetAmmoCount(mosinEnt);
|
||||
|
||||
Assert.That(updatedAmmo, Is.EqualTo(startAmmo - 1), "Mosin failed to discharge appropriate amount of ammo!");
|
||||
Assert.That(damageComp.TotalDamage.Value,
|
||||
Is.GreaterThan(0),
|
||||
Assert.That(damageSystem.GetTotalDamage(ToServer(urist)),
|
||||
Is.GreaterThan(FixedPoint2.Zero),
|
||||
"Mosin was fired but urist sustained no damage!");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user