From ac620264b1a99f0f9c9ff8b6c8477d2606b99c48 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Sun, 1 Jun 2025 14:31:05 +0300 Subject: [PATCH] refactor: removed unnecessary overrides from Behaviour class --- Engine.Core/Behaviour.cs | 105 ++------------------ Engine.Core/Behaviour2D.cs | 17 +--- Engine.Physics2D/Collider2DBehaviourBase.cs | 4 + Engine.Systems/StateMachine/StateMachine.cs | 4 +- Engine.Systems/Time/StopwatchBehaviour.cs | 4 +- Engine.Systems/Time/TickerBehaviour.cs | 4 +- Engine.Systems/Time/TimerBehaviour.cs | 4 +- 7 files changed, 20 insertions(+), 122 deletions(-) diff --git a/Engine.Core/Behaviour.cs b/Engine.Core/Behaviour.cs index 0854f19..729c14e 100644 --- a/Engine.Core/Behaviour.cs +++ b/Engine.Core/Behaviour.cs @@ -1,8 +1,6 @@ namespace Syntriax.Engine.Core; -public abstract class Behaviour : BehaviourBase, IFirstFrameUpdate, - IPreUpdate, IUpdate, IPostUpdate, - IPreDraw, IDraw, IPostDraw +public abstract class Behaviour : BehaviourBase { private readonly Event.EventHandler delegateEnteredUniverse = null!; private readonly Event.EventHandler delegateExitedUniverse = null!; @@ -18,10 +16,10 @@ public abstract class Behaviour : BehaviourBase, IFirstFrameUpdate, } protected virtual void OnUnassign() { } - protected virtual void OnUnassign(IAssignable assignable) => OnUnassign(); + protected void OnUnassign(IAssignable assignable) => OnUnassign(); protected virtual void OnInitialize() { } - protected virtual void OnInitialize(IInitializable _) + protected void OnInitialize(IInitializable _) { BehaviourController.UniverseObject.OnEnteredUniverse.AddListener(delegateEnteredUniverse); BehaviourController.UniverseObject.OnExitedUniverse.AddListener(delegateExitedUniverse); @@ -33,7 +31,7 @@ public abstract class Behaviour : BehaviourBase, IFirstFrameUpdate, } protected virtual void OnFinalize() { } - protected virtual void OnFinalize(IInitializable _) + protected void OnFinalize(IInitializable _) { BehaviourController.UniverseObject.OnEnteredUniverse.RemoveListener(delegateEnteredUniverse); BehaviourController.UniverseObject.OnExitedUniverse.RemoveListener(delegateExitedUniverse); @@ -44,100 +42,9 @@ public abstract class Behaviour : BehaviourBase, IFirstFrameUpdate, ExitedUniverse(UniverseObject, new(Universe)); } - protected virtual void OnFirstActiveFrame() { } - void IFirstFrameUpdate.FirstActiveFrame() - { - Debug.Assert.AssertInitialized(this); - OnFirstActiveFrame(); - } - - protected virtual void OnPreUpdatePreActiveCheck() { } - protected virtual void OnPreUpdate() { } - void IPreUpdate.PreUpdate() - { - Debug.Assert.AssertInitialized(this); - - OnPreUpdatePreActiveCheck(); - - if (!IsActive) - return; - - OnPreUpdate(); - } - - protected virtual void OnUpdatePreActiveCheck() { } - protected virtual void OnUpdate() { } - void IUpdate.Update() - { - Debug.Assert.AssertInitialized(this); - - OnUpdatePreActiveCheck(); - - if (!IsActive) - return; - - OnUpdate(); - } - - protected virtual void OnPostUpdatePreActiveCheck() { } - protected virtual void OnPostUpdate() { } - void IPostUpdate.PostUpdate() - { - Debug.Assert.AssertInitialized(this); - - OnPostUpdatePreActiveCheck(); - - if (!StateEnable.Enabled) - return; - - OnPostUpdate(); - } - - protected virtual void OnPreDrawPreActiveCheck() { } - protected virtual void OnPreDraw() { } - void IPreDraw.PreDraw() - { - Debug.Assert.AssertInitialized(this); - - OnPreDrawPreActiveCheck(); - - if (!StateEnable.Enabled) - return; - - OnPreDraw(); - } - - protected virtual void OnDrawPreActiveCheck() { } - protected virtual void OnDraw() { } - void IDraw.Draw() - { - Debug.Assert.AssertInitialized(this); - - OnDrawPreActiveCheck(); - - if (!StateEnable.Enabled) - return; - - OnDraw(); - } - - protected virtual void OnPostDrawPreActiveCheck() { } - protected virtual void OnPostDraw() { } - void IPostDraw.PostDraw() - { - Debug.Assert.AssertInitialized(this); - - OnPostDrawPreActiveCheck(); - - if (!StateEnable.Enabled) - return; - - OnPostDraw(); - } - protected virtual void OnEnteredUniverse(IUniverse universe) { } - protected virtual void EnteredUniverse(IUniverseObject sender, IUniverseObject.EnteredUniverseArguments args) => OnEnteredUniverse(args.Universe); + protected void EnteredUniverse(IUniverseObject sender, IUniverseObject.EnteredUniverseArguments args) => OnEnteredUniverse(args.Universe); protected virtual void OnExitedUniverse(IUniverse universe) { } - protected virtual void ExitedUniverse(IUniverseObject sender, IUniverseObject.ExitedUniverseArguments args) => OnExitedUniverse(args.Universe); + protected void ExitedUniverse(IUniverseObject sender, IUniverseObject.ExitedUniverseArguments args) => OnExitedUniverse(args.Universe); } diff --git a/Engine.Core/Behaviour2D.cs b/Engine.Core/Behaviour2D.cs index 6cfbcc0..a6d22c2 100644 --- a/Engine.Core/Behaviour2D.cs +++ b/Engine.Core/Behaviour2D.cs @@ -4,19 +4,6 @@ public abstract class Behaviour2D : Behaviour, IBehaviour2D { public ITransform2D Transform { get; private set; } = null!; - protected sealed override void OnInitialize(IInitializable _) - { - Transform = BehaviourController.GetRequiredBehaviour(); - base.OnInitialize(_); - } - - protected sealed override void OnFinalize(IInitializable _) - { - Transform = null!; - base.OnFinalize(_); - } - - protected sealed override void OnUnassign(IAssignable assignable) => base.OnUnassign(assignable); - protected sealed override void EnteredUniverse(IUniverseObject sender, IUniverseObject.EnteredUniverseArguments args) => base.EnteredUniverse(sender, args); - protected sealed override void ExitedUniverse(IUniverseObject sender, IUniverseObject.ExitedUniverseArguments args) => base.ExitedUniverse(sender, args); + protected override void OnInitialize() => Transform = BehaviourController.GetRequiredBehaviour(); + protected override void OnFinalize() => Transform = null!; } diff --git a/Engine.Physics2D/Collider2DBehaviourBase.cs b/Engine.Physics2D/Collider2DBehaviourBase.cs index 72acf9c..209d860 100644 --- a/Engine.Physics2D/Collider2DBehaviourBase.cs +++ b/Engine.Physics2D/Collider2DBehaviourBase.cs @@ -44,6 +44,8 @@ public abstract class Collider2DBehaviourBase : Behaviour2D, ICollider2D protected override void OnInitialize() { + base.OnInitialize(); + BehaviourController.TryGetBehaviourInParent(out _rigidBody2D); BehaviourController.OnBehaviourAdded.AddListener(delegateOnBehaviourAddedToController); @@ -78,6 +80,8 @@ public abstract class Collider2DBehaviourBase : Behaviour2D, ICollider2D protected override void OnFinalize() { + base.OnFinalize(); + BehaviourController.OnBehaviourAdded.RemoveListener(delegateOnBehaviourAddedToController); BehaviourController.OnBehaviourRemoved.RemoveListener(delegateOnBehaviourRemovedFromController); Transform.OnScaleChanged.RemoveListener(delegateSetNeedsRecalculationFromScale); diff --git a/Engine.Systems/StateMachine/StateMachine.cs b/Engine.Systems/StateMachine/StateMachine.cs index 90b0b29..28f97b3 100644 --- a/Engine.Systems/StateMachine/StateMachine.cs +++ b/Engine.Systems/StateMachine/StateMachine.cs @@ -3,7 +3,7 @@ using Syntriax.Engine.Core.Serialization; namespace Syntriax.Engine.Systems.StateMachine; -public class StateMachine : Behaviour +public class StateMachine : Behaviour, IUpdate { public Event OnStateChanged { get; } = new(); @@ -44,7 +44,7 @@ public class StateMachine : Behaviour State = nextState; } - protected override void OnUpdate() + public void Update() { if (State is null) return; diff --git a/Engine.Systems/Time/StopwatchBehaviour.cs b/Engine.Systems/Time/StopwatchBehaviour.cs index cb71327..2eab89d 100644 --- a/Engine.Systems/Time/StopwatchBehaviour.cs +++ b/Engine.Systems/Time/StopwatchBehaviour.cs @@ -2,7 +2,7 @@ using Syntriax.Engine.Core; namespace Syntriax.Engine.Systems.Time; -public class StopwatchBehaviour : Behaviour, IStopwatch +public class StopwatchBehaviour : Behaviour, IUpdate, IStopwatch { public Event OnStarted { get; } = new(); public Event OnDelta { get; } = new(); @@ -38,7 +38,7 @@ public class StopwatchBehaviour : Behaviour, IStopwatch OnStopped?.Invoke(this); } - protected override void OnUpdate() + public virtual void Update() { if (State is not TimerState.Ticking) return; diff --git a/Engine.Systems/Time/TickerBehaviour.cs b/Engine.Systems/Time/TickerBehaviour.cs index 4f47d1e..d7ada18 100644 --- a/Engine.Systems/Time/TickerBehaviour.cs +++ b/Engine.Systems/Time/TickerBehaviour.cs @@ -18,9 +18,9 @@ public class TickerBehaviour : StopwatchBehaviour, ITicker nextTick = Time + Period; } - protected override void OnUpdate() + public override void Update() { - base.OnUpdate(); + base.Update(); while (Time > nextTick) { diff --git a/Engine.Systems/Time/TimerBehaviour.cs b/Engine.Systems/Time/TimerBehaviour.cs index 93162fe..314afac 100644 --- a/Engine.Systems/Time/TimerBehaviour.cs +++ b/Engine.Systems/Time/TimerBehaviour.cs @@ -2,7 +2,7 @@ using Syntriax.Engine.Core; namespace Syntriax.Engine.Systems.Time; -public class TimerBehaviour : Behaviour, ITimer +public class TimerBehaviour : Behaviour, IUpdate, ITimer { public Event OnStarted { get; } = new(); public Event OnDelta { get; } = new(); @@ -53,7 +53,7 @@ public class TimerBehaviour : Behaviour, ITimer OnStopped?.Invoke(this); } - protected override void OnUpdate() + public void Update() { if (State is not TimerState.Ticking) return;