Просмотр исходного кода

EventSystem跟ObjectPool都挂到Game类下,Game以后管理了实体组件,事件,对象池,从而成了整个框架最顶层的类,一切都由Game管理。

tanghai 8 лет назад
Родитель
Сommit
04b834ae0d
35 измененных файлов с 200 добавлено и 225 удалено
  1. 3 3
      Server/App/Program.cs
  2. 1 1
      Server/Hotfix/Handler/M2A_ReloadHandler.cs
  3. 1 1
      Server/Model/Base/Helper/DllHelper.cs
  4. 4 19
      Server/Model/Base/Object/EventSystem.cs
  5. 1 1
      Server/Model/Component/NumericComponent.cs
  6. 23 1
      Server/Model/Entity/Game.cs
  7. 3 3
      Unity/Assets/Editor/BehaviorTreeEditor/BTEditor.cs
  8. 4 4
      Unity/Assets/Editor/BehaviorTreeEditor/GraphDesigner.cs
  9. 3 3
      Unity/Assets/Editor/BehaviorTreeEditor/NodeDesigner.cs
  10. 2 2
      Unity/Assets/Editor/BehaviorTreeEditor/PropertyDesigner.cs
  11. 1 1
      Unity/Assets/Scripts/Base/BehaviorTree/BehaviorTree.cs
  12. 8 8
      Unity/Assets/Scripts/Base/Object/ComponentFactory.cs
  13. 1 1
      Unity/Assets/Scripts/Base/Object/Disposer.cs
  14. 16 16
      Unity/Assets/Scripts/Base/Object/EntityFactory.cs
  15. 5 20
      Unity/Assets/Scripts/Base/Object/EventSystem.cs
  16. 0 19
      Unity/Assets/Scripts/Base/Object/ObjectPool.cs
  17. 1 1
      Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs
  18. 1 1
      Unity/Assets/Scripts/Component/NumericComponent.cs
  19. 23 1
      Unity/Assets/Scripts/Entity/Game.cs
  20. 2 2
      Unity/Assets/Scripts/Helper/BundleHelper.cs
  21. 3 3
      Unity/Assets/Scripts/Helper/DllHelper.cs
  22. 7 8
      Unity/Assets/Scripts/Init.cs
  23. 8 8
      Unity/Hotfix/Base/Object/ComponentFactory.cs
  24. 2 3
      Unity/Hotfix/Base/Object/Disposer.cs
  25. 17 19
      Unity/Hotfix/Base/Object/EntityFactory.cs
  26. 24 39
      Unity/Hotfix/Base/Object/EventSystem.cs
  27. 0 19
      Unity/Hotfix/Base/Object/ObjectPool.cs
  28. 1 1
      Unity/Hotfix/Component/UIComponent.cs
  29. 23 1
      Unity/Hotfix/Entity/Hotfix.cs
  30. 2 1
      Unity/Hotfix/Entity/UI.cs
  31. 2 4
      Unity/Hotfix/Init.cs
  32. 1 1
      Unity/Hotfix/UI/UILobby/Component/UILobbyComponent.cs
  33. 1 1
      Unity/Hotfix/UI/UILogin/Component/UILoginComponent.cs
  34. 1 1
      Unity/Hotfix/Unity.Hotfix.csproj
  35. 5 8
      Unity/Unity.csproj

+ 3 - 3
Server/App/Program.cs

@@ -18,8 +18,8 @@ namespace App
 			
 			try
 			{
-				EventSystem.Instance.Add(DLLType.Model, typeof(Game).Assembly);
-				EventSystem.Instance.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly());
+				Game.EventSystem.Add(DLLType.Model, typeof(Game).Assembly);
+				Game.EventSystem.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly());
 
 				Options options = Game.Scene.AddComponent<OptionComponent, string[]>(args).Options;
 				StartConfig startConfig = Game.Scene.AddComponent<StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig;
@@ -117,7 +117,7 @@ namespace App
 					{
 						Thread.Sleep(1);
 						contex.Update();
-						EventSystem.Instance.Update();
+						Game.EventSystem.Update();
 					}
 					catch (Exception e)
 					{

+ 1 - 1
Server/Hotfix/Handler/M2A_ReloadHandler.cs

@@ -11,7 +11,7 @@ namespace Hotfix
 			A2M_Reload response = new A2M_Reload();
 			try
 			{
-				EventSystem.Instance.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly());
+				Game.EventSystem.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly());
 				reply(response);
 			}
 			catch (Exception e)

+ 1 - 1
Server/Model/Base/Helper/DllHelper.cs

@@ -22,7 +22,7 @@ namespace Model
 		public static Type[] GetMonoTypes()
 		{
 			List<Type> types = new List<Type>();
-			foreach (Assembly assembly in EventSystem.Instance.GetAll())
+			foreach (Assembly assembly in Game.EventSystem.GetAll())
 			{
 				types.AddRange(assembly.GetTypes());
 			}

+ 4 - 19
Server/Model/Base/Object/EventSystem.cs

@@ -39,21 +39,6 @@ namespace Model
 
 	public sealed class EventSystem
 	{
-		private static EventSystem instance;
-
-		public static EventSystem Instance
-		{
-			get
-			{
-				return instance ?? (instance = new EventSystem());
-			}
-		}
-
-		public static void Close()
-		{
-			instance = null;
-		}
-
 		private readonly Dictionary<DLLType, Assembly> assemblies = new Dictionary<DLLType, Assembly>();
 
 		private readonly Dictionary<EventIdType, List<object>> allEvents = new Dictionary<EventIdType, List<object>>();
@@ -150,7 +135,7 @@ namespace Model
 
 		public void Awake(Disposer disposer)
 		{
-			Instance.Add(disposer);
+			this.Add(disposer);
 
 			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{
@@ -167,7 +152,7 @@ namespace Model
 
 		public void Awake<P1>(Disposer disposer, P1 p1)
 		{
-			Instance.Add(disposer);
+			this.Add(disposer);
 
 			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{
@@ -184,7 +169,7 @@ namespace Model
 
 		public void Awake<P1, P2>(Disposer disposer, P1 p1, P2 p2)
 		{
-			Instance.Add(disposer);
+			this.Add(disposer);
 
 			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{
@@ -201,7 +186,7 @@ namespace Model
 
 		public void Awake<P1, P2, P3>(Disposer disposer, P1 p1, P2 p2, P3 p3)
 		{
-			Instance.Add(disposer);
+			this.Add(disposer);
 
 			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{

+ 1 - 1
Server/Model/Component/NumericComponent.cs

@@ -58,7 +58,7 @@ namespace Model
 				}
 
 				NumericDic[numericType] = value;
-				EventSystem.Instance.Run(EventIdType.NumbericChange, this.Parent.Id, numericType, value);
+				Game.EventSystem.Run(EventIdType.NumbericChange, this.Parent.Id, numericType, value);
 			}
 		}
 

+ 23 - 1
Server/Model/Entity/Game.cs

@@ -17,11 +17,33 @@
 				return scene;
 			}
 		}
-		
+
+		private static EventSystem eventSystem;
+
+		public static EventSystem EventSystem
+		{
+			get
+			{
+				return eventSystem ?? (eventSystem = new EventSystem());
+			}
+		}
+
+		private static ObjectPool objectPool;
+
+		public static ObjectPool ObjectPool
+		{
+			get
+			{
+				return objectPool ?? (objectPool = new ObjectPool());
+			}
+		}
+
 		public static void Close()
 		{
 			scene.Dispose();
 			scene = null;
+			eventSystem = null;
+			objectPool = null;
 		}
 	}
 }

+ 3 - 3
Unity/Assets/Editor/BehaviorTreeEditor/BTEditor.cs

@@ -39,8 +39,8 @@ namespace MyEditor
 					return instance;
 				}
 
-				EventSystem.Instance.Add(DLLType.Model, typeof(Init).Assembly);
-				EventSystem.Instance.Add(DLLType.Editor, typeof(BTEditor).Assembly);
+				Game.EventSystem.Add(DLLType.Model, typeof(Init).Assembly);
+				Game.EventSystem.Add(DLLType.Editor, typeof(BTEditor).Assembly);
 
 				instance = new BTEditor();
 				
@@ -380,7 +380,7 @@ namespace MyEditor
 			this.NewLoadPrefabTree();
 
 			BTEditorWindow.ShowWindow();
-			EventSystem.Instance.Run(EventIdType.BehaviorTreeOpenEditor);
+			Game.EventSystem.Run(EventIdType.BehaviorTreeOpenEditor);
 		}
 
 		public string[] GetCanInPutEnvKeyArray(BehaviorNodeData nodeData, NodeFieldDesc desc)

+ 4 - 4
Unity/Assets/Editor/BehaviorTreeEditor/GraphDesigner.cs

@@ -200,7 +200,7 @@ namespace MyEditor
 					if (mDragingRightBorder)
 					{
 						mRightWidth -= e.delta.x;
-						EventSystem.Instance.Run(EventIdType.BehaviorTreeRightDesignerDrag, e.delta.x);
+						Game.EventSystem.Run(EventIdType.BehaviorTreeRightDesignerDrag, e.delta.x);
 						return;
 					}
 
@@ -581,7 +581,7 @@ namespace MyEditor
 				newNode.AddChild(child);
 			}
 			BTEditor.Instance.ResetTreeId();
-			EventSystem.Instance.Run(EventIdType.BehaviorTreeAfterChangeNodeType);
+			Game.EventSystem.Run(EventIdType.BehaviorTreeAfterChangeNodeType);
 		}
 
 		public void onChangeNodeType(params object[] list)
@@ -614,7 +614,7 @@ namespace MyEditor
 				mDetachedNodes.Add(node);
 			}
 			BTEditor.Instance.ResetTreeId();
-			EventSystem.Instance.Run(EventIdType.BehaviorTreeCreateNode, node);
+			Game.EventSystem.Run(EventIdType.BehaviorTreeCreateNode, node);
 			return node;
 		}
 
@@ -714,7 +714,7 @@ namespace MyEditor
 
 		public void ClickNode(NodeDesigner dstNode)
 		{
-			EventSystem.Instance.Run(EventIdType.BehaviorTreeClickNode, dstNode);
+			Game.EventSystem.Run(EventIdType.BehaviorTreeClickNode, dstNode);
 		}
 
 		public void ShiftNode(NodeDesigner dstNode)

+ 3 - 3
Unity/Assets/Editor/BehaviorTreeEditor/NodeDesigner.cs

@@ -280,17 +280,17 @@ namespace MyEditor
 			if (!isSelected && mouse.x > Pos.x - Width / 2 - 30f && mouse.x < Pos.x + Width / 2 + 30f && mouse.y > Pos.y - Height / 2 &&
 			    mouse.y < Pos.y + Height / 2)
 			{
-				EventSystem.Instance.Run(EventIdType.BehaviorTreeMouseInNode, NodeData, this);
+				Game.EventSystem.Run(EventIdType.BehaviorTreeMouseInNode, NodeData, this);
 			}
 			//并判断是否点中了连线柄
 			if (mouse.x > LeftPos.x - 30f && mouse.x < LeftPos.x + 10f && mouse.y > LeftPos.y - 30f && mouse.y < LeftPos.y + 30f)
 			{
-				EventSystem.Instance.Run(EventIdType.BehaviorTreeConnectState, this, State.ConnectLeft);
+				Game.EventSystem.Run(EventIdType.BehaviorTreeConnectState, this, State.ConnectLeft);
 			}
 
 			if (mouse.x > RightPos.x - 10f && mouse.x < RightPos.x + 30f && mouse.y > RightPos.y - 30f && mouse.y < RightPos.y + 30f && NodeData.CanAddChild())
 			{
-				EventSystem.Instance.Run(EventIdType.BehaviorTreeConnectState, this, State.ConnectRight);
+				Game.EventSystem.Run(EventIdType.BehaviorTreeConnectState, this, State.ConnectRight);
 			}
 
 			for (int i = 0; i < this.Children.Count; i++)

+ 2 - 2
Unity/Assets/Editor/BehaviorTreeEditor/PropertyDesigner.cs

@@ -206,7 +206,7 @@ namespace MyEditor
 				{
 					if (GUILayout.Button("新建"))
 					{
-						EventSystem.Instance.Run(EventIdType.BehaviorTreePropertyDesignerNewCreateClick, name, Vector2.zero);
+						Game.EventSystem.Run(EventIdType.BehaviorTreePropertyDesignerNewCreateClick, name, Vector2.zero);
 					}
 				}
 				if (mCurNode.folderName != NodeClassifyType.Root.ToString() ||
@@ -214,7 +214,7 @@ namespace MyEditor
 				{
 					if (GUILayout.Button("替换"))
 					{
-						EventSystem.Instance.Run(EventIdType.BehaviorTreeReplaceClick, name, Vector2.zero);
+						Game.EventSystem.Run(EventIdType.BehaviorTreeReplaceClick, name, Vector2.zero);
 					}
 				}
 

+ 1 - 1
Unity/Assets/Scripts/Base/BehaviorTree/BehaviorTree.cs

@@ -33,7 +33,7 @@ namespace Model
 				this.PathList.Clear();
 				env.Add(BTEnvKey.NodePath, this.PathList);
 				bool ret = this.node.DoRun(this, env);
-				EventSystem.Instance.Run(EventIdType.BehaviorTreeRunTreeEvent, this);
+				Game.EventSystem.Run(EventIdType.BehaviorTreeRunTreeEvent, this);
 				return ret;
 			}
 			catch (Exception e)

+ 8 - 8
Unity/Assets/Scripts/Base/Object/ComponentFactory.cs

@@ -4,33 +4,33 @@
 	{
 		public static T Create<T>(Entity entity) where T : Component
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Game.ObjectPool.Fetch<T>();
 			disposer.Parent = entity;
-			EventSystem.Instance.Awake(disposer);
+			Game.EventSystem.Awake(disposer);
 			return disposer;
 		}
 
 		public static T Create<T, A>(Entity entity, A a) where T : Component
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Game.ObjectPool.Fetch<T>();
 			disposer.Parent = entity;
-			EventSystem.Instance.Awake(disposer, a);
+			Game.EventSystem.Awake(disposer, a);
 			return disposer;
 		}
 
 		public static T Create<T, A, B>(Entity entity, A a, B b) where T : Component
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Game.ObjectPool.Fetch<T>();
 			disposer.Parent = entity;
-			EventSystem.Instance.Awake(disposer, a, b);
+			Game.EventSystem.Awake(disposer, a, b);
 			return disposer;
 		}
 
 		public static T Create<T, A, B, C>(Entity entity, A a, B b, C c) where T : Component
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Game.ObjectPool.Fetch<T>();
 			disposer.Parent = entity;
-			EventSystem.Instance.Awake(disposer, a, b, c);
+			Game.EventSystem.Awake(disposer, a, b, c);
 			return disposer;
 		}
 	}

+ 1 - 1
Unity/Assets/Scripts/Base/Object/Disposer.cs

@@ -30,7 +30,7 @@ namespace Model
 			this.Id = 0;
 			if (this.IsFromPool)
 			{
-				ObjectPool.Instance.Recycle(this);
+				Game.ObjectPool.Recycle(this);
 			}
 		}
 	}

+ 16 - 16
Unity/Assets/Scripts/Base/Object/EntityFactory.cs

@@ -4,61 +4,61 @@
 	{
 		public static T Create<T>() where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
-			EventSystem.Instance.Awake(disposer);
+			T disposer = Game.ObjectPool.Fetch<T>();
+			Game.EventSystem.Awake(disposer);
 			return disposer;
 		}
 
 		public static T Create<T, A>(A a) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
-			EventSystem.Instance.Awake(disposer, a);
+			T disposer = Game.ObjectPool.Fetch<T>();
+			Game.EventSystem.Awake(disposer, a);
 			return disposer;
 		}
 
 		public static T Create<T, A, B>(A a, B b) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
-			EventSystem.Instance.Awake(disposer, a, b);
+			T disposer = Game.ObjectPool.Fetch<T>();
+			Game.EventSystem.Awake(disposer, a, b);
 			return disposer;
 		}
 
 		public static T Create<T, A, B, C>(A a, B b, C c) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
-			EventSystem.Instance.Awake(disposer, a, b, c);
+			T disposer = Game.ObjectPool.Fetch<T>();
+			Game.EventSystem.Awake(disposer, a, b, c);
 			return disposer;
 		}
 
 		public static T CreateWithId<T>(long id) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Game.ObjectPool.Fetch<T>();
 			disposer.Id = id;
-			EventSystem.Instance.Awake(disposer);
+			Game.EventSystem.Awake(disposer);
 			return disposer;
 		}
 
 		public static T CreateWithId<T, A>(long id, A a) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Game.ObjectPool.Fetch<T>();
 			disposer.Id = id;
-			EventSystem.Instance.Awake(disposer, a);
+			Game.EventSystem.Awake(disposer, a);
 			return disposer;
 		}
 
 		public static T CreateWithId<T, A, B>(long id, A a, B b) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Game.ObjectPool.Fetch<T>();
 			disposer.Id = id;
-			EventSystem.Instance.Awake(disposer, a, b);
+			Game.EventSystem.Awake(disposer, a, b);
 			return disposer;
 		}
 
 		public static T CreateWithId<T, A, B, C>(long id, A a, B b, C c) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Game.ObjectPool.Fetch<T>();
 			disposer.Id = id;
-			EventSystem.Instance.Awake(disposer, a, b, c);
+			Game.EventSystem.Awake(disposer, a, b, c);
 			return disposer;
 		}
 	}

+ 5 - 20
Unity/Assets/Scripts/Base/Object/EventSystem.cs

@@ -40,16 +40,6 @@ namespace Model
 
 	public sealed class EventSystem
 	{
-		private static EventSystem instance;
-
-		public static EventSystem Instance
-		{
-			get
-			{
-				return instance ?? (instance = new EventSystem());
-			}
-		}
-
 		private Assembly hotfixAssembly;
 
 		public Assembly HotfixAssembly
@@ -81,17 +71,12 @@ namespace Model
 		private Queue<Disposer> lateUpdates = new Queue<Disposer>();
 		private Queue<Disposer> lateUpdates2 = new Queue<Disposer>();
 
-		public static void Close()
-		{
-			instance = null;
-		}
-
 		public void LoadHotfixDll()
 		{
 #if ILRuntime
 			DllHelper.LoadHotfixAssembly();	
 #else
-			EventSystem.Instance.HotfixAssembly = DllHelper.LoadHotfixAssembly();
+			this.HotfixAssembly = DllHelper.LoadHotfixAssembly();
 #endif
 			this.Register();
 			this.Load();
@@ -202,7 +187,7 @@ namespace Model
 
 		public void Awake(Disposer disposer)
 		{
-			EventSystem.Instance.Add(disposer);
+			this.Add(disposer);
 
 			IObjectSystem objectSystem;
 			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
@@ -220,7 +205,7 @@ namespace Model
 
 		public void Awake<P1>(Disposer disposer, P1 p1)
 		{
-			EventSystem.Instance.Add(disposer);
+			this.Add(disposer);
 
 			IObjectSystem objectSystem;
 			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
@@ -238,7 +223,7 @@ namespace Model
 
 		public void Awake<P1, P2>(Disposer disposer, P1 p1, P2 p2)
 		{
-			EventSystem.Instance.Add(disposer);
+			this.Add(disposer);
 
 			IObjectSystem objectSystem;
 			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
@@ -256,7 +241,7 @@ namespace Model
 
 		public void Awake<P1, P2, P3>(Disposer disposer, P1 p1, P2 p2, P3 p3)
 		{
-			EventSystem.Instance.Add(disposer);
+			this.Add(disposer);
 
 			IObjectSystem objectSystem;
 			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))

+ 0 - 19
Unity/Assets/Scripts/Base/Object/ObjectPool.cs

@@ -5,27 +5,8 @@ namespace Model
 {
     public class ObjectPool
     {
-	    private static ObjectPool instance;
-
-	    public static ObjectPool Instance
-	    {
-		    get
-		    {
-			    return instance ?? (instance = new ObjectPool());
-		    }
-	    }
-
         private readonly Dictionary<Type, Queue<Disposer>> dictionary = new Dictionary<Type, Queue<Disposer>>();
 
-        private ObjectPool()
-        {
-        }
-
-	    public static void Close()
-	    {
-		    instance = null;
-	    }
-
         private Disposer Fetch(Type type)
         {
 	        Queue<Disposer> queue;

+ 1 - 1
Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs

@@ -71,7 +71,7 @@ namespace Model
 
 		private static void InitFieldValue(ref Node node, NodeProto nodeProto)
 		{
-			Type type = EventSystem.Instance.Get(DLLType.Model).GetType("Model." + nodeProto.Name);
+			Type type = Game.EventSystem.Get(DLLType.Model).GetType("Model." + nodeProto.Name);
 
 			foreach (var args_item in nodeProto.Args.Dict())
 			{

+ 1 - 1
Unity/Assets/Scripts/Component/NumericComponent.cs

@@ -83,7 +83,7 @@ namespace Model
 			// 一个数值可能会多种情况影响,比如速度,加个buff可能增加速度绝对值100,也有些buff增加10%速度,所以一个值可以由5个值进行控制其最终结果
 			// final = (((base + add) * (100 + pct) / 100) + finalAdd) * (100 + finalPct) / 100;
 			this.NumericDic[final] = ((this.GetByKey(bas) + this.GetByKey(add)) * (100 + this.GetByKey(pct)) / 100 + this.GetByKey(finalAdd)) * (100 + this.GetByKey(finalPct)) / 100;
-			EventSystem.Instance.Run(EventIdType.NumbericChange, this.Parent.Id, numericType, final);
+			Game.EventSystem.Run(EventIdType.NumbericChange, this.Parent.Id, numericType, final);
 		}
 	}
 }

+ 23 - 1
Unity/Assets/Scripts/Entity/Game.cs

@@ -17,11 +17,33 @@
 				return scene;
 			}
 		}
-		
+
+		private static EventSystem eventSystem;
+
+		public static EventSystem EventSystem
+		{
+			get
+			{
+				return eventSystem ?? (eventSystem = new EventSystem());
+			}
+		}
+
+		private static ObjectPool objectPool;
+
+		public static ObjectPool ObjectPool
+		{
+			get
+			{
+				return objectPool ?? (objectPool = new ObjectPool());
+			}
+		}
+
 		public static void Close()
 		{
 			scene.Dispose();
+			eventSystem = null;
 			scene = null;
+			objectPool = null;
 		}
 	}
 }

+ 2 - 2
Unity/Assets/Scripts/Helper/BundleHelper.cs

@@ -8,9 +8,9 @@ namespace Model
 	{
 		public static async Task DownloadBundle()
 		{
-			EventSystem.Instance.Run(EventIdType.LoadingBegin);
+			Game.EventSystem.Run(EventIdType.LoadingBegin);
 			await StartDownLoadResources();
-			EventSystem.Instance.Run(EventIdType.LoadingFinish);
+			Game.EventSystem.Run(EventIdType.LoadingFinish);
 		}
 		
 		public static async Task StartDownLoadResources()

+ 3 - 3
Unity/Assets/Scripts/Helper/DllHelper.cs

@@ -46,18 +46,18 @@ namespace Model
 
 			return appDomain.LoadedTypes.Values.Select(x => x.ReflectionType).ToArray();
 #else
-			if (EventSystem.Instance.HotfixAssembly == null)
+			if (Game.EventSystem.HotfixAssembly == null)
 			{
 				return new Type[0];
 			}
-			return EventSystem.Instance.HotfixAssembly.GetTypes();
+			return Game.EventSystem.HotfixAssembly.GetTypes();
 #endif
 		}
 
 		public static Type[] GetMonoTypes()
 		{
 			List<Type> types = new List<Type>();
-			foreach (Assembly assembly in EventSystem.Instance.GetAll())
+			foreach (Assembly assembly in Game.EventSystem.GetAll())
 			{
 				types.AddRange(assembly.GetTypes());
 			}

+ 7 - 8
Unity/Assets/Scripts/Init.cs

@@ -35,7 +35,7 @@ namespace Model
 				Instance = this;
 
 
-				EventSystem.Instance.Add(DLLType.Model, typeof(Init).Assembly);
+				Game.EventSystem.Add(DLLType.Model, typeof(Init).Assembly);
 
 				Game.Scene.AddComponent<GlobalConfigComponent>();
 				Game.Scene.AddComponent<OpcodeTypeComponent>();
@@ -62,7 +62,7 @@ namespace Model
 
 				this.AppDomain = new ILRuntime.Runtime.Enviorment.AppDomain();
 				Game.Scene.GetComponent<ResourcesComponent>().LoadBundle($"code.unity3d");
-				EventSystem.Instance.LoadHotfixDll();
+				Game.EventSystem.LoadHotfixDll();
 				Game.Scene.GetComponent<ResourcesComponent>().UnloadBundle($"code.unity3d");
 				ILHelper.InitILRuntime();
 				
@@ -73,9 +73,9 @@ namespace Model
 #else
 				Log.Debug("run in mono mode");
 				Game.Scene.GetComponent<ResourcesComponent>().LoadBundle($"code.unity3d");
-				EventSystem.Instance.LoadHotfixDll();
+				Game.EventSystem.LoadHotfixDll();
 				Game.Scene.GetComponent<ResourcesComponent>().UnloadBundle($"code.unity3d");
-				Type hotfixInit = EventSystem.Instance.HotfixAssembly.GetType("Hotfix.Init");
+				Type hotfixInit = Game.EventSystem.HotfixAssembly.GetType("Hotfix.Init");
 				this.start = new MonoStaticMethod(hotfixInit, "Start");
 				this.update = new MonoStaticMethod(hotfixInit, "Update");
 				this.lateUpdate = new MonoStaticMethod(hotfixInit, "LateUpdate");
@@ -85,7 +85,7 @@ namespace Model
 				// 进入热更新层
 				this.start.Run();
 
-				EventSystem.Instance.Run(EventIdType.InitSceneStart);
+				Game.EventSystem.Run(EventIdType.InitSceneStart);
 			}
 			catch (Exception e)
 			{
@@ -96,20 +96,19 @@ namespace Model
 		private void Update()
 		{
 			this.update?.Run();
-			EventSystem.Instance.Update();
+			Game.EventSystem.Update();
 		}
 
 		private void LateUpdate()
 		{
 			this.lateUpdate?.Run();
-			EventSystem.Instance.LateUpdate();
+			Game.EventSystem.LateUpdate();
 		}
 
 		private void OnApplicationQuit()
 		{
 			Instance = null;
 			Game.Close();
-			EventSystem.Close();
 			this.onApplicationQuit?.Run();
 		}
 	}

+ 8 - 8
Unity/Hotfix/Base/Object/ComponentFactory.cs

@@ -6,33 +6,33 @@ namespace Hotfix
 	{
 		public static T Create<T>(Entity entity) where T : Component
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectSystem.Instance.Awake(disposer);
+			Hotfix.EventSystem.Awake(disposer);
 			return disposer;
 		}
 
 		public static T Create<T, A>(Entity entity, A a) where T : Component
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectSystem.Instance.Awake(disposer, a);
+			Hotfix.EventSystem.Awake(disposer, a);
 			return disposer;
 		}
 
 		public static T Create<T, A, B>(Entity entity, A a, B b) where T : Component
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectSystem.Instance.Awake(disposer, a, b);
+			Hotfix.EventSystem.Awake(disposer, a, b);
 			return disposer;
 		}
 
 		public static T Create<T, A, B, C>(Entity entity, A a, B b, C c) where T : Component
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectSystem.Instance.Awake(disposer, a, b, c);
+			Hotfix.EventSystem.Awake(disposer, a, b, c);
 			return disposer;
 		}
 	}

+ 2 - 3
Unity/Hotfix/Base/Object/Disposer.cs

@@ -1,5 +1,4 @@
-using System;
-using Model;
+using Model;
 
 namespace Hotfix
 {
@@ -24,7 +23,7 @@ namespace Hotfix
 			this.Id = 0;
 			if (this.IsFromPool)
 			{
-				ObjectPool.Instance.Recycle(this);
+				Hotfix.ObjectPool.Recycle(this);
 			}
 		}
 	}

+ 17 - 19
Unity/Hotfix/Base/Object/EntityFactory.cs

@@ -1,66 +1,64 @@
-using System;
-
-namespace Hotfix
+namespace Hotfix
 {
 	public static class EntityFactory
 	{
 		public static T Create<T>() where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
-			ObjectSystem.Instance.Awake(disposer);
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
+			Hotfix.EventSystem.Awake(disposer);
 			return disposer;
 		}
 
 		public static T Create<T, A>(A a) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
-			ObjectSystem.Instance.Awake(disposer, a);
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
+			Hotfix.EventSystem.Awake(disposer, a);
 			return disposer;
 		}
 
 		public static T Create<T, A, B>(A a, B b) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
-			ObjectSystem.Instance.Awake(disposer, a, b);
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
+			Hotfix.EventSystem.Awake(disposer, a, b);
 			return disposer;
 		}
 
 		public static T Create<T, A, B, C>(A a, B b, C c) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
-			ObjectSystem.Instance.Awake(disposer, a, b, c);
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
+			Hotfix.EventSystem.Awake(disposer, a, b, c);
 			return disposer;
 		}
 
 		public static T CreateWithId<T>(long id) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
 			disposer.Id = id;
-			ObjectSystem.Instance.Awake(disposer);
+			Hotfix.EventSystem.Awake(disposer);
 			return disposer;
 		}
 
 		public static T CreateWithId<T, A>(long id, A a) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
 			disposer.Id = id;
-			ObjectSystem.Instance.Awake(disposer, a);
+			Hotfix.EventSystem.Awake(disposer, a);
 			return disposer;
 		}
 
 		public static T CreateWithId<T, A, B>(long id, A a, B b) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
 			disposer.Id = id;
-			ObjectSystem.Instance.Awake(disposer, a, b);
+			Hotfix.EventSystem.Awake(disposer, a, b);
 			return disposer;
 		}
 
 		public static T CreateWithId<T, A, B, C>(long id, A a, B b, C c) where T : Disposer
 		{
-			T disposer = ObjectPool.Instance.Fetch<T>();
+			T disposer = Hotfix.ObjectPool.Fetch<T>();
 			disposer.Id = id;
-			ObjectSystem.Instance.Awake(disposer, a, b, c);
+			Hotfix.EventSystem.Awake(disposer, a, b, c);
 			return disposer;
 		}
 	}

+ 24 - 39
Unity/Hotfix/Base/Object/ObjectSystem.cs → Unity/Hotfix/Base/Object/EventSystem.cs

@@ -4,13 +4,13 @@ using Model;
 
 namespace Hotfix
 {
-	public interface IObjectEvent
+	public interface IObjectSystem
 	{
 		Type Type();
 		void Set(object value);
 	}
 
-	public abstract class ObjectEvent<T> : IObjectEvent
+	public abstract class ObjectSystem<T> : IObjectSystem
 	{
 		private T value;
 
@@ -30,24 +30,9 @@ namespace Hotfix
 		}
 	}
 
-	public sealed class ObjectSystem
+	public sealed class EventSystem
 	{
-		private static ObjectSystem instance;
-
-		public static ObjectSystem Instance
-		{
-			get
-			{
-				return instance ?? (instance = new ObjectSystem());
-			}
-		}
-
-		public static void Close()
-		{
-			instance = null;
-		}
-		
-		private readonly Dictionary<Type, IObjectEvent> disposerEvents = new Dictionary<Type, IObjectEvent>();
+		private readonly Dictionary<Type, IObjectSystem> disposerEvents = new Dictionary<Type, IObjectSystem>();
 
 		private Queue<Disposer> updates = new Queue<Disposer>();
 		private Queue<Disposer> updates2 = new Queue<Disposer>();
@@ -60,7 +45,7 @@ namespace Hotfix
 		private Queue<Disposer> lateUpdates = new Queue<Disposer>();
 		private Queue<Disposer> lateUpdates2 = new Queue<Disposer>();
 
-		public ObjectSystem()
+		public EventSystem()
 		{
 			this.disposerEvents.Clear();
 
@@ -75,13 +60,13 @@ namespace Hotfix
 				}
 
 				object obj = Activator.CreateInstance(type);
-				IObjectEvent objectEvent = obj as IObjectEvent;
-				if (objectEvent == null)
+				IObjectSystem objectSystem = obj as IObjectSystem;
+				if (objectSystem == null)
 				{
 					Log.Error($"组件事件没有继承IObjectEvent: {type.Name}");
 					continue;
 				}
-				this.disposerEvents[objectEvent.Type()] = objectEvent;
+				this.disposerEvents[objectSystem.Type()] = objectSystem;
 			}
 
 			this.Load();
@@ -89,7 +74,7 @@ namespace Hotfix
 
 		public void Add(Disposer disposer)
 		{
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectSystem objectEvent))
 			{
 				return;
 			}
@@ -112,9 +97,9 @@ namespace Hotfix
 
 		public void Awake(Disposer disposer)
 		{
-			Instance.Add(disposer);
+			this.Add(disposer);
 
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectSystem objectEvent))
 			{
 				return;
 			}
@@ -129,9 +114,9 @@ namespace Hotfix
 
 		public void Awake<P1>(Disposer disposer, P1 p1)
 		{
-			Instance.Add(disposer);
+			this.Add(disposer);
 
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectSystem objectEvent))
 			{
 				throw new Exception($"{disposer.GetType().Name} not found awake1");
 			}
@@ -146,9 +131,9 @@ namespace Hotfix
 
 		public void Awake<P1, P2>(Disposer disposer, P1 p1, P2 p2)
 		{
-			Instance.Add(disposer);
+			this.Add(disposer);
 
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectSystem objectEvent))
 			{
 				throw new Exception($"{disposer.GetType().Name} not found awake2");
 			}
@@ -163,9 +148,9 @@ namespace Hotfix
 
 		public void Awake<P1, P2, P3>(Disposer disposer, P1 p1, P2 p2, P3 p3)
 		{
-			Instance.Add(disposer);
+			this.Add(disposer);
 
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectSystem objectEvent))
 			{
 				throw new Exception($"{disposer.GetType().Name} not found awake3");
 			}
@@ -188,7 +173,7 @@ namespace Hotfix
 					continue;
 				}
 
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectSystem objectEvent))
 				{
 					continue;
 				}
@@ -219,7 +204,7 @@ namespace Hotfix
 			while (this.starts.Count > 0)
 			{
 				Disposer disposer = this.starts.Dequeue();
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectSystem objectEvent))
 				{
 					continue;
 				}
@@ -244,7 +229,7 @@ namespace Hotfix
 				{
 					continue;
 				}
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectSystem objectEvent))
 				{
 					continue;
 				}
@@ -280,20 +265,20 @@ namespace Hotfix
 					continue;
 				}
 
-				IObjectEvent objectEvent;
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+				IObjectSystem objectSystem;
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
 				{
 					continue;
 				}
 
 				this.lateUpdates2.Enqueue(disposer);
 
-				ILateUpdate iLateUpdate = objectEvent as ILateUpdate;
+				ILateUpdate iLateUpdate = objectSystem as ILateUpdate;
 				if (iLateUpdate == null)
 				{
 					continue;
 				}
-				objectEvent.Set(disposer);
+				objectSystem.Set(disposer);
 				try
 				{
 					iLateUpdate.LateUpdate();

+ 0 - 19
Unity/Hotfix/Base/Object/ObjectPool.cs

@@ -6,27 +6,8 @@ namespace Hotfix
 {
     public class ObjectPool
     {
-	    private static ObjectPool instance;
-
-	    public static ObjectPool Instance
-	    {
-		    get
-		    {
-				return instance ?? (instance = new ObjectPool());
-			}
-	    }
-
         private readonly Dictionary<Type, Queue<Disposer>> dictionary = new Dictionary<Type, Queue<Disposer>>();
 
-        private ObjectPool()
-        {
-        }
-
-	    public static void Close()
-	    {
-		    instance = null;
-	    }
-
         public Disposer Fetch(Type type)
         {
 	        Queue<Disposer> queue;

+ 1 - 1
Unity/Hotfix/Component/UIComponent.cs

@@ -7,7 +7,7 @@ using UnityEngine;
 namespace Hotfix
 {
 	[ObjectEvent]
-	public class UIComponentEvent : ObjectEvent<UIComponent>, IAwake, ILoad
+	public class UiComponentSystem : ObjectSystem<UIComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{

+ 23 - 1
Unity/Hotfix/Entity/Hotfix.cs

@@ -16,11 +16,33 @@
 				return scene;
 			}
 		}
-		
+
+		private static EventSystem eventSystem;
+
+		public static EventSystem EventSystem
+		{
+			get
+			{
+				return eventSystem ?? (eventSystem = new EventSystem());
+			}
+		}
+
+		private static ObjectPool objectPool;
+
+		public static ObjectPool ObjectPool
+		{
+			get
+			{
+				return objectPool ?? (objectPool = new ObjectPool());
+			}
+		}
+
 		public static void Close()
 		{
 			scene.Dispose();
 			scene = null;
+			eventSystem = null;
+			objectPool = null;
 		}
 	}
 }

+ 2 - 1
Unity/Hotfix/Entity/UI.cs

@@ -4,7 +4,7 @@ using UnityEngine;
 namespace Hotfix
 {
 	[Model.ObjectEvent]
-	public class UIEvent : ObjectEvent<UI>, IAwake<Scene, UI, GameObject>
+	public class UiSystem : ObjectSystem<UI>, IAwake<Scene, UI, GameObject>
 	{
 		public void Awake(Scene scene, UI parent, GameObject gameObject)
 		{
@@ -68,6 +68,7 @@ namespace Hotfix
 		public void Add(UI ui)
 		{
 			this.children.Add(ui.Name, ui);
+			ui.Parent = this;
 		}
 
 		public void Remove(string name)

+ 2 - 4
Unity/Hotfix/Init.cs

@@ -9,7 +9,6 @@ namespace Hotfix
 		{
 			try
 			{
-				ObjectSystem objectSystem = ObjectSystem.Instance;
 				Hotfix.Scene.ModelScene = Game.Scene;
 				Hotfix.Scene.AddComponent<UIComponent>();
 			}
@@ -23,7 +22,7 @@ namespace Hotfix
 		{
 			try
 			{
-				ObjectSystem.Instance.Update();
+				Hotfix.EventSystem.Update();
 			}
 			catch (Exception e)
 			{
@@ -35,7 +34,7 @@ namespace Hotfix
 		{
 			try
 			{
-				ObjectSystem.Instance.LateUpdate();
+				Hotfix.EventSystem.LateUpdate();
 			}
 			catch (Exception e)
 			{
@@ -45,7 +44,6 @@ namespace Hotfix
 
 		public static void OnApplicationQuit()
 		{
-			ObjectSystem.Close();
 			Hotfix.Close();
 		}
 	}

+ 1 - 1
Unity/Hotfix/UI/UILobby/Component/UILobbyComponent.cs

@@ -6,7 +6,7 @@ using UnityEngine.UI;
 namespace Hotfix
 {
 	[ObjectEvent]
-	public class UILobbyComponentEvent : ObjectEvent<UILobbyComponent>, IAwake
+	public class UiLobbyComponentSystem : ObjectSystem<UILobbyComponent>, IAwake
 	{
 		public void Awake()
 		{

+ 1 - 1
Unity/Hotfix/UI/UILogin/Component/UILoginComponent.cs

@@ -7,7 +7,7 @@ using UnityEngine.UI;
 namespace Hotfix
 {
 	[ObjectEvent]
-	public class UILoginComponentEvent : ObjectEvent<UILoginComponent>, IAwake
+	public class UiLoginComponentSystem : ObjectSystem<UILoginComponent>, IAwake
 	{
 		public void Awake()
 		{

+ 1 - 1
Unity/Hotfix/Unity.Hotfix.csproj

@@ -67,7 +67,7 @@
     <Compile Include="Base\Object\ISerializeToEntity.cs" />
     <Compile Include="Base\Object\IUpdate.cs" />
     <Compile Include="Base\Object\Object.cs" />
-    <Compile Include="Base\Object\ObjectSystem.cs" />
+    <Compile Include="Base\Object\EventSystem.cs" />
     <Compile Include="Base\Object\ObjectPool.cs" />
     <Compile Include="Base\Other\IUIFactory.cs" />
     <Compile Include="Component\UIComponent.cs" />

+ 5 - 8
Unity/Unity.csproj

@@ -12,15 +12,12 @@
     <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
     <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
-    <TargetFrameworkProfile>
-    </TargetFrameworkProfile>
-    <CompilerResponseFile>
-    </CompilerResponseFile>
+    <TargetFrameworkProfile></TargetFrameworkProfile>
+    <CompilerResponseFile></CompilerResponseFile>
     <UnityProjectType>Game:1</UnityProjectType>
     <UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>
     <UnityVersion>2017.1.1p4</UnityVersion>
-    <RootNamespace>
-    </RootNamespace>
+    <RootNamespace></RootNamespace>
     <LangVersion>6</LangVersion>
   </PropertyGroup>
   <PropertyGroup>
@@ -187,6 +184,7 @@
     <Compile Include="Assets\Scripts\Base\Helper\IdGenerater.cs" />
     <Compile Include="Assets\Scripts\Base\Helper\MD5Helper.cs" />
     <Compile Include="Assets\Scripts\Base\Helper\MethodInfoHelper.cs" />
+    <Compile Include="Assets\Scripts\Base\Helper\MongoHelper.cs" />
     <Compile Include="Assets\Scripts\Base\Helper\NetHelper.cs" />
     <Compile Include="Assets\Scripts\Base\Helper\ProtobufHelper.cs" />
     <Compile Include="Assets\Scripts\Base\Helper\RandomHelper.cs" />
@@ -325,7 +323,6 @@
     <Compile Include="Assets\Scripts\Helper\DllHelper.cs" />
     <Compile Include="Assets\Scripts\Helper\GameObjectHelper.cs" />
     <Compile Include="Assets\Scripts\Helper\ILHelper.cs" />
-    <Compile Include="Assets\Scripts\Base\Helper\MongoHelper.cs" />
     <Compile Include="Assets\Scripts\Helper\PathHelper.cs" />
     <Compile Include="Assets\Scripts\Helper\PositionHelper.cs" />
     <Compile Include="Assets\Scripts\Helper\ResourceHelper.cs" />
@@ -582,4 +579,4 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="GenerateTargetFrameworkMonikerAttribute" />
-</Project>
+</Project>