Initial Commit
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
using ModestTree;
|
||||
using UnityEngine;
|
||||
|
||||
#if !NOT_UNITY3D
|
||||
|
||||
namespace Zenject
|
||||
{
|
||||
public abstract class RunnableContext : Context
|
||||
{
|
||||
[Tooltip("When false, wait until run method is explicitly called. Otherwise run on initialize")]
|
||||
[SerializeField]
|
||||
bool _autoRun = true;
|
||||
|
||||
static bool _staticAutoRun = true;
|
||||
|
||||
public bool Initialized { get; private set; }
|
||||
|
||||
protected void Initialize()
|
||||
{
|
||||
if (_staticAutoRun && _autoRun)
|
||||
{
|
||||
Run();
|
||||
}
|
||||
else
|
||||
{
|
||||
// True should always be default
|
||||
_staticAutoRun = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
Assert.That(!Initialized,
|
||||
"The context already has been initialized!");
|
||||
|
||||
RunInternal();
|
||||
|
||||
Initialized = true;
|
||||
}
|
||||
|
||||
protected abstract void RunInternal();
|
||||
|
||||
public static T CreateComponent<T>(GameObject gameObject) where T : RunnableContext
|
||||
{
|
||||
_staticAutoRun = false;
|
||||
|
||||
var result = gameObject.AddComponent<T>();
|
||||
Assert.That(_staticAutoRun); // Should be reset
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user