Files
crystall-punk-14/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.InstantActions.cs

85 lines
2.9 KiB
C#

using Content.Shared._CP14.MagicSpell.Components;
using Content.Shared._CP14.MagicSpell.Events;
using Content.Shared._CP14.MagicSpell.Spells;
namespace Content.Shared._CP14.MagicSpell;
public abstract partial class CP14SharedMagicSystem
{
private void InitializeInstantActions()
{
SubscribeLocalEvent<CP14InstantActionEvent>(OnMagicInstantAction);
SubscribeLocalEvent<CP14EntityWorldTargetActionEvent>(OnMagicEntityWorldTargetAction);
SubscribeLocalEvent<CP14WorldTargetActionEvent>(OnMagicWorldTargetAction);
SubscribeLocalEvent<CP14EntityTargetActionEvent>(OnMagicEntityTargetAction);
}
private void OnMagicInstantAction(CP14InstantActionEvent args)
{
if (args.Handled)
return;
if (!TryComp<CP14MagicEffectComponent>(args.Action, out var magicEffect))
return;
var spellArgs = new CP14SpellEffectBaseArgs(args.Performer, magicEffect.SpellStorage, args.Performer, Transform(args.Performer).Coordinates);
if (!CanCastSpell((args.Action, magicEffect), spellArgs))
return;
CastSpell((args.Action, magicEffect), spellArgs);
_action.SetCooldown(args.Action.Owner, args.Cooldown);
}
private void OnMagicEntityWorldTargetAction(CP14EntityWorldTargetActionEvent args)
{
if (args.Handled)
return;
if (!TryComp<CP14MagicEffectComponent>(args.Action, out var magicEffect))
return;
var spellArgs = new CP14SpellEffectBaseArgs(args.Performer, magicEffect.SpellStorage, args.Entity, args.Target);
if (!CanCastSpell((args.Action, magicEffect), spellArgs))
return;
CastSpell((args.Action, magicEffect), spellArgs);
_action.SetCooldown(args.Action.Owner, args.Cooldown);
}
private void OnMagicWorldTargetAction(CP14WorldTargetActionEvent args)
{
if (args.Handled)
return;
if (!TryComp<CP14MagicEffectComponent>(args.Action, out var magicEffect))
return;
var spellArgs = new CP14SpellEffectBaseArgs(args.Performer, magicEffect.SpellStorage, null, args.Target);
if (!CanCastSpell((args.Action, magicEffect), spellArgs))
return;
CastSpell((args.Action, magicEffect), spellArgs);
_action.CP14StartCustomDelay(args.Action, args.Cooldown);
}
private void OnMagicEntityTargetAction(CP14EntityTargetActionEvent args)
{
if (args.Handled)
return;
if (!TryComp<CP14MagicEffectComponent>(args.Action, out var magicEffect))
return;
var spellArgs = new CP14SpellEffectBaseArgs(args.Performer, magicEffect.SpellStorage, args.Target, Transform(args.Target).Coordinates);
if (!CanCastSpell((args.Action, magicEffect), spellArgs))
return;
CastSpell((args.Action, magicEffect), spellArgs);
_action.SetCooldown(args.Action.Owner, args.Cooldown);
}
}