using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Framework.PlasmaStateSystem
{
    /// <summary>
    /// An object that can have a defined state, this is composed 
    /// of many <see cref="Statelike"/> objects. 
    /// </summary>
    public interface Statable
    {
        void SetInitialState(params Statelike[] state);

        /// <summary>
        /// Gets the state of this instance.
        /// </summary>
        /// <returns>The complete set of states that represents the state of this instance.</returns>
        Statelike[] GetState();

        /// <summary>
        /// Does the set of states of this current instance contain a specific state?
        /// </summary>
        /// <param name="state">The state to look for.</param>
        /// <returns>Whether or not the state exists within this instances current state.</returns>
        bool HasState(Statelike state);
    }
}
