78 lines
2.3 KiB
C#
78 lines
2.3 KiB
C#
using Gamesmiths.Forge.Abilities;
|
|
using Gamesmiths.Forge.Effects;
|
|
using Gamesmiths.Forge.Effects.Components;
|
|
using Gamesmiths.Forge.Effects.Duration;
|
|
using Gamesmiths.Forge.Effects.Magnitudes;
|
|
using Gamesmiths.Forge.Effects.Modifiers;
|
|
using Gamesmiths.Forge.Tags;
|
|
using Godot;
|
|
|
|
namespace Movementtests.forge.abilities;
|
|
|
|
[GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_animation.png")]
|
|
public partial class REmpoweredAction(float cost, float cooldown, float manaRegenPause) : Resource
|
|
{
|
|
[Export(PropertyHint.Range, "0,100,1,or_greater")]
|
|
public float Cost { get; set; } = cost;
|
|
|
|
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
|
public float Cooldown { get; set; } = cooldown;
|
|
|
|
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
|
|
public float ManaRegenPause { get; set; } = manaRegenPause;
|
|
|
|
public REmpoweredAction() : this(20.0f, 1.0f, 3.0f)
|
|
{
|
|
}
|
|
|
|
public EffectData CostEffect()
|
|
{
|
|
return new(
|
|
"Empowered Action Mana Cost",
|
|
new DurationData(DurationType.Instant),
|
|
new[]
|
|
{
|
|
new Modifier(
|
|
"PlayerAttributeSet.Mana",
|
|
ModifierOperation.FlatBonus,
|
|
new ModifierMagnitude(
|
|
MagnitudeCalculationType.ScalableFloat,
|
|
new ScalableFloat(-Cost)
|
|
)
|
|
)
|
|
});
|
|
}
|
|
|
|
public EffectData CooldownEffect(TagsManager tagsManager)
|
|
{
|
|
return new(
|
|
"Empowered Action Cooldown",
|
|
new DurationData(
|
|
DurationType.HasDuration,
|
|
new ModifierMagnitude(
|
|
MagnitudeCalculationType.ScalableFloat,
|
|
new ScalableFloat(Cooldown))),
|
|
effectComponents: new[]
|
|
{
|
|
new ModifierTagsEffectComponent(
|
|
tagsManager.RequestTagContainer(new[] { "cooldown.empoweredAction" })
|
|
)
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
public class EmpoweredActionBehavior : IAbilityBehavior
|
|
{
|
|
public void OnStarted(AbilityBehaviorContext context)
|
|
{
|
|
// Apply costs and cooldowns
|
|
context.AbilityHandle.CommitAbility();
|
|
context.InstanceHandle.End();
|
|
}
|
|
|
|
public void OnEnded(AbilityBehaviorContext context)
|
|
{
|
|
// Do any necessary cleanups
|
|
}
|
|
} |