Puddles & spreader refactor (#15191)

This commit is contained in:
metalgearsloth
2023-04-10 15:37:03 +10:00
committed by GitHub
parent 3178ab83f6
commit 317a4013eb
141 changed files with 3046 additions and 3201 deletions

View File

@@ -1,4 +1,6 @@
using Content.Shared.Spawners.Components;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
using Robust.Shared.Timing;
namespace Content.Shared.Spawners.EntitySystems;
@@ -11,24 +13,56 @@ public abstract class SharedTimedDespawnSystem : EntitySystem
{
base.Initialize();
UpdatesOutsidePrediction = true;
SubscribeLocalEvent<TimedDespawnComponent, ComponentGetState>(OnDespawnGetState);
SubscribeLocalEvent<TimedDespawnComponent, ComponentHandleState>(OnDespawnHandleState);
}
private void OnDespawnGetState(EntityUid uid, TimedDespawnComponent component, ref ComponentGetState args)
{
args.State = new TimedDespawnComponentState()
{
Lifetime = component.Lifetime,
};
}
private void OnDespawnHandleState(EntityUid uid, TimedDespawnComponent component, ref ComponentHandleState args)
{
if (args.Current is not TimedDespawnComponentState state)
return;
component.Lifetime = state.Lifetime;
}
public override void Update(float frameTime)
{
base.Update(frameTime);
if (!_timing.IsFirstTimePredicted) return;
if (!_timing.IsFirstTimePredicted)
return;
foreach (var comp in EntityQuery<TimedDespawnComponent>())
var query = EntityQueryEnumerator<TimedDespawnComponent>();
while (query.MoveNext(out var uid, out var comp))
{
if (!CanDelete(comp.Owner)) continue;
comp.Lifetime -= frameTime;
if (!CanDelete(uid))
continue;
if (comp.Lifetime <= 0)
EntityManager.QueueDeleteEntity(comp.Owner);
{
var ev = new TimedDespawnEvent();
RaiseLocalEvent(uid, ref ev);
QueueDel(uid);
}
}
}
protected abstract bool CanDelete(EntityUid uid);
[Serializable, NetSerializable]
private sealed class TimedDespawnComponentState : ComponentState
{
public float Lifetime;
}
}