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 _sleepingQuery; public override void Initialize() { base.Initialize(); _sleepingQuery = GetEntityQuery(); } public override void Update(float frameTime) { base.Update(frameTime); var query = EntityQueryEnumerator(); 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); } } } } }