fix: Issues With Behaviours Entering / Leaving the Hierarchy Callbacks Not Firing
This commit is contained in:
@@ -5,6 +5,7 @@ using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
|
||||
using Syntriax.Engine.Core.Abstract;
|
||||
using Syntriax.Engine.Core.Exceptions;
|
||||
|
||||
namespace Syntriax.Engine.Core;
|
||||
|
||||
@@ -17,17 +18,37 @@ public class BehaviourController : IBehaviourController
|
||||
|
||||
public event IBehaviourController.OnBehaviourAddedDelegate? OnBehaviourAdded = null;
|
||||
public event IBehaviourController.OnBehaviourRemovedDelegate? OnBehaviourRemoved = null;
|
||||
public event IAssignable.OnUnassignedDelegate? OnUnassigned;
|
||||
public event IAssignableGameObject.OnGameObjectAssignedDelegate? OnGameObjectAssigned = null;
|
||||
|
||||
public event IInitialize.OnInitializedDelegate? OnInitialized = null;
|
||||
public event IInitialize.OnFinalizedDelegate? OnFinalized = null;
|
||||
|
||||
public event IAssignable.OnUnassignedDelegate? OnUnassigned = null;
|
||||
|
||||
private readonly IList<IBehaviour> behaviours = new List<IBehaviour>(Constants.BEHAVIOURS_SIZE_INITIAL);
|
||||
|
||||
private IGameObject _gameObject = null!;
|
||||
|
||||
private bool _initialized = false;
|
||||
|
||||
public IGameObject GameObject => _gameObject;
|
||||
|
||||
|
||||
public bool IsInitialized
|
||||
{
|
||||
get => _initialized;
|
||||
private set
|
||||
{
|
||||
if (value == _initialized)
|
||||
return;
|
||||
|
||||
_initialized = value;
|
||||
if (value)
|
||||
OnInitialized?.Invoke(this);
|
||||
else
|
||||
OnFinalized?.Invoke(this);
|
||||
}
|
||||
}
|
||||
|
||||
public T AddBehaviour<T>(T behaviour) where T : class, IBehaviour
|
||||
{
|
||||
InsertBehaviourByPriority(behaviour);
|
||||
@@ -121,9 +142,36 @@ public class BehaviourController : IBehaviourController
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public bool Initialize()
|
||||
{
|
||||
if (IsInitialized)
|
||||
return false;
|
||||
|
||||
NotAssignedException.Check(this, _gameObject);
|
||||
|
||||
foreach (IBehaviour behaviour in behaviours)
|
||||
behaviour.Initialize();
|
||||
|
||||
IsInitialized = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Finalize()
|
||||
{
|
||||
if (!IsInitialized)
|
||||
return false;
|
||||
|
||||
foreach (IBehaviour behaviour in behaviours)
|
||||
behaviour.Finalize();
|
||||
|
||||
IsInitialized = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Unassign()
|
||||
{
|
||||
if (GameObject is not null && GameObject.IsInitialized)
|
||||
if (IsInitialized)
|
||||
return false;
|
||||
|
||||
_gameObject = null!;
|
||||
|
Reference in New Issue
Block a user