using System;
using UnityEngine;
using UnityEngine.Events;


namespace Gyvr.Mythril2D
{
    public abstract class GFXBase : MonoBehaviour
    {
        public UnityEvent OnStarted;
        public UnityEvent OnFinished;

            protected bool isRunning;

            /// <summary> Call to start the FX. Handles interrupt if running. </summary>
            public void Trigger()
            {
                if (isRunning)
                {
                    Interrupt();
                }

                isRunning = true;
                OnStarted?.Invoke();
                OnTrigger();
            }

            /// <summary> Interrupts the FX immediately. Must be implemented by derived classes. </summary>
            public abstract void Interrupt();

            /// <summary> Derived FX logic. </summary>
            protected abstract void OnTrigger();

            /// <summary> Call this when the FX ends naturally. </summary>
            protected void Finish()
            {
                isRunning = false;
                OnFinished?.Invoke();
            }
        }
    }