Fix do_after throwing on attaching to new entity (#1679)
Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
This commit is contained in:
@@ -3,8 +3,10 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Content.Client.GameObjects.EntitySystems.DoAfter;
|
using Content.Client.GameObjects.EntitySystems.DoAfter;
|
||||||
using Content.Shared.GameObjects.Components;
|
using Content.Shared.GameObjects.Components;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
using Robust.Shared.GameObjects.Systems;
|
using Robust.Shared.GameObjects.Systems;
|
||||||
|
using Robust.Shared.Interfaces.GameObjects;
|
||||||
using Robust.Shared.Interfaces.Network;
|
using Robust.Shared.Interfaces.Network;
|
||||||
using Robust.Shared.Interfaces.Timing;
|
using Robust.Shared.Interfaces.Timing;
|
||||||
using Robust.Shared.IoC;
|
using Robust.Shared.IoC;
|
||||||
@@ -38,6 +40,18 @@ namespace Content.Client.GameObjects.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void HandleMessage(ComponentMessage message, IComponent? component)
|
||||||
|
{
|
||||||
|
base.HandleMessage(message, component);
|
||||||
|
switch (message)
|
||||||
|
{
|
||||||
|
case PlayerDetachedMsg _:
|
||||||
|
_doAfters.Clear();
|
||||||
|
CancelledDoAfters.Clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Remove a DoAfter without showing a cancellation graphic.
|
/// Remove a DoAfter without showing a cancellation graphic.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -43,6 +43,25 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
|
|||||||
LayoutContainer.SetGrowVertical(this, LayoutContainer.GrowDirection.Begin);
|
LayoutContainer.SetGrowVertical(this, LayoutContainer.GrowDirection.Begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when the mind is detached from an entity
|
||||||
|
/// </summary>
|
||||||
|
/// Rather than just dispose of the Gui we'll just remove its child controls and re-use the control.
|
||||||
|
public void Detached()
|
||||||
|
{
|
||||||
|
foreach (var (_, control) in _doAfterControls)
|
||||||
|
{
|
||||||
|
control.Dispose();
|
||||||
|
}
|
||||||
|
_doAfterControls.Clear();
|
||||||
|
foreach (var (_, control) in _doAfterBars)
|
||||||
|
{
|
||||||
|
control.Dispose();
|
||||||
|
}
|
||||||
|
_doAfterBars.Clear();
|
||||||
|
_cancelledDoAfters.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add the necessary control for a DoAfter progress bar.
|
/// Add the necessary control for a DoAfter progress bar.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
|
|||||||
{
|
{
|
||||||
_player = entity;
|
_player = entity;
|
||||||
// Setup the GUI and pass the new data to it if applicable.
|
// Setup the GUI and pass the new data to it if applicable.
|
||||||
Gui?.Dispose();
|
Gui?.Detached();
|
||||||
|
|
||||||
if (entity == null)
|
if (entity == null)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user