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>
|
/// <summary>
|
||||||
/// Represents a controller for managing <see cref="IBehaviour"/>s. Connected to an <see cref="IUniverseObject"/>.
|
/// Represents a controller for managing <see cref="IBehaviour"/>s. Connected to an <see cref="IUniverseObject"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IBehaviourController : IEntity, IHasUniverseObject, IEnumerable<IBehaviour>
|
public interface IBehaviourController : IEntity, IHasUniverseObject
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event triggered when a <see cref="IBehaviour"/> is added to the <see cref="IBehaviourController"/>.
|
/// 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>
|
/// </summary>
|
||||||
event BehaviourRemovedEventHandler? OnBehaviourRemoved;
|
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>
|
/// <summary>
|
||||||
/// Adds a <see cref="IBehaviour"/> to the <see cref="IBehaviourController"/>.
|
/// Adds a <see cref="IBehaviour"/> to the <see cref="IBehaviourController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -25,8 +25,8 @@ public class ActiveBehaviourCollector<T> : IBehaviourCollector<T> where T : clas
|
|||||||
universeObject.BehaviourController.OnBehaviourAdded += OnBehaviourAdded;
|
universeObject.BehaviourController.OnBehaviourAdded += OnBehaviourAdded;
|
||||||
universeObject.BehaviourController.OnBehaviourRemoved += OnBehaviourRemoved;
|
universeObject.BehaviourController.OnBehaviourRemoved += OnBehaviourRemoved;
|
||||||
|
|
||||||
foreach (IBehaviour item in universeObject.BehaviourController)
|
for (int i = 0; i < universeObject.BehaviourController.Count; i++)
|
||||||
OnBehaviourAdded(universeObject.BehaviourController, item);
|
OnBehaviourAdded(universeObject.BehaviourController, universeObject.BehaviourController[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnUniverseObjectUnregistered(IUniverse manager, IUniverseObject universeObject)
|
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.OnBehaviourAdded -= OnBehaviourAdded;
|
||||||
universeObject.BehaviourController.OnBehaviourRemoved -= OnBehaviourRemoved;
|
universeObject.BehaviourController.OnBehaviourRemoved -= OnBehaviourRemoved;
|
||||||
|
|
||||||
foreach (IBehaviour item in universeObject.BehaviourController)
|
for (int i = 0; i < universeObject.BehaviourController.Count; i++)
|
||||||
OnBehaviourRemoved(universeObject.BehaviourController, item);
|
OnBehaviourRemoved(universeObject.BehaviourController, universeObject.BehaviourController[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnBehaviourAdd(IBehaviour behaviour) { }
|
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.OnBehaviourAdded += OnBehaviourAdded;
|
||||||
universeObject.BehaviourController.OnBehaviourRemoved += OnBehaviourRemoved;
|
universeObject.BehaviourController.OnBehaviourRemoved += OnBehaviourRemoved;
|
||||||
|
|
||||||
foreach (IBehaviour item in universeObject.BehaviourController)
|
for (int i = 0; i < universeObject.BehaviourController.Count; i++)
|
||||||
OnBehaviourAdded(universeObject.BehaviourController, item);
|
OnBehaviourAdded(universeObject.BehaviourController, universeObject.BehaviourController[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnUniverseObjectUnregistered(IUniverse manager, IUniverseObject universeObject)
|
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.OnBehaviourAdded -= OnBehaviourAdded;
|
||||||
universeObject.BehaviourController.OnBehaviourRemoved -= OnBehaviourRemoved;
|
universeObject.BehaviourController.OnBehaviourRemoved -= OnBehaviourRemoved;
|
||||||
|
|
||||||
foreach (IBehaviour item in universeObject.BehaviourController)
|
for (int i = 0; i < universeObject.BehaviourController.Count; i++)
|
||||||
OnBehaviourRemoved(universeObject.BehaviourController, item);
|
OnBehaviourRemoved(universeObject.BehaviourController, universeObject.BehaviourController[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnBehaviourAdd(IBehaviour behaviour) { }
|
protected virtual void OnBehaviourAdd(IBehaviour behaviour) { }
|
||||||
|
@ -17,6 +17,8 @@ public class BehaviourController : BaseEntity, IBehaviourController
|
|||||||
private IUniverseObject _universeObject = null!;
|
private IUniverseObject _universeObject = null!;
|
||||||
|
|
||||||
public IUniverseObject UniverseObject => _universeObject;
|
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
|
public T AddBehaviour<T>(T behaviour) where T : class, IBehaviour
|
||||||
{
|
{
|
||||||
@ -149,7 +151,4 @@ public class BehaviourController : BaseEntity, IBehaviourController
|
|||||||
behaviours.Remove(sender);
|
behaviours.Remove(sender);
|
||||||
InsertBehaviourByPriority(sender);
|
InsertBehaviourByPriority(sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator<IBehaviour> GetEnumerator() => behaviours.GetEnumerator();
|
|
||||||
IEnumerator IEnumerable.GetEnumerator() => behaviours.GetEnumerator();
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user