Syntriax.Engine/Engine.Core/Abstract/IBehaviourController.cs

104 lines
4.5 KiB
C#
Raw Normal View History

2023-11-23 22:07:49 +03:00
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
namespace Syntriax.Engine.Core.Abstract;
/// <summary>
2024-02-01 12:14:53 +03:00
/// Represents a controller for managing <see cref="IBehaviour"/>s and notify them accordingly about the engine's updates. Connected to an <see cref="IGameObject"/>.
2023-11-23 22:07:49 +03:00
/// </summary>
public interface IBehaviourController : IInitialize, IAssignableGameObject, IEnumerable<IBehaviour>
2023-11-23 22:07:49 +03:00
{
/// <summary>
2024-02-01 12:14:53 +03:00
/// Event triggered before the update of <see cref="IBehaviour"/>s.
/// </summary>
event OnPreUpdateEventHandler? OnPreUpdate;
2024-02-01 12:14:53 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Event triggered during the update of <see cref="IBehaviour"/>s.
2023-11-23 22:07:49 +03:00
/// </summary>
event OnUpdateEventHandler? OnUpdate;
2023-11-23 22:07:49 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Event triggered before the drawing phase.
2023-11-23 22:07:49 +03:00
/// </summary>
event OnPreDrawEventHandler? OnPreDraw;
2023-11-23 22:07:49 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Event triggered when a <see cref="IBehaviour"/> is added to the <see cref="IBehaviourController"/>.
2023-11-23 22:07:49 +03:00
/// </summary>
event OnBehaviourAddedEventHandler? OnBehaviourAdded;
2023-11-23 22:07:49 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Event triggered when a <see cref="IBehaviour"/> is removed from the <see cref="IBehaviourController"/>.
2023-11-23 22:07:49 +03:00
/// </summary>
event OnBehaviourRemovedEventHandler? OnBehaviourRemoved;
2023-11-23 22:07:49 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Adds a <see cref="IBehaviour"/> to the <see cref="IBehaviourController"/>.
2023-11-23 22:07:49 +03:00
/// </summary>
2024-02-01 12:14:53 +03:00
/// <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>
2023-11-23 22:07:49 +03:00
T AddBehaviour<T>(T behaviour) where T : class, IBehaviour;
/// <summary>
2024-02-01 12:14:53 +03:00
/// Adds a <see cref="IBehaviour"/> of the specified type to the <see cref="IBehaviourController"/>.
2023-11-23 22:07:49 +03:00
/// </summary>
2024-02-01 12:14:53 +03:00
/// <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>
2023-11-23 22:07:49 +03:00
T AddBehaviour<T>(params object?[]? args) where T : class, IBehaviour;
/// <summary>
2024-02-01 12:14:53 +03:00
/// Gets a <see cref="IBehaviour"/> of the specified type.
/// </summary>
2024-02-01 12:14:53 +03:00
/// <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>();
2024-02-01 12:14:53 +03:00
/// <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>();
2023-11-23 22:07:49 +03:00
2024-02-01 12:14:53 +03:00
/// <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>
2024-11-13 15:30:22 +03:00
/// <param name="results">The list to store the <see cref="IBehaviour"/>s.</param>
void GetBehaviours<T>(IList<T> results);
2023-11-23 22:07:49 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Removes <see cref="IBehaviour"/>s of the specified type from the <see cref="IBehaviourController"/>.
2023-11-23 22:07:49 +03:00
/// </summary>
2024-02-01 12:14:53 +03:00
/// <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;
2023-11-23 22:07:49 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Removes the specified <see cref="IBehaviour"/> from the <see cref="IBehaviourController"/>.
/// </summary>
2024-02-01 12:14:53 +03:00
/// <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;
2023-11-23 22:07:49 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Updates all <see cref="IBehaviour"/>s in the <see cref="IBehaviourController"/>.
2023-11-23 22:07:49 +03:00
/// </summary>
void Update();
2023-11-23 22:07:49 +03:00
/// <summary>
2024-02-01 12:14:53 +03:00
/// Performs pre-draw operations.
2023-11-23 22:07:49 +03:00
/// </summary>
void UpdatePreDraw();
2024-07-15 01:13:39 +03:00
delegate void OnPreUpdateEventHandler(IBehaviourController sender);
delegate void OnUpdateEventHandler(IBehaviourController sender);
delegate void OnPreDrawEventHandler(IBehaviourController sender);
delegate void OnBehaviourAddedEventHandler(IBehaviourController sender, IBehaviour behaviourAdded);
delegate void OnBehaviourRemovedEventHandler(IBehaviourController sender, IBehaviour behaviourRemoved);
2024-07-15 01:13:39 +03:00
2023-11-23 22:07:49 +03:00
}