using UnityEngine;
using System;
using System.Collections.Generic;

namespace mgaia.Utils.StateMachine
{
    /// <summary>
    /// Estado abstrato, herde dessa classe para fazer estados por classe
    /// </summary>
    /// <owner>Victor</owner>
    public abstract class ObjectState<TOwner> : IState<TOwner>
    {
        private IStateMachine<TOwner> _mStateMachine;

        /// <summary>
        /// Retorna a instância da máquina da máquina de estados dona desse estado
        /// </summary>
        public IStateMachine<TOwner> StateMachine
        {
            get { return _mStateMachine; }
            internal set { _mStateMachine = value; }
        }

        public ObjectState(IStateMachine<TOwner> stateMachine)
        {
            _mStateMachine = stateMachine;
        }

        public void Run(TOwner owner)
        {
            RunState(owner);
        }

        /// <summary>
        /// Implemente esse método para rodar o estado
        /// </summary>
        public abstract void RunState(TOwner owner);
    }
}