Files

131 lines
3.4 KiB
C#

#if !NOT_UNITY3D
#pragma warning disable 649
using ModestTree;
using UnityEngine;
using UnityEngine.Analytics;
namespace Zenject
{
public abstract class MonoKernel : MonoBehaviour
{
[InjectLocal]
TickableManager _tickableManager = null;
[InjectLocal]
InitializableManager _initializableManager = null;
[InjectLocal]
DisposableManager _disposablesManager = null;
[InjectOptional]
private IDecoratableMonoKernel decoratableMonoKernel;
bool _hasInitialized;
bool _isDestroyed;
protected bool IsDestroyed
{
get { return _isDestroyed; }
}
public virtual void Start()
{
if (decoratableMonoKernel?.ShouldInitializeOnStart()??true)
{
Initialize();
}
}
public void Initialize()
{
// We don't put this in start in case Start is overridden
if (!_hasInitialized)
{
_hasInitialized = true;
if (decoratableMonoKernel != null)
{
decoratableMonoKernel.Initialize();
}
else
{
_initializableManager.Initialize();
}
}
}
public virtual void Update()
{
// Don't spam the log every frame if initialization fails and leaves it as null
if (_tickableManager != null)
{
if (decoratableMonoKernel != null)
{
decoratableMonoKernel.Update();
}
else
{
_tickableManager.Update();
}
}
}
public virtual void FixedUpdate()
{
// Don't spam the log every frame if initialization fails and leaves it as null
if (_tickableManager != null)
{
if (decoratableMonoKernel != null)
{
decoratableMonoKernel.FixedUpdate();
}
else
{
_tickableManager.FixedUpdate();
}
}
}
public virtual void LateUpdate()
{
// Don't spam the log every frame if initialization fails and leaves it as null
if (_tickableManager != null)
{
if (decoratableMonoKernel != null)
{
decoratableMonoKernel.LateUpdate();
}
else
{
_tickableManager.LateUpdate();
}
}
}
public virtual void OnDestroy()
{
// _disposablesManager can be null if we get destroyed before the Start event
if (_disposablesManager != null)
{
Assert.That(!_isDestroyed);
_isDestroyed = true;
if (decoratableMonoKernel != null)
{
decoratableMonoKernel.Dispose();
decoratableMonoKernel.LateDispose();
}
else
{
_disposablesManager.Dispose();
_disposablesManager.LateDispose();
}
}
}
}
}
#endif