111 lines
4.4 KiB
C#
111 lines
4.4 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace Syntriax.Engine.Core;
|
|
|
|
/// <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<IUniverse, UpdateArguments> OnPreUpdate { get; }
|
|
|
|
/// <summary>
|
|
/// Event triggered when <see cref="Update(UniverseTime)"/> is called on the <see cref="IUniverse"/>.
|
|
/// </summary>
|
|
Event<IUniverse, UpdateArguments> OnUpdate { get; }
|
|
|
|
/// <summary>
|
|
/// Event triggered after <see cref="Update(UniverseTime)"/> is called on the <see cref="IUniverse"/>.
|
|
/// </summary>
|
|
Event<IUniverse, UpdateArguments> OnPostUpdate { get; }
|
|
|
|
/// <summary>
|
|
/// Event triggered when <see cref="Draw"/> is about to be called called on the <see cref="IUniverse"/>.
|
|
/// </summary>
|
|
Event<IUniverse> OnPreDraw { get; }
|
|
|
|
/// <summary>
|
|
/// Event triggered when <see cref="Draw"/> is called on the <see cref="IUniverse"/>.
|
|
/// </summary>
|
|
Event<IUniverse> OnDraw { get; }
|
|
|
|
/// <summary>
|
|
/// Event triggered after <see cref="Draw"/> is called on the <see cref="IUniverse"/>.
|
|
/// </summary>
|
|
Event<IUniverse> OnPostDraw { get; }
|
|
|
|
/// <summary>
|
|
/// Event triggered when a <see cref="IUniverseObject"/> is registered to the <see cref="IUniverse"/>.
|
|
/// </summary>
|
|
Event<IUniverse, UniverseObjectRegisteredArguments> OnUniverseObjectRegistered { get; }
|
|
|
|
/// <summary>
|
|
/// Event triggered when a <see cref="IUniverseObject"/> is unregistered from the <see cref="IUniverse"/>.
|
|
/// </summary>
|
|
Event<IUniverse, UniverseObjectUnRegisteredArguments> OnUniverseObjectUnRegistered { get; }
|
|
|
|
/// <summary>
|
|
/// Event triggered when <see cref="TimeScale"/> is changed on the <see cref="IUniverse"/>.
|
|
/// </summary>
|
|
Event<IUniverse, TimeScaleChangedArguments> OnTimeScaleChanged { get; }
|
|
|
|
/// <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 to the draw.
|
|
/// </summary>
|
|
void Draw();
|
|
|
|
readonly record struct TimeScaleChangedArguments(float PreviousTimeScale);
|
|
readonly record struct UpdateArguments(UniverseTime EngineTime);
|
|
readonly record struct UniverseObjectRegisteredArguments(IUniverseObject UniverseObjectRegistered);
|
|
readonly record struct UniverseObjectUnRegisteredArguments(IUniverseObject UniverseObjectUnregistered);
|
|
}
|