2022-10-23 00:46:28 +02:00
|
|
|
using Content.Shared.Bed;
|
2025-05-15 22:52:24 +10:00
|
|
|
using Content.Shared.Bed.Components;
|
2022-10-23 00:46:28 +02:00
|
|
|
using Content.Shared.Bed.Sleep;
|
|
|
|
|
using Content.Shared.Buckle.Components;
|
|
|
|
|
using Content.Shared.Damage;
|
2023-01-13 16:57:10 -08:00
|
|
|
using Content.Shared.Mobs.Systems;
|
2022-04-15 18:53:52 -04:00
|
|
|
|
|
|
|
|
namespace Content.Server.Bed
|
|
|
|
|
{
|
2025-05-15 22:52:24 +10:00
|
|
|
public sealed class BedSystem : SharedBedSystem
|
2022-04-15 18:53:52 -04:00
|
|
|
{
|
|
|
|
|
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
|
2022-07-27 00:46:24 -04:00
|
|
|
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
|
2025-05-15 22:52:24 +10:00
|
|
|
|
|
|
|
|
private EntityQuery<SleepingComponent> _sleepingQuery;
|
2022-10-23 00:46:28 +02:00
|
|
|
|
2022-04-15 18:53:52 -04:00
|
|
|
public override void Initialize()
|
|
|
|
|
{
|
|
|
|
|
base.Initialize();
|
2025-05-15 22:52:24 +10:00
|
|
|
|
|
|
|
|
_sleepingQuery = GetEntityQuery<SleepingComponent>();
|
2022-04-15 18:53:52 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void Update(float frameTime)
|
|
|
|
|
{
|
|
|
|
|
base.Update(frameTime);
|
|
|
|
|
|
2023-10-19 12:34:31 -07:00
|
|
|
var query = EntityQueryEnumerator<HealOnBuckleHealingComponent, HealOnBuckleComponent, StrapComponent>();
|
|
|
|
|
while (query.MoveNext(out var uid, out _, out var bedComponent, out var strapComponent))
|
2022-04-15 18:53:52 -04:00
|
|
|
{
|
2025-05-15 22:52:24 +10:00
|
|
|
if (Timing.CurTime < bedComponent.NextHealTime)
|
2022-04-15 18:53:52 -04:00
|
|
|
continue;
|
2022-05-24 22:31:15 -04:00
|
|
|
|
2022-11-08 20:59:34 +01:00
|
|
|
bedComponent.NextHealTime += TimeSpan.FromSeconds(bedComponent.HealTime);
|
2022-05-24 22:31:15 -04:00
|
|
|
|
2023-10-19 12:34:31 -07:00
|
|
|
if (strapComponent.BuckledEntities.Count == 0)
|
|
|
|
|
continue;
|
2022-05-24 22:31:15 -04:00
|
|
|
|
|
|
|
|
foreach (var healedEntity in strapComponent.BuckledEntities)
|
2022-04-15 18:53:52 -04:00
|
|
|
{
|
2022-07-27 00:46:24 -04:00
|
|
|
if (_mobStateSystem.IsDead(healedEntity))
|
2022-05-24 22:31:15 -04:00
|
|
|
continue;
|
|
|
|
|
|
2022-07-27 00:46:24 -04:00
|
|
|
var damage = bedComponent.Damage;
|
|
|
|
|
|
2025-05-15 22:52:24 +10:00
|
|
|
if (_sleepingQuery.HasComp(healedEntity))
|
2022-07-27 00:46:24 -04:00
|
|
|
damage *= bedComponent.SleepMultiplier;
|
|
|
|
|
|
2023-10-19 12:34:31 -07:00
|
|
|
_damageableSystem.TryChangeDamage(healedEntity, damage, true, origin: uid);
|
2022-04-15 18:53:52 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|