diff --git a/Engine.Core/Abstract/IBehaviourController.cs b/Engine.Core/Abstract/IBehaviourController.cs index 3fe1e3a..5de1ea3 100644 --- a/Engine.Core/Abstract/IBehaviourController.cs +++ b/Engine.Core/Abstract/IBehaviourController.cs @@ -5,7 +5,7 @@ namespace Syntriax.Engine.Core; /// /// Represents a controller for managing s. Connected to an . /// -public interface IBehaviourController : IEntity, IHasUniverseObject, IEnumerable +public interface IBehaviourController : IEntity, IHasUniverseObject { /// /// Event triggered when a is added to the . @@ -17,6 +17,16 @@ public interface IBehaviourController : IEntity, IHasUniverseObject, IEnumerable /// event BehaviourRemovedEventHandler? OnBehaviourRemoved; + /// + /// Amount of collected. + /// + int Count { get; } + + /// + /// Get a collected by it's index. + /// + IBehaviour this[System.Index index] { get; } + /// /// Adds a to the . /// diff --git a/Engine.Core/ActiveBehaviourCollector.cs b/Engine.Core/ActiveBehaviourCollector.cs index 3ab81dd..410feea 100644 --- a/Engine.Core/ActiveBehaviourCollector.cs +++ b/Engine.Core/ActiveBehaviourCollector.cs @@ -25,8 +25,8 @@ public class ActiveBehaviourCollector : IBehaviourCollector where T : clas universeObject.BehaviourController.OnBehaviourAdded += OnBehaviourAdded; universeObject.BehaviourController.OnBehaviourRemoved += OnBehaviourRemoved; - foreach (IBehaviour item in universeObject.BehaviourController) - OnBehaviourAdded(universeObject.BehaviourController, item); + for (int i = 0; i < universeObject.BehaviourController.Count; i++) + OnBehaviourAdded(universeObject.BehaviourController, universeObject.BehaviourController[i]); } private void OnUniverseObjectUnregistered(IUniverse manager, IUniverseObject universeObject) @@ -34,8 +34,8 @@ public class ActiveBehaviourCollector : IBehaviourCollector where T : clas universeObject.BehaviourController.OnBehaviourAdded -= OnBehaviourAdded; universeObject.BehaviourController.OnBehaviourRemoved -= OnBehaviourRemoved; - foreach (IBehaviour item in universeObject.BehaviourController) - OnBehaviourRemoved(universeObject.BehaviourController, item); + for (int i = 0; i < universeObject.BehaviourController.Count; i++) + OnBehaviourRemoved(universeObject.BehaviourController, universeObject.BehaviourController[i]); } protected virtual void OnBehaviourAdd(IBehaviour behaviour) { } diff --git a/Engine.Core/BehaviourCollector.cs b/Engine.Core/BehaviourCollector.cs index 6075ec5..7869237 100644 --- a/Engine.Core/BehaviourCollector.cs +++ b/Engine.Core/BehaviourCollector.cs @@ -23,8 +23,8 @@ public class BehaviourCollector : IBehaviourCollector where T : class universeObject.BehaviourController.OnBehaviourAdded += OnBehaviourAdded; universeObject.BehaviourController.OnBehaviourRemoved += OnBehaviourRemoved; - foreach (IBehaviour item in universeObject.BehaviourController) - OnBehaviourAdded(universeObject.BehaviourController, item); + for (int i = 0; i < universeObject.BehaviourController.Count; i++) + OnBehaviourAdded(universeObject.BehaviourController, universeObject.BehaviourController[i]); } private void OnUniverseObjectUnregistered(IUniverse manager, IUniverseObject universeObject) @@ -32,8 +32,8 @@ public class BehaviourCollector : IBehaviourCollector where T : class universeObject.BehaviourController.OnBehaviourAdded -= OnBehaviourAdded; universeObject.BehaviourController.OnBehaviourRemoved -= OnBehaviourRemoved; - foreach (IBehaviour item in universeObject.BehaviourController) - OnBehaviourRemoved(universeObject.BehaviourController, item); + for (int i = 0; i < universeObject.BehaviourController.Count; i++) + OnBehaviourRemoved(universeObject.BehaviourController, universeObject.BehaviourController[i]); } protected virtual void OnBehaviourAdd(IBehaviour behaviour) { } diff --git a/Engine.Core/BehaviourController.cs b/Engine.Core/BehaviourController.cs index ac4ca34..bbf1b8a 100644 --- a/Engine.Core/BehaviourController.cs +++ b/Engine.Core/BehaviourController.cs @@ -17,6 +17,8 @@ public class BehaviourController : BaseEntity, IBehaviourController private IUniverseObject _universeObject = null!; public IUniverseObject UniverseObject => _universeObject; + public int Count => behaviours.Count; + public IBehaviour this[Index index] => behaviours[index]; public T AddBehaviour(T behaviour) where T : class, IBehaviour { @@ -149,7 +151,4 @@ public class BehaviourController : BaseEntity, IBehaviourController behaviours.Remove(sender); InsertBehaviourByPriority(sender); } - - public IEnumerator GetEnumerator() => behaviours.GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => behaviours.GetEnumerator(); }