perf!: behaviour controller memory allocation issues fixed by removing the enumerable interface
This commit is contained in:
parent
b0f8b0dad6
commit
b1b5af94d3
@ -5,7 +5,7 @@ namespace Syntriax.Engine.Core;
|
||||
/// <summary>
|
||||
/// Represents a controller for managing <see cref="IBehaviour"/>s. Connected to an <see cref="IUniverseObject"/>.
|
||||
/// </summary>
|
||||
public interface IBehaviourController : IEntity, IHasUniverseObject, IEnumerable<IBehaviour>
|
||||
public interface IBehaviourController : IEntity, IHasUniverseObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Event triggered when a <see cref="IBehaviour"/> is added to the <see cref="IBehaviourController"/>.
|
||||
@ -17,6 +17,16 @@ public interface IBehaviourController : IEntity, IHasUniverseObject, IEnumerable
|
||||
/// </summary>
|
||||
event BehaviourRemovedEventHandler? OnBehaviourRemoved;
|
||||
|
||||
/// <summary>
|
||||
/// Amount of <see cref="IBehaviour"/> collected.
|
||||
/// </summary>
|
||||
int Count { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Get a <see cref="IBehaviour"/> collected by it's index.
|
||||
/// </summary>
|
||||
IBehaviour this[System.Index index] { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Adds a <see cref="IBehaviour"/> to the <see cref="IBehaviourController"/>.
|
||||
/// </summary>
|
||||
|
@ -25,8 +25,8 @@ public class ActiveBehaviourCollector<T> : IBehaviourCollector<T> 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<T> : IBehaviourCollector<T> 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) { }
|
||||
|
@ -23,8 +23,8 @@ public class BehaviourCollector<T> : IBehaviourCollector<T> 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<T> : IBehaviourCollector<T> 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) { }
|
||||
|
@ -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>(T behaviour) where T : class, IBehaviour
|
||||
{
|
||||
@ -149,7 +151,4 @@ public class BehaviourController : BaseEntity, IBehaviourController
|
||||
behaviours.Remove(sender);
|
||||
InsertBehaviourByPriority(sender);
|
||||
}
|
||||
|
||||
public IEnumerator<IBehaviour> GetEnumerator() => behaviours.GetEnumerator();
|
||||
IEnumerator IEnumerable.GetEnumerator() => behaviours.GetEnumerator();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user