namespace Syntriax.Engine.Core.Abstract;

/// <summary>
/// Represents a behaviour that any object in the game might use to interact with itself or other objects. 
/// </summary>
public interface IBehaviour : IEntity, IHasBehaviourController, IHasStateEnable
{
    /// <summary>
    /// Event triggered when the priority of the <see cref="IBehaviour"/> changes.
    /// </summary>
    event PriorityChangedEventHandler? OnPriorityChanged;

    /// <summary>
    /// The priority of the <see cref="IBehaviour"/>.
    /// </summary>
    int Priority { get; set; }

    /// <summary>
    /// The value indicating whether the <see cref="IBehaviour"/> is active.
    /// </summary>
    bool IsActive { get; }

    delegate void PriorityChangedEventHandler(IBehaviour sender, int previousPriority);
}