Initial Commit

This commit is contained in:
2026-03-16 14:38:46 +02:00
commit b8f7327a21
2327 changed files with 253610 additions and 0 deletions
@@ -0,0 +1,160 @@
using System;
using ModestTree;
using UnityEditor;
using UnityEngine;
namespace Zenject
{
public abstract class ZenjectEditorWindow : EditorWindow
{
[Inject]
[NonSerialized]
Kernel _kernel;
[Inject]
[NonSerialized]
GuiRenderableManager _guiRenderableManager;
[NonSerialized]
DiContainer _container;
[NonSerialized]
Exception _fatalError;
[NonSerialized]
GUIStyle _errorTextStyle;
GUIStyle ErrorTextStyle
{
get
{
if (_errorTextStyle == null)
{
_errorTextStyle = new GUIStyle(GUI.skin.label);
_errorTextStyle.fontSize = 18;
_errorTextStyle.normal.textColor = Color.red;
_errorTextStyle.wordWrap = true;
_errorTextStyle.alignment = TextAnchor.MiddleCenter;
}
return _errorTextStyle;
}
}
protected DiContainer Container
{
get { return _container; }
}
public virtual void OnEnable()
{
if (_fatalError != null)
{
return;
}
Initialize();
}
protected virtual void Initialize()
{
Assert.IsNull(_container);
_container = new DiContainer(new[] { StaticContext.Container });
// Make sure we don't create any game objects since editor windows don't have a scene
_container.AssertOnNewGameObjects = true;
ZenjectManagersInstaller.Install(_container);
_container.Bind<Kernel>().AsSingle();
_container.Bind<GuiRenderableManager>().AsSingle();
_container.BindInstance(this);
InstallBindings();
_container.QueueForInject(this);
_container.ResolveRoots();
_kernel.Initialize();
}
public virtual void OnDisable()
{
if (_fatalError != null)
{
return;
}
_kernel.Dispose();
}
public virtual void Update()
{
if (_fatalError != null)
{
return;
}
try
{
_kernel.Tick();
}
catch (Exception e)
{
Log.ErrorException(e);
_fatalError = e;
}
// We might also consider only calling Repaint when changes occur
Repaint();
}
public virtual void OnGUI()
{
if (_fatalError != null)
{
var labelWidth = 600;
var labelHeight = 200;
GUI.Label(new Rect(Screen.width / 2 - labelWidth / 2, Screen.height / 3 - labelHeight / 2, labelWidth, labelHeight), "Unrecoverable error occurred! \nSee log for details.", ErrorTextStyle);
var buttonWidth = 100;
var buttonHeight = 50;
var offset = new Vector2(0, 100);
if (GUI.Button(new Rect(Screen.width / 2 - buttonWidth / 2 + offset.x, Screen.height / 3 - buttonHeight / 2 + offset.y, buttonWidth, buttonHeight), "Reload"))
{
ExecuteFullReload();
}
}
else
{
try
{
if (_guiRenderableManager != null)
{
_guiRenderableManager.OnGui();
}
}
catch (Exception e)
{
Log.ErrorException(e);
_fatalError = e;
}
}
}
protected virtual void ExecuteFullReload()
{
_kernel = null;
_guiRenderableManager = null;
_container = null;
_fatalError = null;
Initialize();
}
public abstract void InstallBindings();
}
}
@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: bc25e694ccedbed4893d980ee61d1c8f
timeCreated: 1527961729
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: