[DataField("remainingDelay")]
public TimeSpan? RemainingDelay;
- public CancellationTokenSource? CancellationTokenSource;
-
- public bool ActiveDelay => CancellationTokenSource is { Token: { IsCancellationRequested: false } };
+ public bool ActiveDelay => DelayEndTime != null;
}
[Serializable, NetSerializable]
var curTime = _gameTiming.CurTime;
var mQuery = EntityManager.GetEntityQuery<MetaDataComponent>();
+ // TODO refactor this to use active components
foreach (var delay in _activeDelays)
{
if (delay.DelayEndTime == null ||
curTime > delay.DelayEndTime ||
- Deleted(delay.Owner, mQuery) ||
- delay.CancellationTokenSource?.Token.IsCancellationRequested == true)
+ Deleted(delay.Owner, mQuery))
{
toRemove.Add(delay);
}
foreach (var delay in toRemove)
{
- delay.CancellationTokenSource = null;
delay.DelayEndTime = null;
_activeDelays.Remove(delay);
Dirty(delay);
if (!Resolve(uid, ref component, false))
return;
- if (component.ActiveDelay || Deleted(uid)) return;
-
- component.CancellationTokenSource = new CancellationTokenSource();
+ if (component.ActiveDelay)
+ return;
DebugTools.Assert(!_activeDelays.Contains(component));
_activeDelays.Add(component);
public void Cancel(UseDelayComponent component)
{
- component.CancellationTokenSource?.Cancel();
- component.CancellationTokenSource = null;
component.DelayEndTime = null;
_activeDelays.Remove(component);
Dirty(component);
cooldown.CooldownEnd = _gameTiming.CurTime;
}
}
-
- public void Restart(UseDelayComponent component)
- {
- component.CancellationTokenSource?.Cancel();
- component.CancellationTokenSource = null;
- BeginDelay(component.Owner, component);
- }
}