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();
}