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