* Update DamageableSystem to modern standards * DamageContainerId -> DamageContainerID with lint flag * Replace strings with protoids * Make CVar subscription declarations all consistently whitespaced * ChangeDamage -> TryChangeDamage, cope with C# jank * Revert event signature changes * Restore a comment * Re-add two queries * Init the queries * Use appearanceQuery in DamageChanged * Use damageableQuery in TryChangeDamage * Use damageableQuery in SetDamageModifierSetId * Final cleanup, fix sandboxing * Rectify ExplosionSystem:::ProcessEntity's call to TryChangeDamage * Re-organize DamageableSystem * first big fuck you breaking change. * THATS A LOT OF DAMAGE!!! * Fix test fails * test fixes 2 * push it --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
using Content.Shared.Bed;
|
|
using Content.Shared.Bed.Components;
|
|
using Content.Shared.Bed.Sleep;
|
|
using Content.Shared.Buckle.Components;
|
|
using Content.Shared.Damage.Systems;
|
|
using Content.Shared.Mobs.Systems;
|
|
|
|
namespace Content.Server.Bed
|
|
{
|
|
public sealed class BedSystem : SharedBedSystem
|
|
{
|
|
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
|
|
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
|
|
|
|
private EntityQuery<SleepingComponent> _sleepingQuery;
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
_sleepingQuery = GetEntityQuery<SleepingComponent>();
|
|
}
|
|
|
|
public override void Update(float frameTime)
|
|
{
|
|
base.Update(frameTime);
|
|
|
|
var query = EntityQueryEnumerator<HealOnBuckleHealingComponent, HealOnBuckleComponent, StrapComponent>();
|
|
while (query.MoveNext(out var uid, out _, out var bedComponent, out var strapComponent))
|
|
{
|
|
if (Timing.CurTime < bedComponent.NextHealTime)
|
|
continue;
|
|
|
|
bedComponent.NextHealTime += TimeSpan.FromSeconds(bedComponent.HealTime);
|
|
|
|
if (strapComponent.BuckledEntities.Count == 0)
|
|
continue;
|
|
|
|
foreach (var healedEntity in strapComponent.BuckledEntities)
|
|
{
|
|
if (_mobStateSystem.IsDead(healedEntity))
|
|
continue;
|
|
|
|
var damage = bedComponent.Damage;
|
|
|
|
if (_sleepingQuery.HasComp(healedEntity))
|
|
damage *= bedComponent.SleepMultiplier;
|
|
|
|
_damageableSystem.TryChangeDamage(healedEntity, damage, true, origin: uid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|