DoAfter Refactor (#13225)
Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user