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 } }