using Cirno.Scripts.Actors;
using Godot;

namespace Cirno.Scripts.Resources.Modifiers;

[GlobalClass] 
[Tool]
public partial class DelayedSpeedIncreaseModifier : TimeModifier
{
    
    [Export] public Tween.TransitionType TransitionType { get; set; } = Tween.TransitionType.Linear;
    [Export] public Tween.EaseType EaseType { get; set; } = Tween.EaseType.InOut;
    
    [Export] public float Duration { get; set; } = 1.0f;
    
    public override void Update(Bullet bullet, double delta, double elapsed)
    {
        float easedValue = ApplyEasing(Value, elapsed);
        bullet.Speed += easedValue;
    } 
    
    private float ApplyEasing(float value, double time)
    {
        float t = Mathf.Clamp((float)time, 0f, 1f); // Ensure the value stays within range
        return (float)Tween.InterpolateValue(0f, value, t, Duration, TransitionType, EaseType);
    }
}