refactor!: renamed GameManager to Universe and HierarchyObject to UniverseObject
This commit is contained in:
@@ -1,26 +0,0 @@
|
||||
namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="ITransform2D"/> field.
|
||||
/// </summary>
|
||||
public interface IHasGameManager : IAssignable
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IGameManager"/> value has has been assigned a new value.
|
||||
/// </summary>
|
||||
event GameManagerAssignedEventHandler? OnGameManagerAssigned;
|
||||
|
||||
/// <inheritdoc cref="IGameManager" />
|
||||
IGameManager GameManager { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Assign a value to the <see cref="IGameManager"/> field of this object.
|
||||
/// </summary>
|
||||
/// <param name="gameManager">New <see cref="IGameManager"/> to assign.</param>
|
||||
/// <returns>
|
||||
/// <see cref="true"/>, if the value given assigned successfully assigned, <see cref="false"/> if not.
|
||||
/// </returns>
|
||||
bool Assign(IGameManager gameManager);
|
||||
|
||||
delegate void GameManagerAssignedEventHandler(IHasGameManager sender);
|
||||
}
|
@@ -1,26 +0,0 @@
|
||||
namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IHierarchyObject"/> field.
|
||||
/// </summary>
|
||||
public interface IHasHierarchyObject : IAssignable
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IHierarchyObject"/> value has has been assigned a new value.
|
||||
/// </summary>
|
||||
event HierarchyObjectAssignedEventHandler? OnHierarchyObjectAssigned;
|
||||
|
||||
/// <inheritdoc cref="IHierarchyObject" />
|
||||
IHierarchyObject HierarchyObject { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Assign a value to the <see cref="IHierarchyObject"/> field of this object.
|
||||
/// </summary>
|
||||
/// <param name="hierarchyObject">New <see cref="IHierarchyObject"/> to assign.</param>
|
||||
/// <returns>
|
||||
/// <see cref="true"/>, if the value given assigned successfully assigned, <see cref="false"/> if not.
|
||||
/// </returns>
|
||||
bool Assign(IHierarchyObject hierarchyObject);
|
||||
|
||||
delegate void HierarchyObjectAssignedEventHandler(IHasHierarchyObject sender);
|
||||
}
|
26
Engine.Core/Abstract/Assignable/IHasUniverse.cs
Normal file
26
Engine.Core/Abstract/Assignable/IHasUniverse.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IUniverse"/> field.
|
||||
/// </summary>
|
||||
public interface IHasUniverse : IAssignable
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IUniverse"/> value has has been assigned a new value.
|
||||
/// </summary>
|
||||
event UniverseAssignedEventHandler? OnUniverseAssigned;
|
||||
|
||||
/// <inheritdoc cref="IUniverse" />
|
||||
IUniverse Universe { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Assign a value to the <see cref="IUniverse"/> field of this object.
|
||||
/// </summary>
|
||||
/// <param name="universe">New <see cref="IUniverse"/> to assign.</param>
|
||||
/// <returns>
|
||||
/// <see cref="true"/>, if the value given assigned successfully assigned, <see cref="false"/> if not.
|
||||
/// </returns>
|
||||
bool Assign(IUniverse universe);
|
||||
|
||||
delegate void UniverseAssignedEventHandler(IHasUniverse sender);
|
||||
}
|
26
Engine.Core/Abstract/Assignable/IHasUniverseObject.cs
Normal file
26
Engine.Core/Abstract/Assignable/IHasUniverseObject.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IUniverseObject"/> field.
|
||||
/// </summary>
|
||||
public interface IHasUniverseObject : IAssignable
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IUniverseObject"/> value has has been assigned a new value.
|
||||
/// </summary>
|
||||
event UniverseObjectAssignedEventHandler? OnUniverseObjectAssigned;
|
||||
|
||||
/// <inheritdoc cref="IUniverseObject" />
|
||||
IUniverseObject UniverseObject { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Assign a value to the <see cref="IUniverseObject"/> field of this object.
|
||||
/// </summary>
|
||||
/// <param name="universeObject">New <see cref="IUniverseObject"/> to assign.</param>
|
||||
/// <returns>
|
||||
/// <see cref="true"/>, if the value given assigned successfully assigned, <see cref="false"/> if not.
|
||||
/// </returns>
|
||||
bool Assign(IUniverseObject universeObject);
|
||||
|
||||
delegate void UniverseObjectAssignedEventHandler(IHasUniverseObject sender);
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a behaviour that any object in the game might use to interact with itself or other objects.
|
||||
/// Represents a behaviour that any object in the engine that might use to interact with itself or other objects.
|
||||
/// </summary>
|
||||
public interface IBehaviour : IEntity, IActive, IHasBehaviourController, IHasStateEnable
|
||||
{
|
||||
|
@@ -4,10 +4,10 @@ namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a collector for the class type of <typeparamref name="T"/>.
|
||||
/// Provides mechanisms for tracking additions and removals, and notifies subscribers when such events occur on the assigned <see cref="IGameManager"/>.
|
||||
/// Provides mechanisms for tracking additions and removals, and notifies subscribers when such events occur on the assigned <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of objects tracked by the collector.</typeparam>
|
||||
public interface IBehaviourCollector<T> : IHasGameManager, IEnumerable<T> where T : class
|
||||
public interface IBehaviourCollector<T> : IHasUniverse, IEnumerable<T> where T : class
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when an object of type <typeparamref name="T"/> is added to the collector.
|
||||
|
@@ -3,9 +3,9 @@ using System.Collections.Generic;
|
||||
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="IHierarchyObject"/>.
|
||||
/// Represents a controller for managing <see cref="IBehaviour"/>s and notify them accordingly about the engine's updates. Connected to an <see cref="IUniverseObject"/>.
|
||||
/// </summary>
|
||||
public interface IBehaviourController : IInitializable, IHasHierarchyObject, IEnumerable<IBehaviour>
|
||||
public interface IBehaviourController : IInitializable, IHasUniverseObject, IEnumerable<IBehaviour>
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered before the update of <see cref="IBehaviour"/>s.
|
||||
|
@@ -1,91 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a game world responsible for managing <see cref="IHierarchyObject"/>s.
|
||||
/// </summary>
|
||||
public interface IGameManager : IEntity, IEnumerable<IHierarchyObject>
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when <see cref="Update(EngineTime)"/> is about to be called called on the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
event UpdateEventHandler? OnPreUpdate;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when <see cref="Update(EngineTime)"/> is called on the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
event UpdateEventHandler? OnUpdate;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when <see cref="PreDraw"/> is called on the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
event PreDrawEventHandler? OnPreDraw;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when a <see cref="IHierarchyObject"/> is registered to the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
event HierarchyObjectRegisteredEventHandler? OnHierarchyObjectRegistered;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when a <see cref="IHierarchyObject"/> is unregistered from the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
event HierarchyObjectUnRegisteredEventHandler? OnHierarchyObjectUnRegistered;
|
||||
|
||||
/// <summary>
|
||||
/// Current time scale the <see cref="IGameManager"/> operates on.
|
||||
/// </summary>
|
||||
float TimeScale { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Contains time data related to this <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
EngineTime Time { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Contains unscaled time data related to this <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
EngineTime UnscaledTime { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a read-only list of <see cref="IHierarchyObject"/>s managed by the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
IReadOnlyList<IHierarchyObject> HierarchyObjects { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Registers an <see cref="IHierarchyObject"/> to the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
/// <param name="hierarchyObject">The <see cref="IHierarchyObject"/> to register.</param>
|
||||
void Register(IHierarchyObject hierarchyObject);
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a <see cref="IHierarchyObject"/> of type T with the given arguments and registers it to the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of <see cref="IHierarchyObject"/> to instantiate.</typeparam>
|
||||
/// <param name="args">Constructor parameters for the given type of <see cref="IHierarchyObject"/>.</param>
|
||||
/// <returns>The instantiated <see cref="IHierarchyObject"/>.</returns>
|
||||
T InstantiateHierarchyObject<T>(params object?[]? args) where T : class, IHierarchyObject;
|
||||
|
||||
/// <summary>
|
||||
/// Removes an <see cref="IHierarchyObject"/> from the <see cref="IGameManager"/>.
|
||||
/// </summary>
|
||||
/// <param name="hierarchyObject">The <see cref="IHierarchyObject"/> to remove.</param>
|
||||
void Remove(IHierarchyObject hierarchyObject);
|
||||
|
||||
/// <summary>
|
||||
/// Updates the <see cref="IGameManager"/> with the given delta time.
|
||||
/// </summary>
|
||||
/// <param name="engineTime">Delta time.</param>
|
||||
void Update(EngineTime engineTime);
|
||||
|
||||
/// <summary>
|
||||
/// Performs operations that should be done before the draw calls.
|
||||
/// </summary>
|
||||
void PreDraw();
|
||||
|
||||
delegate void UpdateEventHandler(IGameManager sender, EngineTime engineTime);
|
||||
delegate void PreDrawEventHandler(IGameManager sender);
|
||||
|
||||
delegate void HierarchyObjectRegisteredEventHandler(IGameManager sender, IHierarchyObject hierarchyObjectRegistered);
|
||||
delegate void HierarchyObjectUnRegisteredEventHandler(IGameManager sender, IHierarchyObject hierarchyObjectUnregistered);
|
||||
}
|
@@ -1,131 +0,0 @@
|
||||
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, IActive, INameable, IHasBehaviourController, IEnumerable<IHierarchyObject>
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IHierarchyObject"/> enters the hierarchy.
|
||||
/// </summary>
|
||||
event EnteredHierarchyEventHandler? OnEnteredHierarchy;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IHierarchyObject"/> exits the hierarchy.
|
||||
/// </summary>
|
||||
event ExitedHierarchyEventHandler? 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 ParentChangedEventHandler? OnParentChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when a new <see cref="IHierarchyObject"/> is added to the <see cref="Children"/>.
|
||||
/// </summary>
|
||||
event ChildrenAddedEventHandler? OnChildrenAdded;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when an <see cref="IHierarchyObject"/> is removed from the <see cref="Children"/>.
|
||||
/// </summary>
|
||||
event ChildrenRemovedEventHandler? 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 EnteredHierarchyEventHandler(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 ExitedHierarchyEventHandler(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 ParentChangedEventHandler(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 ChildrenAddedEventHandler(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 ChildrenRemovedEventHandler(IHierarchyObject sender, IHierarchyObject childrenRemoved);
|
||||
}
|
91
Engine.Core/Abstract/IUniverse.cs
Normal file
91
Engine.Core/Abstract/IUniverse.cs
Normal file
@@ -0,0 +1,91 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a universe responsible for managing <see cref="IUniverseObject"/>s.
|
||||
/// </summary>
|
||||
public interface IUniverse : IEntity, IEnumerable<IUniverseObject>
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when <see cref="Update(UniverseTime)"/> is about to be called called on the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
event UpdateEventHandler? OnPreUpdate;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when <see cref="Update(UniverseTime)"/> is called on the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
event UpdateEventHandler? OnUpdate;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when <see cref="PreDraw"/> is called on the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
event PreDrawEventHandler? OnPreDraw;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when a <see cref="IUniverseObject"/> is registered to the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
event UniverseObjectRegisteredEventHandler? OnUniverseObjectRegistered;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when a <see cref="IUniverseObject"/> is unregistered from the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
event UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered;
|
||||
|
||||
/// <summary>
|
||||
/// Current time scale the <see cref="IUniverse"/> operates on.
|
||||
/// </summary>
|
||||
float TimeScale { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Contains time data related to this <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
UniverseTime Time { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Contains unscaled time data related to this <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
UniverseTime UnscaledTime { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a read-only list of <see cref="IUniverseObject"/>s managed by the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
IReadOnlyList<IUniverseObject> UniverseObjects { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Registers an <see cref="IUniverseObject"/> to the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
/// <param name="universeObject">The <see cref="IUniverseObject"/> to register.</param>
|
||||
void Register(IUniverseObject universeObject);
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a <see cref="IUniverseObject"/> of type T with the given arguments and registers it to the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of <see cref="IUniverseObject"/> to instantiate.</typeparam>
|
||||
/// <param name="args">Constructor parameters for the given type of <see cref="IUniverseObject"/>.</param>
|
||||
/// <returns>The instantiated <see cref="IUniverseObject"/>.</returns>
|
||||
T InstantiateUniverseObject<T>(params object?[]? args) where T : class, IUniverseObject;
|
||||
|
||||
/// <summary>
|
||||
/// Removes an <see cref="IUniverseObject"/> from the <see cref="IUniverse"/>.
|
||||
/// </summary>
|
||||
/// <param name="universeObject">The <see cref="IUniverseObject"/> to remove.</param>
|
||||
void Remove(IUniverseObject universeObject);
|
||||
|
||||
/// <summary>
|
||||
/// Updates the <see cref="IUniverse"/> with the given delta time.
|
||||
/// </summary>
|
||||
/// <param name="universeTime">Delta time.</param>
|
||||
void Update(UniverseTime universeTime);
|
||||
|
||||
/// <summary>
|
||||
/// Performs operations that should be done before the draw calls.
|
||||
/// </summary>
|
||||
void PreDraw();
|
||||
|
||||
delegate void UpdateEventHandler(IUniverse sender, UniverseTime engineTime);
|
||||
delegate void PreDrawEventHandler(IUniverse sender);
|
||||
|
||||
delegate void UniverseObjectRegisteredEventHandler(IUniverse sender, IUniverseObject universeObjectRegistered);
|
||||
delegate void UniverseObjectUnRegisteredEventHandler(IUniverse sender, IUniverseObject universeObjectUnregistered);
|
||||
}
|
131
Engine.Core/Abstract/IUniverseObject.cs
Normal file
131
Engine.Core/Abstract/IUniverseObject.cs
Normal file
@@ -0,0 +1,131 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Syntriax.Engine.Core.Abstract;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an <see cref="IEntity"/> that can enter and exit a universe within the <see cref="IUniverse"/> system.
|
||||
/// This interface allows for tracking the object's presence in the universe and provides events
|
||||
/// for notifying when the see enters or exits the universe.
|
||||
/// </summary>
|
||||
public interface IUniverseObject : IEntity, IActive, INameable, IHasBehaviourController, IEnumerable<IUniverseObject>
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IUniverseObject"/> enters the universe.
|
||||
/// </summary>
|
||||
event EnteredUniverseEventHandler? OnEnteredUniverse;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IUniverseObject"/> exits the universe.
|
||||
/// </summary>
|
||||
event ExitedUniverseEventHandler? OnExitedUniverse;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="Parent"/> of the <see cref="IUniverseObject"/> changes. The second parameter is the old <see cref="IUniverseObject"/>.
|
||||
/// </summary>
|
||||
event ParentChangedEventHandler? OnParentChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when a new <see cref="IUniverseObject"/> is added to the <see cref="Children"/>.
|
||||
/// </summary>
|
||||
event ChildrenAddedEventHandler? OnChildrenAdded;
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when an <see cref="IUniverseObject"/> is removed from the <see cref="Children"/>.
|
||||
/// </summary>
|
||||
event ChildrenRemovedEventHandler? OnChildrenRemoved;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="IUniverse"/> this <see cref="IUniverseObject"/> is connected to, if any.
|
||||
/// </summary>
|
||||
IUniverse Universe { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates whether the <see cref="IUniverseObject"/> is currently in the universe.
|
||||
/// </summary>
|
||||
bool IsInUniverse { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The parent <see cref="IUniverseObject"/> of the <see cref="IUniverseObject"/>.
|
||||
/// </summary>
|
||||
IUniverseObject? Parent { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="IUniverseObject"/>s that have this <see cref="IUniverseObject"/> as their <see cref="Parent"/>.
|
||||
/// </summary>
|
||||
IReadOnlyList<IUniverseObject> Children { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Internal method to handle entering the universe.
|
||||
/// This should be called by the system to properly manage universe states.
|
||||
/// </summary>
|
||||
/// <param name="universe">The <see cref="IUniverse"/> that is managing this universe.</param>
|
||||
/// <returns>
|
||||
/// <see cref="true"/> if the <see cref="IUniverseObject"/> successfully entered the universe;
|
||||
/// <see cref="false"/> if it failed to do so.
|
||||
/// </returns>
|
||||
internal bool EnterUniverse(IUniverse universe);
|
||||
|
||||
/// <summary>
|
||||
/// Internal method to handle exiting the universe.
|
||||
/// This should be called by the system to properly manage universe states.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// <see cref="true"/> if the <see cref="IUniverseObject"/> successfully exited the universe;
|
||||
/// <see cref="false"/> if it failed to do so.
|
||||
/// </returns>
|
||||
internal bool ExitUniverse();
|
||||
|
||||
/// <summary>
|
||||
/// Sets the parent <see cref="IUniverseObject"/> of this <see cref="IUniverseObject"/>.
|
||||
/// </summary>
|
||||
/// <param name="universeObject">The parent <see cref="IUniverseObject"/> to set.</param>
|
||||
void SetParent(IUniverseObject? universeObject);
|
||||
|
||||
/// <summary>
|
||||
/// Adds a child <see cref="IUniverseObject"/> to this <see cref="IUniverseObject"/>.
|
||||
/// </summary>
|
||||
/// <param name="universeObject">The child <see cref="IUniverseObject"/> to add.</param>
|
||||
void AddChild(IUniverseObject universeObject);
|
||||
|
||||
/// <summary>
|
||||
/// Removes a child <see cref="IUniverseObject"/> from this <see cref="IUniverseObject"/>.
|
||||
/// </summary>
|
||||
/// <param name="universeObject">The child <see cref="IUniverseObject"/> to remove.</param>
|
||||
void RemoveChild(IUniverseObject universeObject);
|
||||
|
||||
/// <summary>
|
||||
/// EventHandler delegate for the event triggered when the <see cref="IUniverseObject"/> enters the universe of a <see cref="IUniverse">.
|
||||
/// </summary>
|
||||
/// <param name="sender">The <see cref="IUniverseObject"/> that entered the universe.</param>
|
||||
/// <param name="universe">The <see cref="IUniverse"/> that the <see cref="IUniverseObject"/> has entered it's universe.</param>
|
||||
delegate void EnteredUniverseEventHandler(IUniverseObject sender, IUniverse universe);
|
||||
|
||||
/// <summary>
|
||||
/// EventHandler delegate for the event triggered when the <see cref="IUniverseObject"/> exits the universe of a <see cref="IUniverse">.
|
||||
/// </summary>
|
||||
/// <param name="sender">The <see cref="IUniverseObject"/> that exited the universe.</param>
|
||||
/// <param name="universe">The <see cref="IUniverse"/> that the <see cref="IUniverseObject"/> has exited it's universe.</param>
|
||||
delegate void ExitedUniverseEventHandler(IUniverseObject sender, IUniverse universe);
|
||||
|
||||
/// <summary>
|
||||
/// Delegate for the event triggered when the <see cref="IUniverseObject"/>'s parent changes.
|
||||
/// </summary>
|
||||
/// <param name="sender">The <see cref="IUniverseObject"/> that the parent has changed.</param>
|
||||
/// <param name="previousParent">The previous <see cref="IUniverseObject"/> the sender was a child of.</param>
|
||||
/// <param name="newParent">The new and current <see cref="IUniverseObject"/> the sender is a child of.</param>
|
||||
delegate void ParentChangedEventHandler(IUniverseObject sender, IUniverseObject? previousParent, IUniverseObject? newParent);
|
||||
|
||||
/// <summary>
|
||||
/// Delegate for the event triggered when a new <see cref="IUniverseObject"/> added as a child.
|
||||
/// </summary>
|
||||
/// <param name="sender">The parent <see cref="IUniverseObject"/> this event is being called from.</param>
|
||||
/// <param name="childrenAdded">The <see cref="IUniverseObject"/> that got removed as a children of the sender <see cref="IUniverseObject"/>.</param>
|
||||
delegate void ChildrenAddedEventHandler(IUniverseObject sender, IUniverseObject childrenAdded);
|
||||
|
||||
/// <summary>
|
||||
/// Delegate for the event triggered when a new <see cref="IUniverseObject"/> removed from being a child.
|
||||
/// </summary>
|
||||
/// <param name="sender">The parent <see cref="IUniverseObject"/> this event is being called from.</param>
|
||||
/// <param name="childrenAdded">The <see cref="IUniverseObject"/> that got removed as a children of the sender <see cref="IUniverseObject"/>.</param>
|
||||
delegate void ChildrenRemovedEventHandler(IUniverseObject sender, IUniverseObject childrenRemoved);
|
||||
}
|
Reference in New Issue
Block a user