Files
crystall-punk-14/Content.Shared/Spawners/EntitySystems/SharedTimedDespawnSystem.cs

47 lines
1.2 KiB
C#
Raw Normal View History

using Content.Shared.Spawners.Components;
2023-04-10 15:37:03 +10:00
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
using Robust.Shared.Timing;
namespace Content.Shared.Spawners.EntitySystems;
public abstract class SharedTimedDespawnSystem : EntitySystem
{
[Dependency] private readonly IGameTiming _timing = default!;
2023-01-08 07:04:09 +13:00
public override void Initialize()
{
base.Initialize();
UpdatesOutsidePrediction = true;
}
public override void Update(float frameTime)
{
base.Update(frameTime);
// AAAAAAAAAAAAAAAAAAAAAAAAAAA
// Client both needs to predict this, but also can't properly handle prediction resetting.
2023-04-10 15:37:03 +10:00
if (!_timing.IsFirstTimePredicted)
return;
2023-04-10 15:37:03 +10:00
var query = EntityQueryEnumerator<TimedDespawnComponent>();
2023-04-10 15:37:03 +10:00
while (query.MoveNext(out var uid, out var comp))
{
comp.Lifetime -= frameTime;
2023-04-10 15:37:03 +10:00
if (!CanDelete(uid))
continue;
if (comp.Lifetime <= 0)
2023-04-10 15:37:03 +10:00
{
var ev = new TimedDespawnEvent();
RaiseLocalEvent(uid, ref ev);
QueueDel(uid);
}
}
}
protected abstract bool CanDelete(EntityUid uid);
}