Make DoAfters use DamageChangedMessage instead of an event (#3115)

This commit is contained in:
DrSmugleaf
2021-02-10 02:36:05 +01:00
committed by GitHub
parent 9a7e2ec5ff
commit 96e5e34084
6 changed files with 52 additions and 35 deletions

View File

@@ -4,7 +4,6 @@ using System.Threading.Tasks;
using Content.Server.GameObjects.Components.GUI;
using Content.Server.GameObjects.Components.Items.Storage;
using Content.Server.GameObjects.Components.Mobs;
using Content.Shared.GameObjects.Components.Damage;
using Robust.Shared.Interfaces.Timing;
using Robust.Shared.IoC;
using Robust.Shared.Map;
@@ -15,7 +14,7 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
{
public Task<DoAfterStatus> AsTask { get; }
private TaskCompletionSource<DoAfterStatus> Tcs { get;}
private TaskCompletionSource<DoAfterStatus> Tcs { get; }
public DoAfterEventArgs EventArgs;
@@ -27,7 +26,7 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
public EntityCoordinates TargetGrid { get; }
private bool _tookDamage;
public bool TookDamage { get; set; }
public DoAfterStatus Status => AsTask.IsCompletedSuccessfully ? AsTask.Result : DoAfterStatus.Running;
@@ -63,11 +62,6 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
AsTask = Tcs.Task;
}
public void HandleDamage(DamageChangedEventArgs args)
{
_tookDamage = true;
}
public void Run(float frameTime)
{
switch (Status)
@@ -130,7 +124,7 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
return true;
}
if (EventArgs.BreakOnDamage && _tookDamage)
if (EventArgs.BreakOnDamage && TookDamage)
{
return true;
}

View File

@@ -4,7 +4,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Content.Server.GameObjects.Components;
using Content.Shared.GameObjects.Components.Damage;
using JetBrains.Annotations;
using Robust.Shared.GameObjects.Systems;
@@ -68,21 +67,9 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
// Caller's gonna be responsible for this I guess
var doAfterComponent = eventArgs.User.GetComponent<DoAfterComponent>();
doAfterComponent.Add(doAfter);
IDamageableComponent? damageableComponent = null;
// TODO: If the component's deleted this may not get unsubscribed?
if (eventArgs.BreakOnDamage && eventArgs.User.TryGetComponent(out damageableComponent))
{
damageableComponent.HealthChangedEvent += doAfter.HandleDamage;
}
await doAfter.AsTask;
if (damageableComponent != null)
{
damageableComponent.HealthChangedEvent -= doAfter.HandleDamage;
}
return doAfter.Status;
}
}