using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace Syntriax.Engine.Core.Abstract; /// /// Represents a controller for managing s and notify them accordingly about the engine's updates. Connected to an . /// public interface IBehaviourController : IInitialize, IAssignableGameObject, IEnumerable { /// /// Event triggered before the update of s. /// event OnPreUpdateDelegate? OnPreUpdate; /// /// Event triggered during the update of s. /// event OnUpdateDelegate? OnUpdate; /// /// Event triggered before the drawing phase. /// event OnPreDrawDelegate? OnPreDraw; /// /// Event triggered when a is added to the . /// event OnBehaviourAddedDelegate? OnBehaviourAdded; /// /// Event triggered when a is removed from the . /// event OnBehaviourRemovedDelegate? OnBehaviourRemoved; /// /// Adds a to the . /// /// The type of to add. /// The to add. /// The added . T AddBehaviour(T behaviour) where T : class, IBehaviour; /// /// Adds a of the specified type to the . /// /// The type of to add. /// Construction parameters for the . /// The added . T AddBehaviour(params object?[]? args) where T : class, IBehaviour; /// /// Gets a of the specified type. /// /// The type of to get. /// The of the specified type if found; otherwise, . T? GetBehaviour(); /// /// Tries to get a of the specified type. /// /// The type of to get. /// When this method returns, contains the of the specified type, if found; otherwise, see. /// if a of the specified type was found; otherwise, . bool TryGetBehaviour([NotNullWhen(returnValue: true)] out T? behaviour); /// /// Gets all s of the specified type. /// /// The type of s to get. /// A list of s of the specified type. IList GetBehaviours(); /// /// Gets all s of the specified type and stores them in the provided list. /// /// The type of s to get. /// The list to store the s. void GetBehaviours(List behaviours); /// /// Removes s of the specified type from the . /// /// The type of s to remove. /// A flag indicating whether to remove all s of the specified type. void RemoveBehaviour(bool removeAll = false) where T : class, IBehaviour; /// /// Removes the specified from the . /// /// The type of to remove. /// The to remove. void RemoveBehaviour(T behaviour) where T : class, IBehaviour; /// /// Updates all s in the . /// void Update(); /// /// Performs pre-draw operations. /// void UpdatePreDraw(); delegate void OnPreUpdateDelegate(IBehaviourController sender); delegate void OnUpdateDelegate(IBehaviourController sender); delegate void OnPreDrawDelegate(IBehaviourController sender); delegate void OnBehaviourAddedDelegate(IBehaviourController sender, IBehaviour behaviourAdded); delegate void OnBehaviourRemovedDelegate(IBehaviourController sender, IBehaviour behaviourRemoved); }