This commit is contained in:
2025-05-30 16:05:49 +03:00
committed by Syntriax
parent 846aa75dd5
commit b5140a94de
57 changed files with 437 additions and 462 deletions

View File

@@ -7,18 +7,18 @@ namespace Syntriax.Engine.Core;
[System.Diagnostics.DebuggerDisplay("UniverseObject Count: {_universeObjects.Count}")]
public class Universe : BaseEntity, IUniverse
{
public Event<IUniverse, UniverseTime> OnPreUpdate { get; set; } = new();
public Event<IUniverse, UniverseTime> OnUpdate { get; set; } = new();
public Event<IUniverse, UniverseTime> OnPostUpdate { get; set; } = new();
public Event<IUniverse> OnPreDraw { get; set; } = new();
public Event<IUniverse> OnDraw { get; set; } = new();
public Event<IUniverse> OnPostDraw { get; set; } = new();
public Event<IUniverse, IUniverseObject> OnUniverseObjectRegistered { get; set; } = new();
public Event<IUniverse, IUniverseObject> OnUniverseObjectUnRegistered { get; set; } = new();
public Event<IUniverse, float> OnTimeScaleChanged { get; set; } = new();
public Event<IUniverse, IUniverse.UpdateArguments> OnPreUpdate { get; init; } = new();
public Event<IUniverse, IUniverse.UpdateArguments> OnUpdate { get; init; } = new();
public Event<IUniverse, IUniverse.UpdateArguments> OnPostUpdate { get; init; } = new();
public Event<IUniverse> OnPreDraw { get; init; } = new();
public Event<IUniverse> OnDraw { get; init; } = new();
public Event<IUniverse> OnPostDraw { get; init; } = new();
public Event<IUniverse, IUniverse.UniverseObjectRegisteredArguments> OnUniverseObjectRegistered { get; init; } = new();
public Event<IUniverse, IUniverse.UniverseObjectUnRegisteredArguments> OnUniverseObjectUnRegistered { get; init; } = new();
public Event<IUniverse, IUniverse.TimeScaleChangedArguments> OnTimeScaleChanged { get; init; } = new();
private readonly Action<IInitializable> cachedOnUniverseObjectFinalize = null!;
private readonly Action<IUniverseObject, IUniverse> cachedOnUniverseObjectExitedUniverse = null!;
private readonly Event<IInitializable>.EventHandler cachedOnUniverseObjectFinalize = null!;
private readonly Event<IUniverseObject, IUniverseObject.ExitedUniverseArguments>.EventHandler cachedOnUniverseObjectExitedUniverse = null!;
private readonly List<IUniverseObject> _universeObjects = new(Constants.UNIVERSE_OBJECTS_SIZE_INITIAL);
private float _timeScale = 1f;
@@ -44,7 +44,7 @@ public class Universe : BaseEntity, IUniverse
float previousTimeScale = _timeScale;
_timeScale = value;
OnTimeScaleChanged?.Invoke(this, previousTimeScale);
OnTimeScaleChanged?.Invoke(this, new(previousTimeScale));
}
}
@@ -67,7 +67,7 @@ public class Universe : BaseEntity, IUniverse
if (!universeObject.EnterUniverse(this))
throw new Exception($"{universeObject.Name} can't enter the universe");
OnUniverseObjectRegistered?.Invoke(this, universeObject);
OnUniverseObjectRegistered?.Invoke(this, new(universeObject));
}
public T InstantiateUniverseObject<T>(params object?[]? args) where T : class, IUniverseObject
@@ -102,7 +102,7 @@ public class Universe : BaseEntity, IUniverse
if (!universeObject.Finalize())
throw new Exception($"{universeObject.Name} can't be finalized");
OnUniverseObjectUnRegistered?.Invoke(this, universeObject);
OnUniverseObjectUnRegistered?.Invoke(this, new(universeObject));
}
protected override void InitializeInternal()
@@ -125,9 +125,9 @@ public class Universe : BaseEntity, IUniverse
UnscaledTime = engineTime;
Time = new(TimeSpan.FromTicks((long)(Time.TimeSinceStart.Ticks + engineTime.DeltaSpan.Ticks * TimeScale)), TimeSpan.FromTicks((long)(engineTime.DeltaSpan.Ticks * TimeScale)));
OnPreUpdate?.Invoke(this, Time);
OnUpdate?.Invoke(this, Time);
OnPostUpdate?.Invoke(this, Time);
OnPreUpdate?.Invoke(this, new(Time));
OnUpdate?.Invoke(this, new(Time));
OnPostUpdate?.Invoke(this, new(Time));
}
public void Draw()
@@ -145,7 +145,7 @@ public class Universe : BaseEntity, IUniverse
Remove(universeObject);
}
private void OnUniverseObjectExitedUniverse(IUniverseObject sender, IUniverse universe)
private void OnUniverseObjectExitedUniverse(IUniverseObject sender, IUniverseObject.ExitedUniverseArguments arguments)
{
if (sender is IUniverseObject universeObject)
Remove(universeObject);