/// <summary> /// Remove a DoAfter without showing a cancellation graphic. /// </summary> /// <param name="clientDoAfter"></param> public void Remove(DoAfterComponent component, ClientDoAfter clientDoAfter) { component.DoAfters.Remove(clientDoAfter.ID); var found = false; for (var i = component.CancelledDoAfters.Count - 1; i >= 0; i--) { var cancelled = component.CancelledDoAfters[i]; if (cancelled.Message == clientDoAfter) { component.CancelledDoAfters.RemoveAt(i); found = true; break; } } if (!found) { component.DoAfters.Remove(clientDoAfter.ID); } component.Gui?.RemoveDoAfter(clientDoAfter.ID); }
private void OnDoAfterHandleState(EntityUid uid, DoAfterComponent component, ref ComponentHandleState args) { if (args.Current is not DoAfterComponentState state) { return; } var toRemove = new RemQueue <ClientDoAfter>(); foreach (var(id, doAfter) in component.DoAfters) { var found = false; foreach (var clientdoAfter in state.DoAfters) { if (clientdoAfter.ID == id) { found = true; break; } } if (!found) { toRemove.Add(doAfter); } } foreach (var doAfter in toRemove) { Remove(component, doAfter); } foreach (var doAfter in state.DoAfters) { if (component.DoAfters.ContainsKey(doAfter.ID)) { continue; } component.DoAfters.Add(doAfter.ID, doAfter); } if (component.Gui == null || component.Gui.Disposed) { return; } foreach (var(_, doAfter) in component.DoAfters) { component.Gui.AddDoAfter(doAfter); } }
/// <summary> /// Mark a DoAfter as cancelled and show a cancellation graphic. /// </summary> /// Actual removal is handled by DoAfterEntitySystem. /// <param name="id"></param> /// <param name="currentTime"></param> public void Cancel(DoAfterComponent component, byte id, TimeSpan?currentTime = null) { foreach (var(_, cancelled) in component.CancelledDoAfters) { if (cancelled.ID == id) { return; } } if (!component.DoAfters.ContainsKey(id)) { return; } var doAfterMessage = component.DoAfters[id]; component.CancelledDoAfters.Add((_gameTiming.CurTime, doAfterMessage)); component.Gui?.CancelDoAfter(id); }
/// <summary> /// For handling PVS so we dispose of controls if they go out of range /// </summary> public void Enable(DoAfterComponent component) { if (component.Gui?.Disposed == false) { return; } component.Gui = new DoAfterGui { AttachedEntity = component.Owner }; foreach (var(_, doAfter) in component.DoAfters) { component.Gui.AddDoAfter(doAfter); } foreach (var(_, cancelled) in component.CancelledDoAfters) { component.Gui.CancelDoAfter(cancelled.ID); } }
public void Disable(DoAfterComponent component) { component.Gui?.Dispose(); component.Gui = null; }
private void OnDoAfterShutdown(EntityUid uid, DoAfterComponent component, ComponentShutdown args) { Disable(component); }
private void OnDoAfterStartup(EntityUid uid, DoAfterComponent component, ComponentStartup args) { Enable(component); }