+++ /dev/null
-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);
- }
- }
- }
- }
-}
using Content.Shared.Body.Events;
using Content.Shared.Body.Systems;
using Content.Shared.Buckle.Components;
+using Content.Shared.Damage.Systems;
using Content.Shared.Emag.Systems;
+using Content.Shared.Mobs.Systems;
using Content.Shared.Power;
using Content.Shared.Power.EntitySystems;
using Robust.Shared.Timing;
namespace Content.Shared.Bed;
-public abstract class SharedBedSystem : EntitySystem
+public sealed class BedSystem : EntitySystem
{
- [Dependency] protected readonly IGameTiming Timing = default!;
[Dependency] private readonly ActionContainerSystem _actConts = default!;
- [Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
+ [Dependency] private readonly DamageableSystem _damageableSystem = default!;
[Dependency] private readonly EmagSystem _emag = default!;
+ [Dependency] private readonly IGameTiming _timing = default!;
+ [Dependency] private readonly MobStateSystem _mobStateSystem = default!;
+ [Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
[Dependency] private readonly SharedMetabolizerSystem _metabolizer = default!;
[Dependency] private readonly SharedPowerReceiverSystem _powerReceiver = default!;
[Dependency] private readonly SleepingSystem _sleepingSystem = default!;
+ private EntityQuery<SleepingComponent> _sleepingQuery;
+
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<StasisBedComponent, GotEmaggedEvent>(OnStasisEmagged);
SubscribeLocalEvent<StasisBedComponent, PowerChangedEvent>(OnPowerChanged);
SubscribeLocalEvent<StasisBedBuckledComponent, GetMetabolicMultiplierEvent>(OnStasisGetMetabolicMultiplier);
+
+ _sleepingQuery = GetEntityQuery<SleepingComponent>();
}
private void OnHealMapInit(Entity<HealOnBuckleComponent> ent, ref MapInitEvent args)
private void OnStrapped(Entity<HealOnBuckleComponent> bed, ref StrappedEvent args)
{
EnsureComp<HealOnBuckleHealingComponent>(bed);
- bed.Comp.NextHealTime = Timing.CurTime + TimeSpan.FromSeconds(bed.Comp.HealTime);
+ bed.Comp.NextHealTime = _timing.CurTime + TimeSpan.FromSeconds(bed.Comp.HealTime);
_actionsSystem.AddAction(args.Buckle, ref bed.Comp.SleepAction, SleepingSystem.SleepActionId, bed);
Dirty(bed);
_actionsSystem.RemoveAction(args.Buckle.Owner, bed.Comp.SleepAction);
_sleepingSystem.TryWaking(args.Buckle.Owner);
}
-
+
RemComp<HealOnBuckleHealingComponent>(bed);
}
args.Multiplier *= stasis.Multiplier;
}
- protected void UpdateMetabolisms(Entity<StrapComponent?> ent)
+ private void UpdateMetabolisms(Entity<StrapComponent?> ent)
{
if (!Resolve(ent, ref ent.Comp, false))
return;
_metabolizer.UpdateMetabolicMultiplier(buckledEntity);
}
}
+
+ 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);
+
+ Dirty(uid, bedComponent);
+
+ 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);
+ }
+ }
+ }
}