DoAfter Refactor (#13225)

Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
This commit is contained in:
keronshb
2023-02-24 19:01:25 -05:00
committed by GitHub
parent 7a9baa79c2
commit 9ebb452a3c
129 changed files with 2624 additions and 4132 deletions

View File

@@ -9,6 +9,7 @@ using Content.Server.Weapons.Ranged.Systems;
using Content.Shared.Actions;
using Content.Shared.Actions.ActionTypes;
using Content.Shared.Body.Components;
using Content.Shared.DoAfter;
using Content.Shared.Doors.Components;
using Content.Shared.Doors.Systems;
using Content.Shared.Interaction.Events;
@@ -53,8 +54,7 @@ public sealed class MagicSystem : EntitySystem
SubscribeLocalEvent<SpellbookComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<SpellbookComponent, UseInHandEvent>(OnUse);
SubscribeLocalEvent<SpellbookComponent, LearnDoAfterComplete>(OnLearnComplete);
SubscribeLocalEvent<SpellbookComponent, LearnDoAfterCancel>(OnLearnCancel);
SubscribeLocalEvent<SpellbookComponent, DoAfterEvent>(OnDoAfter);
SubscribeLocalEvent<InstantSpawnSpellEvent>(OnInstantSpawn);
SubscribeLocalEvent<TeleportSpellEvent>(OnTeleportSpell);
@@ -65,6 +65,15 @@ public sealed class MagicSystem : EntitySystem
SubscribeLocalEvent<ChangeComponentsSpellEvent>(OnChangeComponentsSpell);
}
private void OnDoAfter(EntityUid uid, SpellbookComponent component, DoAfterEvent args)
{
if (args.Handled || args.Cancelled)
return;
_actionsSystem.AddActions(args.Args.User, component.Spells, uid);
args.Handled = true;
}
private void OnInit(EntityUid uid, SpellbookComponent component, ComponentInit args)
{
//Negative charges means the spell can be used without it running out.
@@ -102,35 +111,18 @@ public sealed class MagicSystem : EntitySystem
private void AttemptLearn(EntityUid uid, SpellbookComponent component, UseInHandEvent args)
{
if (component.CancelToken != null) return;
component.CancelToken = new CancellationTokenSource();
var doAfterEventArgs = new DoAfterEventArgs(args.User, component.LearnTime, component.CancelToken.Token, uid)
var doAfterEventArgs = new DoAfterEventArgs(args.User, component.LearnTime, target:uid)
{
BreakOnTargetMove = true,
BreakOnUserMove = true,
BreakOnDamage = true,
BreakOnStun = true,
NeedHand = true, //What, are you going to read with your eyes only??
TargetFinishedEvent = new LearnDoAfterComplete(args.User),
TargetCancelledEvent = new LearnDoAfterCancel(),
NeedHand = true //What, are you going to read with your eyes only??
};
_doAfter.DoAfter(doAfterEventArgs);
}
private void OnLearnComplete(EntityUid uid, SpellbookComponent component, LearnDoAfterComplete ev)
{
component.CancelToken = null;
_actionsSystem.AddActions(ev.User, component.Spells, uid);
}
private void OnLearnCancel(EntityUid uid, SpellbookComponent component, LearnDoAfterCancel args)
{
component.CancelToken = null;
}
#region Spells
/// <summary>
@@ -383,20 +375,4 @@ public sealed class MagicSystem : EntitySystem
}
#endregion
#region DoAfterClasses
private sealed class LearnDoAfterComplete : EntityEventArgs
{
public readonly EntityUid User;
public LearnDoAfterComplete(EntityUid uid)
{
User = uid;
}
}
private sealed class LearnDoAfterCancel : EntityEventArgs { }
#endregion
}