public async Task TestDamageTypeDamageAndHeal() { var server = StartServerDummyTicker(new ServerContentIntegrationOption { ExtraPrototypes = Prototypes }); await server.WaitIdleAsync(); var sEntityManager = server.ResolveDependency <IEntityManager>(); var sMapManager = server.ResolveDependency <IMapManager>(); IEntity sDamageableEntity = null; IDamageableComponent sDamageableComponent = null; await server.WaitPost(() => { var mapId = sMapManager.NextMapId(); var coordinates = new MapCoordinates(0, 0, mapId); sMapManager.CreateMap(mapId); sDamageableEntity = sEntityManager.SpawnEntity(DamageableEntityId, coordinates); sDamageableComponent = sDamageableEntity.GetComponent <IDamageableComponent>(); }); await server.WaitRunTicks(5); await server.WaitAssertion(() => { Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(0)); var damageToDeal = 7; foreach (var type in Enum.GetValues <DamageType>()) { Assert.That(sDamageableComponent.SupportsDamageType(type)); // Damage Assert.That(sDamageableComponent.ChangeDamage(type, damageToDeal, true), Is.True); Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(damageToDeal)); Assert.That(sDamageableComponent.TryGetDamage(type, out var damage), Is.True); Assert.That(damage, Is.EqualTo(damageToDeal)); // Heal Assert.That(sDamageableComponent.ChangeDamage(type, -damageToDeal, true), Is.True); Assert.That(sDamageableComponent.TotalDamage, Is.Zero); Assert.That(sDamageableComponent.TryGetDamage(type, out damage), Is.True); Assert.That(damage, Is.Zero); } }); }