132 lines
6.6 KiB
C#
132 lines
6.6 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace Syntriax.Engine.Core.Abstract;
|
|
|
|
/// <summary>
|
|
/// Represents an <see cref="IEntity"/> that can enter and exit a hierarchy within the <see cref="IGameManager"/> system.
|
|
/// This interface allows for tracking the object's presence in the hierarchy and provides events
|
|
/// for notifying when the see enters or exits the hierarchy.
|
|
/// </summary>
|
|
public interface IHierarchyObject : IEntity, INameable, IHasBehaviourController, IEnumerable<IHierarchyObject>
|
|
{
|
|
/// <summary>
|
|
/// Event triggered when the <see cref="IHierarchyObject"/> enters the hierarchy.
|
|
/// </summary>
|
|
event OnEnteredHierarchyEventHandler? OnEnteredHierarchy;
|
|
|
|
/// <summary>
|
|
/// Event triggered when the <see cref="IHierarchyObject"/> exits the hierarchy.
|
|
/// </summary>
|
|
event OnExitedHierarchyEventHandler? OnExitedHierarchy;
|
|
|
|
/// <summary>
|
|
/// Event triggered when the <see cref="Parent"/> of the <see cref="IHierarchyObject"/> changes. The second parameter is the old <see cref="IHierarchyObject"/>.
|
|
/// </summary>
|
|
event OnParentChangedEventHandler? OnParentChanged;
|
|
|
|
/// <summary>
|
|
/// Event triggered when a new <see cref="IHierarchyObject"/> is added to the <see cref="Children"/>.
|
|
/// </summary>
|
|
event OnChildrenAddedEventHandler? OnChildrenAdded;
|
|
|
|
/// <summary>
|
|
/// Event triggered when an <see cref="IHierarchyObject"/> is removed from the <see cref="Children"/>.
|
|
/// </summary>
|
|
event OnChildrenRemovedEventHandler? OnChildrenRemoved;
|
|
|
|
/// <summary>
|
|
/// Gets the <see cref="IGameManager"/> this <see cref="IHierarchyObject"/> is connected to, if any.
|
|
/// </summary>
|
|
IGameManager GameManager { get; }
|
|
|
|
/// <summary>
|
|
/// Indicates whether the <see cref="IHierarchyObject"/> is currently in the hierarchy.
|
|
/// </summary>
|
|
bool IsInHierarchy { get; }
|
|
|
|
/// <summary>
|
|
/// The parent <see cref="IHierarchyObject"/> of the <see cref="IHierarchyObject"/>.
|
|
/// </summary>
|
|
IHierarchyObject? Parent { get; }
|
|
|
|
/// <summary>
|
|
/// The <see cref="IHierarchyObject"/>s that have this <see cref="IHierarchyObject"/> as their <see cref="Parent"/>.
|
|
/// </summary>
|
|
IReadOnlyList<IHierarchyObject> Children { get; }
|
|
|
|
/// <summary>
|
|
/// Internal method to handle entering the hierarchy.
|
|
/// This should be called by the system to properly manage hierarchy states.
|
|
/// </summary>
|
|
/// <param name="gameManager">The <see cref="IGameManager"/> that is managing this hierarchy.</param>
|
|
/// <returns>
|
|
/// <see cref="true"/> if the <see cref="IHierarchyObject"/> successfully entered the hierarchy;
|
|
/// <see cref="false"/> if it failed to do so.
|
|
/// </returns>
|
|
internal bool EnterHierarchy(IGameManager gameManager);
|
|
|
|
/// <summary>
|
|
/// Internal method to handle exiting the hierarchy.
|
|
/// This should be called by the system to properly manage hierarchy states.
|
|
/// </summary>
|
|
/// <returns>
|
|
/// <see cref="true"/> if the <see cref="IHierarchyObject"/> successfully exited the hierarchy;
|
|
/// <see cref="false"/> if it failed to do so.
|
|
/// </returns>
|
|
internal bool ExitHierarchy();
|
|
|
|
/// <summary>
|
|
/// Sets the parent <see cref="IHierarchyObject"/> of this <see cref="IHierarchyObject"/>.
|
|
/// </summary>
|
|
/// <param name="hierarchyObject">The parent <see cref="IHierarchyObject"/> to set.</param>
|
|
void SetParent(IHierarchyObject? hierarchyObject);
|
|
|
|
/// <summary>
|
|
/// Adds a child <see cref="IHierarchyObject"/> to this <see cref="IHierarchyObject"/>.
|
|
/// </summary>
|
|
/// <param name="hierarchyObject">The child <see cref="IHierarchyObject"/> to add.</param>
|
|
void AddChild(IHierarchyObject hierarchyObject);
|
|
|
|
/// <summary>
|
|
/// Removes a child <see cref="IHierarchyObject"/> from this <see cref="IHierarchyObject"/>.
|
|
/// </summary>
|
|
/// <param name="hierarchyObject">The child <see cref="IHierarchyObject"/> to remove.</param>
|
|
void RemoveChild(IHierarchyObject hierarchyObject);
|
|
|
|
/// <summary>
|
|
/// EventHandler delegate for the event triggered when the <see cref="IHierarchyObject"/> enters the hierarchy of a <see cref="IGameManager">.
|
|
/// </summary>
|
|
/// <param name="sender">The <see cref="IHierarchyObject"/> that entered the hierarchy.</param>
|
|
/// <param name="gameManager">The <see cref="IGameManager"/> that the <see cref="IHierarchyObject"/> has entered it's hierarchy.</param>
|
|
delegate void OnEnteredHierarchyEventHandler(IHierarchyObject sender, IGameManager gameManager);
|
|
|
|
/// <summary>
|
|
/// EventHandler delegate for the event triggered when the <see cref="IHierarchyObject"/> exits the hierarchy of a <see cref="IGameManager">.
|
|
/// </summary>
|
|
/// <param name="sender">The <see cref="IHierarchyObject"/> that exited the hierarchy.</param>
|
|
/// <param name="gameManager">The <see cref="IGameManager"/> that the <see cref="IHierarchyObject"/> has exited it's hierarchy.</param>
|
|
delegate void OnExitedHierarchyEventHandler(IHierarchyObject sender, IGameManager gameManager);
|
|
|
|
/// <summary>
|
|
/// Delegate for the event triggered when the <see cref="IHierarchyObject"/>'s parent changes.
|
|
/// </summary>
|
|
/// <param name="sender">The <see cref="IHierarchyObject"/> that the parent has changed.</param>
|
|
/// <param name="previousParent">The previous <see cref="IHierarchyObject"/> the sender was a child of.</param>
|
|
/// <param name="newParent">The new and current <see cref="IHierarchyObject"/> the sender is a child of.</param>
|
|
delegate void OnParentChangedEventHandler(IHierarchyObject sender, IHierarchyObject? previousParent, IHierarchyObject? newParent);
|
|
|
|
/// <summary>
|
|
/// Delegate for the event triggered when a new <see cref="IHierarchyObject"/> added as a child.
|
|
/// </summary>
|
|
/// <param name="sender">The parent <see cref="IHierarchyObject"/> this event is being called from.</param>
|
|
/// <param name="childrenAdded">The <see cref="IHierarchyObject"/> that got removed as a children of the sender <see cref="IHierarchyObject"/>.</param>
|
|
delegate void OnChildrenAddedEventHandler(IHierarchyObject sender, IHierarchyObject childrenAdded);
|
|
|
|
/// <summary>
|
|
/// Delegate for the event triggered when a new <see cref="IHierarchyObject"/> removed from being a child.
|
|
/// </summary>
|
|
/// <param name="sender">The parent <see cref="IHierarchyObject"/> this event is being called from.</param>
|
|
/// <param name="childrenAdded">The <see cref="IHierarchyObject"/> that got removed as a children of the sender <see cref="IHierarchyObject"/>.</param>
|
|
delegate void OnChildrenRemovedEventHandler(IHierarchyObject sender, IHierarchyObject childrenRemoved);
|
|
}
|