Răsfoiți Sursa

ObjectEvent跟EventComponent合并,统一成EventSystem,所有的事件都由EventSystem分发

tanghai 8 ani în urmă
părinte
comite
8786552fae
100 a modificat fișierele cu 945 adăugiri și 1050 ștergeri
  1. 1 1
      Client-Server.sln.DotSettings.user
  2. 3 3
      Server/App/Program.cs
  3. 0 1
      Server/Base/Server.Base.csproj
  4. 1 1
      Server/Hotfix/Handler/M2A_ReloadHandler.cs
  5. 5 4
      Server/Hotfix/System/ActorComponentSystem.cs
  6. 2 2
      Server/Hotfix/System/NetInnerComponentSystem.cs
  7. 2 2
      Server/Hotfix/System/NetOuterComponentSystem.cs
  8. 2 2
      Server/Hotfix/System/RealmGateAddressComponentSystem.cs
  9. 2 2
      Server/Hotfix/System/ServerFrameComponentSystem.cs
  10. 1 1
      Server/Model/Base/Helper/DllHelper.cs
  11. 146 30
      Server/Model/Base/Object/EventSystem.cs
  12. 2 1
      Server/Model/Component/ActorComponent.cs
  13. 1 1
      Server/Model/Component/ActorManagerComponent.cs
  14. 1 1
      Server/Model/Component/ActorMessageDispatherComponent.cs
  15. 1 1
      Server/Model/Component/ActorProxyComponent.cs
  16. 1 1
      Server/Model/Component/AppManagerComponent.cs
  17. 1 1
      Server/Model/Component/BenchmarkComponent.cs
  18. 1 1
      Server/Model/Component/DBCacheComponent.cs
  19. 1 1
      Server/Model/Component/DBComponent.cs
  20. 1 1
      Server/Model/Component/DBProxyComponent.cs
  21. 0 138
      Server/Model/Component/EventComponent.cs
  22. 1 1
      Server/Model/Component/HttpComponent.cs
  23. 4 4
      Server/Model/Component/LocationComponent.cs
  24. 1 1
      Server/Model/Component/LocationProxyComponent.cs
  25. 1 1
      Server/Model/Component/MessageDispatherComponent.cs
  26. 2 2
      Server/Model/Component/NumericComponent.cs
  27. 1 1
      Server/Model/Component/OpcodeTypeComponent.cs
  28. 1 1
      Server/Model/Component/OptionComponent.cs
  29. 1 1
      Server/Model/Component/PlayerComponent.cs
  30. 1 1
      Server/Model/Component/StartConfigComponent.cs
  31. 3 2
      Server/Model/Component/Unit/LockComponent.cs
  32. 1 1
      Server/Model/Component/Unit/MasterComponent.cs
  33. 1 1
      Server/Model/Component/Unit/UnitGateComponent.cs
  34. 5 4
      Server/Model/Entity/ActorProxy.cs
  35. 1 1
      Server/Model/Entity/DBQueryBatchTask.cs
  36. 1 1
      Server/Model/Entity/DBQueryJsonTask.cs
  37. 1 1
      Server/Model/Entity/DBQueryTask.cs
  38. 1 1
      Server/Model/Entity/DBSaveBatchTask.cs
  39. 1 1
      Server/Model/Entity/DBSaveTask.cs
  40. 3 2
      Server/Model/Entity/DBTaskQueue.cs
  41. 0 1
      Server/Model/Entity/Game.cs
  42. 1 1
      Server/Model/Entity/Player.cs
  43. 1 1
      Server/Model/Entity/Unit.cs
  44. 4 5
      Unity/Assets/Editor/BehaviorTreeEditor/BTEditor.cs
  45. 1 1
      Unity/Assets/Editor/BehaviorTreeEditor/Component/BTNodeInfoComponent.cs
  46. 4 4
      Unity/Assets/Editor/BehaviorTreeEditor/GraphDesigner.cs
  47. 3 3
      Unity/Assets/Editor/BehaviorTreeEditor/NodeDesigner.cs
  48. 8 8
      Unity/Assets/Editor/BehaviorTreeEditor/NodeExtension.cs
  49. 2 2
      Unity/Assets/Editor/BehaviorTreeEditor/PropertyDesigner.cs
  50. BIN
      Unity/Assets/Res/Code/Hotfix.dll.bytes
  51. BIN
      Unity/Assets/Res/Code/Hotfix.mdb.bytes
  52. BIN
      Unity/Assets/Res/Code/Hotfix.pdb.bytes
  53. 1 1
      Unity/Assets/Scripts/Base/BehaviorTree/BehaviorTree.cs
  54. 0 39
      Unity/Assets/Scripts/Base/EQueue.cs
  55. 0 12
      Unity/Assets/Scripts/Base/EQueue.cs.meta
  56. 4 4
      Unity/Assets/Scripts/Base/Object/ComponentFactory.cs
  57. 8 8
      Unity/Assets/Scripts/Base/Object/EntityFactory.cs
  58. 489 0
      Unity/Assets/Scripts/Base/Object/EventSystem.cs
  59. 0 0
      Unity/Assets/Scripts/Base/Object/EventSystem.cs.meta
  60. 102 0
      Unity/Assets/Scripts/Base/Object/IEventMethod.cs
  61. 2 2
      Unity/Assets/Scripts/Base/Object/IEventMethod.cs.meta
  62. 0 357
      Unity/Assets/Scripts/Base/Object/ObjectEvents.cs
  63. 5 5
      Unity/Assets/Scripts/Base/Object/ObjectPool.cs
  64. 1 1
      Unity/Assets/Scripts/Component/AnimatorComponent.cs
  65. 2 2
      Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs
  66. 1 1
      Unity/Assets/Scripts/Component/BundleDownloaderComponent.cs
  67. 1 1
      Unity/Assets/Scripts/Component/CameraComponent.cs
  68. 5 3
      Unity/Assets/Scripts/Component/ClientFrameComponent.cs
  69. 1 1
      Unity/Assets/Scripts/Component/ConfigComponent.cs
  70. 0 254
      Unity/Assets/Scripts/Component/EventComponent.cs
  71. 1 1
      Unity/Assets/Scripts/Component/GlobalConfigComponent.cs
  72. 1 1
      Unity/Assets/Scripts/Component/MessageDispatherComponent.cs
  73. 1 1
      Unity/Assets/Scripts/Component/MoveComponent.cs
  74. 1 1
      Unity/Assets/Scripts/Component/NetOuterComponent.cs
  75. 2 2
      Unity/Assets/Scripts/Component/NumericComponent.cs
  76. 1 1
      Unity/Assets/Scripts/Component/NumericWatcherComponent.cs
  77. 1 1
      Unity/Assets/Scripts/Component/OpcodeTypeComponent.cs
  78. 1 1
      Unity/Assets/Scripts/Component/OperaComponent.cs
  79. 1 1
      Unity/Assets/Scripts/Component/PlayerComponent.cs
  80. 1 1
      Unity/Assets/Scripts/Component/SessionComponent.cs
  81. 1 1
      Unity/Assets/Scripts/Component/TimerComponent.cs
  82. 3 3
      Unity/Assets/Scripts/Component/UIComponent.cs
  83. 1 1
      Unity/Assets/Scripts/Component/UnitComponent.cs
  84. 1 1
      Unity/Assets/Scripts/Entity/AssetsBundleLoaderAsync.cs
  85. 1 1
      Unity/Assets/Scripts/Entity/AssetsLoaderAsync.cs
  86. 0 1
      Unity/Assets/Scripts/Entity/Game.cs
  87. 1 1
      Unity/Assets/Scripts/Entity/Session.cs
  88. 1 1
      Unity/Assets/Scripts/Entity/UI.cs
  89. 1 1
      Unity/Assets/Scripts/Entity/Unit.cs
  90. 1 1
      Unity/Assets/Scripts/Entity/UnityWebRequestAsync.cs
  91. 1 1
      Unity/Assets/Scripts/Entity/WWWAsync.cs
  92. 2 2
      Unity/Assets/Scripts/Helper/BundleHelper.cs
  93. 3 3
      Unity/Assets/Scripts/Helper/DllHelper.cs
  94. 8 8
      Unity/Assets/Scripts/Init.cs
  95. 1 1
      Unity/Assets/Scripts/UI/UILoading/Component/UILoadingComponent.cs
  96. 0 9
      Unity/Assets/ThirdParty/ILRuntime/Mono.Cecil.Mdb.meta
  97. 4 4
      Unity/Hotfix/Base/Object/ComponentFactory.cs
  98. 8 8
      Unity/Hotfix/Base/Object/EntityFactory.cs
  99. 5 5
      Unity/Hotfix/Base/Object/ObjectPool.cs
  100. 39 45
      Unity/Hotfix/Base/Object/ObjectSystem.cs

+ 1 - 1
Client-Server.sln.DotSettings.user

@@ -9,7 +9,7 @@
 	<s:String x:Key="/Default/CodeInspection/Highlighting/AnalysisEnabled/@EntryValue">VISIBLE_FILES</s:String>
 	<s:String x:Key="/Default/CodeStyle/CodeCleanup/Profiles/=Unity/@EntryIndexedValue">&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;Profile name="Unity"&gt;&lt;CSArrangeThisQualifier&gt;True&lt;/CSArrangeThisQualifier&gt;&lt;CSRemoveCodeRedundancies&gt;True&lt;/CSRemoveCodeRedundancies&gt;&lt;CSMakeFieldReadonly&gt;True&lt;/CSMakeFieldReadonly&gt;&lt;CSUseVar&gt;&lt;BehavourStyle&gt;DISABLED&lt;/BehavourStyle&gt;&lt;LocalVariableStyle&gt;IMPLICIT_WHEN_INITIALIZER_HAS_TYPE&lt;/LocalVariableStyle&gt;&lt;ForeachVariableStyle&gt;IMPLICIT_EXCEPT_SIMPLE_TYPES&lt;/ForeachVariableStyle&gt;&lt;/CSUseVar&gt;&lt;CSOptimizeUsings&gt;&lt;OptimizeUsings&gt;True&lt;/OptimizeUsings&gt;&lt;EmbraceInRegion&gt;False&lt;/EmbraceInRegion&gt;&lt;RegionName&gt;&lt;/RegionName&gt;&lt;/CSOptimizeUsings&gt;&lt;CSShortenReferences&gt;True&lt;/CSShortenReferences&gt;&lt;CSReformatCode&gt;True&lt;/CSReformatCode&gt;&lt;CSMakeAutoPropertyGetOnly&gt;True&lt;/CSMakeAutoPropertyGetOnly&gt;&lt;CSUseAutoProperty&gt;True&lt;/CSUseAutoProperty&gt;&lt;RemoveCodeRedundancies&gt;True&lt;/RemoveCodeRedundancies&gt;&lt;CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="True" ArrangeArgumentsStyle="True" ArrangeCodeBodyStyle="True" /&gt;&lt;/Profile&gt;</s:String>
 	<s:String x:Key="/Default/CodeStyle/CodeCleanup/RecentlyUsedProfile/@EntryValue">Unity</s:String>
-	<s:String x:Key="/Default/Housekeeping/Layout/DialogWindows/RefactoringWizardWindow/Location/@EntryValue">247,-23</s:String>
+	<s:String x:Key="/Default/Housekeeping/Layout/DialogWindows/RefactoringWizardWindow/Location/@EntryValue">247,-158</s:String>
 	<s:Int64 x:Key="/Default/Environment/SearchAndNavigation/DefaultOccurrencesGroupingIndex/@EntryValue">0</s:Int64>
 	<s:String x:Key="/Default/Profiling/Configurations/=1/@EntryIndexedValue">&lt;data&gt;&lt;HostParameters type="LocalHostParameters" /&gt;&lt;Argument type="StandaloneArgument"&gt;&lt;Arguments IsNull="False"&gt;&lt;/Arguments&gt;&lt;FileName IsNull="False"&gt;&lt;/FileName&gt;&lt;WorkingDirectory IsNull="False"&gt;&lt;/WorkingDirectory&gt;&lt;Scope&gt;&lt;ProcessFilters /&gt;&lt;/Scope&gt;&lt;/Argument&gt;&lt;Info type="TimelineInfo" /&gt;&lt;HostOptions type="HostOptions"&gt;&lt;HostTempPath IsNull="False"&gt;&lt;/HostTempPath&gt;&lt;/HostOptions&gt;&lt;/data&gt;</s:String>
 	</wpf:ResourceDictionary>

+ 3 - 3
Server/App/Program.cs

@@ -18,8 +18,8 @@ namespace App
 			
 			try
 			{
-				ObjectEvents.Instance.Add("Model", typeof(Game).Assembly);
-				ObjectEvents.Instance.Add("Hotfix", DllHelper.GetHotfixAssembly());
+				EventSystem.Instance.Add(DLLType.Model, typeof(Game).Assembly);
+				EventSystem.Instance.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();
-						ObjectEvents.Instance.Update();
+						EventSystem.Instance.Update();
 					}
 					catch (Exception e)
 					{

+ 0 - 1
Server/Base/Server.Base.csproj

@@ -22,7 +22,6 @@
 
   <ItemGroup>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\DoubleMap.cs" Link="DoubleMap.cs" />
-    <Compile Include="..\..\Unity\Assets\Scripts\Base\EQueue.cs" Link="EQueue.cs" />
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Helper\ArrayHelper.cs" Link="Helper\ArrayHelper.cs" />
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Helper\ByteHelper.cs" Link="Helper\ByteHelper.cs" />
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Helper\EnumHelper.cs" Link="Helper\EnumHelper.cs" />

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

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

+ 5 - 4
Server/Hotfix/System/ActorComponentSystem.cs

@@ -1,11 +1,12 @@
 using System;
+using System.Collections.Generic;
 using System.Threading.Tasks;
 using Model;
 
 namespace Hotfix
 {
 	[ObjectEvent]
-	public class ActorComponentEvent : ObjectEvent<ActorComponent>, IAwake, IAwake<IEntityActorHandler>, ILoad
+	public class ActorComponentSystem : ObjectSystem<ActorComponent>, IAwake, IAwake<IEntityActorHandler>, ILoad
 	{
 		public void Awake()
 		{
@@ -25,12 +26,12 @@ namespace Hotfix
 	/// <summary>
 	/// 挂上这个组件表示该Entity是一个Actor, 它会将Entity位置注册到Location Server, 接收的消息将会队列处理
 	/// </summary>
-	public static class ActorComponentSystem
+	public static class ActorComponentEx
 	{
 		public static void Awake(this ActorComponent self)
 		{
 			self.entityActorHandler = new CommonEntityActorHandler();
-			self.queue = new EQueue<ActorMessageInfo>();
+			self.queue = new Queue<ActorMessageInfo>();
 			self.actorId = self.Parent.Id;
 			Game.Scene.GetComponent<ActorManagerComponent>().Add(self.Parent);
 			self.HandleAsync();
@@ -39,7 +40,7 @@ namespace Hotfix
 		public static void Awake(this ActorComponent self, IEntityActorHandler iEntityActorHandler)
 		{
 			self.entityActorHandler = iEntityActorHandler;
-			self.queue = new EQueue<ActorMessageInfo>();
+			self.queue = new Queue<ActorMessageInfo>();
 			self.actorId = self.Parent.Id;
 			Game.Scene.GetComponent<ActorManagerComponent>().Add(self.Parent);
 			self.HandleAsync();

+ 2 - 2
Server/Hotfix/System/NetInnerComponentSystem.cs

@@ -4,7 +4,7 @@ using Model;
 namespace Hotfix
 {
 	[ObjectEvent]
-	public class NetInnerComponentEvent : ObjectEvent<NetInnerComponent>, IAwake, IAwake<IPEndPoint>, IUpdate
+	public class NetInnerComponentSystem : ObjectSystem<NetInnerComponent>, IAwake, IAwake<IPEndPoint>, IUpdate
 	{
 		public void Awake()
 		{
@@ -22,7 +22,7 @@ namespace Hotfix
 		}
 	}
 	
-	public static class NetInnerComponentSystem
+	public static class NetInnerComponentEx
 	{
 		public static void Awake(this NetInnerComponent self)
 		{

+ 2 - 2
Server/Hotfix/System/NetOuterComponentSystem.cs

@@ -4,7 +4,7 @@ using Model;
 namespace Hotfix
 {
 	[ObjectEvent]
-	public class NetOuterComponentEvent : ObjectEvent<NetOuterComponent>, IAwake, IAwake<IPEndPoint>, IUpdate
+	public class NetOuterComponentSystem : ObjectSystem<NetOuterComponent>, IAwake, IAwake<IPEndPoint>, IUpdate
 	{
 		public void Awake()
 		{
@@ -22,7 +22,7 @@ namespace Hotfix
 		}
 	}
 
-	public static class NetOuterComponentSystem
+	public static class NetOuterComponentEx
 	{
 		public static void Awake(this NetOuterComponent self)
 		{

+ 2 - 2
Server/Hotfix/System/RealmGateAddressComponentSystem.cs

@@ -3,7 +3,7 @@
 namespace Hotfix
 {
 	[ObjectEvent]
-	public class RealmGateAddressComponentEvent : ObjectEvent<RealmGateAddressComponent>, IStart
+	public class RealmGateAddressComponentSystem : ObjectSystem<RealmGateAddressComponent>, IStart
 	{
 		public void Start()
 		{
@@ -11,7 +11,7 @@ namespace Hotfix
 		}
 	}
 	
-	public static class RealmGateAddressComponentSystem
+	public static class RealmGateAddressComponentEx
 	{
 		public static void Start(this RealmGateAddressComponent component)
 		{

+ 2 - 2
Server/Hotfix/System/ServerFrameComponentSystem.cs

@@ -3,7 +3,7 @@
 namespace Hotfix
 {
     [ObjectEvent]
-    public class ServerFrameComponentEvent : ObjectEvent<ServerFrameComponent>, IAwake
+    public class ServerFrameComponentSystem : ObjectSystem<ServerFrameComponent>, IAwake
     {
         public void Awake()
         {
@@ -11,7 +11,7 @@ namespace Hotfix
         }
     }
 	
-    public static class ServerFrameComponentSystem
+    public static class ServerFrameComponentEx
     {
         public static void Awake(this ServerFrameComponent self)
         {

+ 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 ObjectEvents.Instance.GetAll())
+			foreach (Assembly assembly in EventSystem.Instance.GetAll())
 			{
 				types.AddRange(assembly.GetTypes());
 			}

+ 146 - 30
Server/Model/Base/Object/ObjectEvents.cs → Server/Model/Base/Object/EventSystem.cs

@@ -5,13 +5,19 @@ using System.Reflection;
 
 namespace Model
 {
+	public enum DLLType
+	{
+		Model,
+		Hotfix,
+	}
+
 	public interface IObjectEvent
 	{
 		Type Type();
 		void Set(object value);
 	}
 
-	public abstract class ObjectEvent<T> : IObjectEvent
+	public abstract class ObjectSystem<T> : IObjectEvent
 	{
 		private T value;
 
@@ -31,64 +37,87 @@ namespace Model
 		}
 	}
 
-	public sealed class ObjectEvents
+	public sealed class EventSystem
 	{
-		private static ObjectEvents instance;
+		private static EventSystem instance;
 
-		public static ObjectEvents Instance
+		public static EventSystem Instance
 		{
 			get
 			{
-				return instance ?? (instance = new ObjectEvents());
+				return instance ?? (instance = new EventSystem());
 			}
 		}
 
-		private readonly Dictionary<string, Assembly> assemblies = new Dictionary<string, Assembly>();
+		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>>();
 
-		private Dictionary<Type, IObjectEvent> disposerEvents;
+		private readonly Dictionary<Type, IObjectEvent> disposerEvents = new Dictionary<Type, IObjectEvent>();
 
-		private EQueue<Disposer> updates = new EQueue<Disposer>();
-		private EQueue<Disposer> updates2 = new EQueue<Disposer>();
+		private Queue<Disposer> updates = new Queue<Disposer>();
+		private Queue<Disposer> updates2 = new Queue<Disposer>();
 
-		private EQueue<Disposer> starts = new EQueue<Disposer>();
+		private readonly Queue<Disposer> starts = new Queue<Disposer>();
 
-		private EQueue<Disposer> loaders = new EQueue<Disposer>();
-		private EQueue<Disposer> loaders2 = new EQueue<Disposer>();
+		private Queue<Disposer> loaders = new Queue<Disposer>();
+		private Queue<Disposer> loaders2 = new Queue<Disposer>();
 		
-		public void Add(string name, Assembly assembly)
+		public void Add(DLLType dllType, Assembly assembly)
 		{
-			this.assemblies[name] = assembly;
+			this.assemblies[dllType] = assembly;
+
+			this.disposerEvents.Clear();
 
-			this.disposerEvents = new Dictionary<Type, IObjectEvent>();
-			foreach (Assembly ass in this.assemblies.Values)
+			Type[] types = DllHelper.GetMonoTypes();
+			foreach (Type type in types)
 			{
-				Type[] types = ass.GetTypes();
-				foreach (Type type in types)
+				object[] attrs = type.GetCustomAttributes(typeof(ObjectEventAttribute), false);
+
+				if (attrs.Length == 0)
+				{
+					continue;
+				}
+
+				object obj = Activator.CreateInstance(type);
+				IObjectEvent objectEvent = obj as IObjectEvent;
+				if (objectEvent == null)
 				{
-					object[] attrs = type.GetCustomAttributes(typeof(ObjectEventAttribute), false);
+					Log.Error($"组件事件没有继承IObjectEvent: {type.Name}");
+					continue;
+				}
+				this.disposerEvents[objectEvent.Type()] = objectEvent;
+			}
 
-					if (attrs.Length == 0)
-					{
-						continue;
-					}
 
+			allEvents.Clear();
+			foreach (Type type in types)
+			{
+				object[] attrs = type.GetCustomAttributes(typeof(EventAttribute), false);
+
+				foreach (object attr in attrs)
+				{
+					EventAttribute aEventAttribute = (EventAttribute)attr;
 					object obj = Activator.CreateInstance(type);
-					IObjectEvent objectEvent = obj as IObjectEvent;
-					if (objectEvent == null)
+					if (!this.allEvents.ContainsKey((EventIdType)aEventAttribute.Type))
 					{
-						Log.Error($"组件事件没有继承IObjectEvent: {type.Name}");
-						continue;
+						this.allEvents.Add((EventIdType)aEventAttribute.Type, new List<object>());
 					}
-					this.disposerEvents[objectEvent.Type()] = objectEvent;
+					this.allEvents[(EventIdType)aEventAttribute.Type].Add(obj);
 				}
 			}
 
 			this.Load();
 		}
 
-		public Assembly Get(string name)
+		public Assembly Get(DLLType dllType)
 		{
-			return this.assemblies[name];
+			return this.assemblies[dllType];
 		}
 
 		public Assembly[] GetAll()
@@ -278,5 +307,92 @@ namespace Model
 			
 			ObjectHelper.Swap(ref this.updates, ref this.updates2);
 		}
+
+		public void Run(EventIdType type)
+		{
+			List<object> iEvents;
+			if (!this.allEvents.TryGetValue(type, out iEvents))
+			{
+				return;
+			}
+			foreach (object obj in iEvents)
+			{
+				try
+				{
+					IEvent iEvent = (IEvent)obj;
+					iEvent.Run();
+				}
+				catch (Exception e)
+				{
+					Log.Error(e.ToString());
+				}
+			}
+		}
+
+		public void Run<A>(EventIdType type, A a)
+		{
+			List<object> iEvents;
+			if (!this.allEvents.TryGetValue(type, out iEvents))
+			{
+				return;
+			}
+
+			foreach (object obj in iEvents)
+			{
+				try
+				{
+					IEvent<A> iEvent = (IEvent<A>)obj;
+					iEvent.Run(a);
+				}
+				catch (Exception err)
+				{
+					Log.Error(err.ToString());
+				}
+			}
+		}
+
+		public void Run<A, B>(EventIdType type, A a, B b)
+		{
+			List<object> iEvents;
+			if (!this.allEvents.TryGetValue(type, out iEvents))
+			{
+				return;
+			}
+
+			foreach (object obj in iEvents)
+			{
+				try
+				{
+					IEvent<A, B> iEvent = (IEvent<A, B>)obj;
+					iEvent.Run(a, b);
+				}
+				catch (Exception err)
+				{
+					Log.Error(err.ToString());
+				}
+			}
+		}
+
+		public void Run<A, B, C>(EventIdType type, A a, B b, C c)
+		{
+			List<object> iEvents;
+			if (!this.allEvents.TryGetValue(type, out iEvents))
+			{
+				return;
+			}
+
+			foreach (object obj in iEvents)
+			{
+				try
+				{
+					IEvent<A, B, C> iEvent = (IEvent<A, B, C>)obj;
+					iEvent.Run(a, b, c);
+				}
+				catch (Exception err)
+				{
+					Log.Error(err.ToString());
+				}
+			}
+		}
 	}
 }

+ 2 - 1
Server/Model/Component/ActorComponent.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using System.Threading.Tasks;
 
 namespace Model
@@ -19,7 +20,7 @@ namespace Model
 		public long actorId;
 
 		// 队列处理消息
-		public EQueue<ActorMessageInfo> queue;
+		public Queue<ActorMessageInfo> queue;
 
 		public TaskCompletionSource<ActorMessageInfo> tcs;
 

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

@@ -3,7 +3,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class ActorManagerComponentEvent : ObjectEvent<ActorManagerComponent>, IAwake
+	public class ActorManagerComponentSystem : ObjectSystem<ActorManagerComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -5,7 +5,7 @@ using System.Threading.Tasks;
 namespace Model
 {
 	[ObjectEvent]
-	public class ActorMessageDispatherComponentEvent : ObjectEvent<ActorMessageDispatherComponent>, IStart, ILoad
+	public class ActorMessageDispatherComponentSystem : ObjectSystem<ActorMessageDispatherComponent>, IStart, ILoad
 	{
 		public void Start()
 		{

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

@@ -3,7 +3,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class ActorProxyComponentEvent : ObjectEvent<ActorProxyComponent>, IStart
+	public class ActorProxyComponentSystem : ObjectSystem<ActorProxyComponent>, IStart
 	{
 		// 每10s扫描一次过期的actorproxy进行回收,过期时间是1分钟
 		public async void Start()

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

@@ -6,7 +6,7 @@ using System.Linq;
 namespace Model
 {
 	[ObjectEvent]
-	public class AppManagerComponentEvent : ObjectEvent<AppManagerComponent>, IStart
+	public class AppManagerComponentSystem : ObjectSystem<AppManagerComponent>, IStart
 	{
 		public void Start()
 		{

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

@@ -5,7 +5,7 @@ using System.Threading.Tasks;
 namespace Model
 {
 	[ObjectEvent]
-	public class BenchmarkComponentEvent : ObjectEvent<BenchmarkComponent>, IAwake<IPEndPoint>
+	public class BenchmarkComponentSystem : ObjectSystem<BenchmarkComponent>, IAwake<IPEndPoint>
 	{
 		public void Awake(IPEndPoint ipEndPoint)
 		{

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

@@ -4,7 +4,7 @@ using System.Threading.Tasks;
 namespace Model
 {
 	[ObjectEvent]
-	public class DBCacheComponentEvent : ObjectEvent<DBCacheComponent>, IAwake
+	public class DbCacheComponentSystem : ObjectSystem<DBCacheComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -3,7 +3,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class DBComponentEvent : ObjectEvent<DBComponent>, IAwake
+	public class DbComponentSystem : ObjectSystem<DBComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -6,7 +6,7 @@ using System.Threading.Tasks;
 namespace Model
 {
 	[ObjectEvent]
-	public class DBProxyComponentEvent : ObjectEvent<DBProxyComponent>, IAwake
+	public class DbProxyComponentSystem : ObjectSystem<DBProxyComponent>, IAwake
 	{
 		public void Awake()
 		{

+ 0 - 138
Server/Model/Component/EventComponent.cs

@@ -1,138 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Model
-{
-	[ObjectEvent]
-	public class EventComponentEvent : ObjectEvent<EventComponent>, IAwake, ILoad
-	{
-		public void Awake()
-		{
-			this.Get().Awake();
-		}
-
-		public void Load()
-		{
-			this.Get().Load();
-		}
-	}
-
-	public class EventComponent : Component
-	{
-		private Dictionary<EventIdType, List<object>> allEvents;
-
-		public void Awake()
-		{
-			this.Load();
-		}
-
-		public void Load()
-		{
-			this.allEvents = new Dictionary<EventIdType, List<object>>();
-
-			Type[] types = DllHelper.GetMonoTypes();
-			foreach (Type type in types)
-			{
-				object[] attrs = type.GetCustomAttributes(typeof(EventAttribute), false);
-
-				foreach (object attr in attrs)
-				{
-					EventAttribute aEventAttribute = (EventAttribute)attr;
-					object obj = Activator.CreateInstance(type);
-					if (!this.allEvents.ContainsKey((EventIdType)aEventAttribute.Type))
-					{
-						this.allEvents.Add((EventIdType)aEventAttribute.Type, new List<object>());
-					}
-					this.allEvents[(EventIdType)aEventAttribute.Type].Add(obj);
-				}
-			}
-		}
-
-		public void Run(EventIdType type)
-		{
-			List<object> iEvents;
-			if (!this.allEvents.TryGetValue(type, out iEvents))
-			{
-				return;
-			}
-			foreach (object obj in iEvents)
-			{
-				try
-				{
-					IEvent iEvent = (IEvent)obj;
-					iEvent.Run();
-				}
-				catch (Exception e)
-				{
-					Log.Error(e.ToString());
-				}
-			}
-		}
-
-		public void Run<A>(EventIdType type, A a)
-		{
-			List<object> iEvents;
-			if (!this.allEvents.TryGetValue(type, out iEvents))
-			{
-				return;
-			}
-
-			foreach (object obj in iEvents)
-			{
-				try
-				{
-					IEvent<A> iEvent = (IEvent<A>)obj;
-					iEvent.Run(a);
-				}
-				catch (Exception err)
-				{
-					Log.Error(err.ToString());
-				}
-			}
-		}
-
-		public void Run<A, B>(EventIdType type, A a, B b)
-		{
-			List<object> iEvents;
-			if (!this.allEvents.TryGetValue(type, out iEvents))
-			{
-				return;
-			}
-
-			foreach (object obj in iEvents)
-			{
-				try
-				{
-					IEvent<A, B> iEvent = (IEvent<A, B>)obj;
-					iEvent.Run(a, b);
-				}
-				catch (Exception err)
-				{
-					Log.Error(err.ToString());
-				}
-			}
-		}
-
-		public void Run<A, B, C>(EventIdType type, A a, B b, C c)
-		{
-			List<object> iEvents;
-			if (!this.allEvents.TryGetValue(type, out iEvents))
-			{
-				return;
-			}
-
-			foreach (object obj in iEvents)
-			{
-				try
-				{
-					IEvent<A, B, C> iEvent = (IEvent<A, B, C>)obj;
-					iEvent.Run(a, b, c);
-				}
-				catch (Exception err)
-				{
-					Log.Error(err.ToString());
-				}
-			}
-		}
-	}
-}

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

@@ -5,7 +5,7 @@ using System.Net;
 namespace Model
 {
 	[ObjectEvent]
-	public class HttpComponentComponentEvent : ObjectEvent<HttpComponent>, IAwake, ILoad
+	public class HttpComponentComponentSystem : ObjectSystem<HttpComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{

+ 4 - 4
Server/Model/Component/LocationComponent.cs

@@ -95,7 +95,7 @@ namespace Model
 
 		private readonly Dictionary<long, int> lockDict = new Dictionary<long, int>();
 
-		private readonly Dictionary<long, EQueue<LocationTask>> taskQueues = new Dictionary<long, EQueue<LocationTask>>();
+		private readonly Dictionary<long, Queue<LocationTask>> taskQueues = new Dictionary<long, Queue<LocationTask>>();
 
 		public void Add(long key, int appId)
 		{
@@ -168,7 +168,7 @@ namespace Model
 		{
 			this.lockDict.Remove(key);
 
-			if (!this.taskQueues.TryGetValue(key, out EQueue<LocationTask> tasks))
+			if (!this.taskQueues.TryGetValue(key, out Queue<LocationTask> tasks))
 			{
 				return;
 			}
@@ -219,9 +219,9 @@ namespace Model
 
 		public void AddTask(long key, LocationTask task)
 		{
-			if (!this.taskQueues.TryGetValue(key, out EQueue<LocationTask> tasks))
+			if (!this.taskQueues.TryGetValue(key, out Queue<LocationTask> tasks))
 			{
-				tasks = new EQueue<LocationTask>();
+				tasks = new Queue<LocationTask>();
 				this.taskQueues[key] = tasks;
 			}
 			task.Scene = this.GetParent<Scene>();

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

@@ -4,7 +4,7 @@ using System.Threading.Tasks;
 namespace Model
 {
 	[ObjectEvent]
-	public class LocationProxyComponentEvent : ObjectEvent<LocationProxyComponent>, IAwake
+	public class LocationProxyComponentSystem : ObjectSystem<LocationProxyComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -4,7 +4,7 @@ using System.Collections.Generic;
 namespace Model
 {
 	[ObjectEvent]
-	public class MessageDispatherComponentEvent : ObjectEvent<MessageDispatherComponent>, IAwake, ILoad
+	public class MessageDispatherComponentSystem : ObjectSystem<MessageDispatherComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{

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

@@ -5,7 +5,7 @@ using MongoDB.Bson.Serialization.Options;
 namespace Model
 {
 	[ObjectEvent]
-	public class NumericComponentEvent : ObjectEvent<NumericComponent>, IAwake
+	public class NumericComponentSystem : ObjectSystem<NumericComponent>, IAwake
 	{
 		public void Awake()
 		{
@@ -58,7 +58,7 @@ namespace Model
 				}
 
 				NumericDic[numericType] = value;
-				Game.Scene.GetComponent<EventComponent>().Run(EventIdType.NumbericChange, this.Parent.Id, numericType, value);
+				EventSystem.Instance.Run(EventIdType.NumbericChange, this.Parent.Id, numericType, value);
 			}
 		}
 

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

@@ -4,7 +4,7 @@ using System.Collections.Generic;
 namespace Model
 {
 	[ObjectEvent]
-	public class OpcodeTypeComponentEvent : ObjectEvent<OpcodeTypeComponent>, IAwake, ILoad
+	public class OpcodeTypeComponentSystem : ObjectSystem<OpcodeTypeComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{

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

@@ -4,7 +4,7 @@ using CommandLine;
 namespace Model
 {
 	[ObjectEvent]
-	public class OptionComponentEvent : ObjectEvent<OptionComponent>, IAwake<string[]>
+	public class OptionComponentSystem : ObjectSystem<OptionComponent>, IAwake<string[]>
 	{
 		public void Awake(string[] args)
 		{

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

@@ -4,7 +4,7 @@ using System.Linq;
 namespace Model
 {
 	[ObjectEvent]
-	public class PlayerComponentEvent : ObjectEvent<PlayerComponent>, IAwake
+	public class PlayerComponentSystem : ObjectSystem<PlayerComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -6,7 +6,7 @@ using System.Linq;
 namespace Model
 {
 	[ObjectEvent]
-	public class StartConfigComponentEvent : ObjectEvent<StartConfigComponent>, IAwake<string, int>
+	public class StartConfigComponentSystem : ObjectSystem<StartConfigComponent>, IAwake<string, int>
 	{
 		public void Awake(string a, int b)
 		{

+ 3 - 2
Server/Model/Component/Unit/LockComponent.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using System.Net;
 using System.Threading.Tasks;
 
@@ -12,7 +13,7 @@ namespace Model
 	}
 
 	[ObjectEvent]
-	public class LockComponentEvent : ObjectEvent<LockComponent>, IAwake<IPEndPoint>
+	public class LockComponentSystem : ObjectSystem<LockComponent>, IAwake<IPEndPoint>
 	{
 		public void Awake(IPEndPoint a)
 		{
@@ -28,7 +29,7 @@ namespace Model
 		private LockStatus status = LockStatus.LockedNot;
 		private IPEndPoint address;
 		private int lockCount;
-		private readonly EQueue<TaskCompletionSource<bool>> queue = new EQueue<TaskCompletionSource<bool>>();
+		private readonly Queue<TaskCompletionSource<bool>> queue = new Queue<TaskCompletionSource<bool>>();
 
 		public void Awake(IPEndPoint addr)	
 		{

+ 1 - 1
Server/Model/Component/Unit/MasterComponent.cs

@@ -25,7 +25,7 @@ namespace Model
 		private IPEndPoint lockedAddress;
 
 		/// 请求锁的队列
-		private readonly EQueue<LockInfo> queue = new EQueue<LockInfo>();
+		private readonly Queue<LockInfo> queue = new Queue<LockInfo>();
 
 		public void AddGhost(IPEndPoint address)
 		{

+ 1 - 1
Server/Model/Component/Unit/UnitGateComponent.cs

@@ -1,7 +1,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class UnitGateComponentEvent : ObjectEvent<UnitGateComponent>, IAwake<long>
+	public class UnitGateComponentSystem : ObjectSystem<UnitGateComponent>, IAwake<long>
 	{
 		public void Awake(long gateSessionId)
 		{

+ 5 - 4
Server/Model/Entity/ActorProxy.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using System.Net;
 using System.Threading;
 using System.Threading.Tasks;
@@ -76,7 +77,7 @@ namespace Model
 
 
 	[ObjectEvent]
-	public class ActorProxyEvent : ObjectEvent<ActorProxy>, IAwake, IStart
+	public class ActorProxySystem : ObjectSystem<ActorProxy>, IAwake, IStart
 	{
 		public void Awake()
 		{
@@ -95,10 +96,10 @@ namespace Model
 		public IPEndPoint Address;
 
 		// 已发送等待回应的消息
-		public EQueue<ActorTask> RunningTasks = new EQueue<ActorTask>();
+		public Queue<ActorTask> RunningTasks = new Queue<ActorTask>();
 
 		// 还没发送的消息
-		public EQueue<ActorTask> WaitingTasks = new EQueue<ActorTask>();
+		public Queue<ActorTask> WaitingTasks = new Queue<ActorTask>();
 
 		// 发送窗口大小
 		public int WindowSize = 1;
@@ -311,7 +312,7 @@ namespace Model
 			}
 		}
 
-		public string DebugQueue(EQueue<ActorTask> tasks)
+		public string DebugQueue(Queue<ActorTask> tasks)
 		{
 			string s = "";
 			foreach (ActorTask task in tasks)

+ 1 - 1
Server/Model/Entity/DBQueryBatchTask.cs

@@ -7,7 +7,7 @@ using MongoDB.Driver;
 namespace Model
 {
 	[ObjectEvent]
-	public class DBQueryBatchTaskEvent : ObjectEvent<DBQueryBatchTask>, IAwake<List<long>, string, TaskCompletionSource<List<Disposer>>>
+	public class DbQueryBatchTaskSystem : ObjectSystem<DBQueryBatchTask>, IAwake<List<long>, string, TaskCompletionSource<List<Disposer>>>
 	{
 		public void Awake(List<long> idList, string collectionName, TaskCompletionSource<List<Disposer>> tcs)
 		{

+ 1 - 1
Server/Model/Entity/DBQueryJsonTask.cs

@@ -6,7 +6,7 @@ using MongoDB.Driver;
 namespace Model
 {
 	[ObjectEvent]
-	public class DBQueryJsonTaskEvent : ObjectEvent<DBQueryJsonTask>, IAwake<string, string, TaskCompletionSource<List<Disposer>>>
+	public class DbQueryJsonTaskSystem : ObjectSystem<DBQueryJsonTask>, IAwake<string, string, TaskCompletionSource<List<Disposer>>>
 	{
 		public void Awake(string collectionName, string json, TaskCompletionSource<List<Disposer>> tcs)
 		{

+ 1 - 1
Server/Model/Entity/DBQueryTask.cs

@@ -5,7 +5,7 @@ using MongoDB.Driver;
 namespace Model
 {
 	[ObjectEvent]
-	public class DBQueryTaskEvent : ObjectEvent<DBQueryTask>, IAwake<string, TaskCompletionSource<Disposer>>
+	public class DbQueryTaskSystem : ObjectSystem<DBQueryTask>, IAwake<string, TaskCompletionSource<Disposer>>
 	{
 		public void Awake(string collectionName, TaskCompletionSource<Disposer> tcs)
 		{

+ 1 - 1
Server/Model/Entity/DBSaveBatchTask.cs

@@ -7,7 +7,7 @@ using MongoDB.Driver;
 namespace Model
 {
 	[ObjectEvent]
-	public class DBSaveBatchTaskEvent : ObjectEvent<DBSaveBatchTask>, IAwake<List<Entity>, string, TaskCompletionSource<bool>>
+	public class DbSaveBatchTaskSystem : ObjectSystem<DBSaveBatchTask>, IAwake<List<Entity>, string, TaskCompletionSource<bool>>
 	{
 		public void Awake(List<Entity> entitys, string collectionName, TaskCompletionSource<bool> tcs)
 		{

+ 1 - 1
Server/Model/Entity/DBSaveTask.cs

@@ -6,7 +6,7 @@ namespace Model
 {
 
 	[ObjectEvent]
-	public class DBSaveTaskEvent : ObjectEvent<DBSaveTask>, IAwake<Disposer, string, TaskCompletionSource<bool>>
+	public class DbSaveTaskSystem : ObjectSystem<DBSaveTask>, IAwake<Disposer, string, TaskCompletionSource<bool>>
 	{
 		public void Awake(Disposer entity, string collectionName, TaskCompletionSource<bool> tcs)
 		{

+ 3 - 2
Server/Model/Entity/DBTaskQueue.cs

@@ -1,10 +1,11 @@
 using System;
+using System.Collections.Generic;
 using System.Threading.Tasks;
 
 namespace Model
 {
 	[ObjectEvent]
-	public class DBTaskQueueEvent : ObjectEvent<DBTaskQueue>, IAwake, IStart
+	public class DbTaskQueueSystem : ObjectSystem<DBTaskQueue>, IAwake, IStart
 	{
 		public void Awake()
 		{
@@ -41,7 +42,7 @@ namespace Model
 
 	public sealed class DBTaskQueue : Disposer
 	{
-		public EQueue<DBTask> queue = new EQueue<DBTask>();
+		public Queue<DBTask> queue = new Queue<DBTask>();
 
 		public TaskCompletionSource<DBTask> tcs;
 

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

@@ -13,7 +13,6 @@
 					return scene;
 				}
 				scene = new Scene();
-				scene.AddComponent<EventComponent>();
 				scene.AddComponent<TimerComponent>();
 				return scene;
 			}

+ 1 - 1
Server/Model/Entity/Player.cs

@@ -1,7 +1,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class PlayerEvent : ObjectEvent<Player>, IAwake<string>
+	public class PlayerSystem : ObjectSystem<Player>, IAwake<string>
 	{
 		public void Awake(string account)
 		{

+ 1 - 1
Server/Model/Entity/Unit.cs

@@ -10,7 +10,7 @@ namespace Model
 	}
 
 	[ObjectEvent]
-	public class UnitEvent : ObjectEvent<Unit>, IAwake<UnitType>
+	public class UnitSystem : ObjectSystem<Unit>, IAwake<UnitType>
 	{
 		public void Awake(UnitType unitType)
 		{

+ 4 - 5
Unity/Assets/Editor/BehaviorTreeEditor/BTEditor.cs

@@ -39,12 +39,11 @@ namespace MyEditor
 					return instance;
 				}
 
-				ObjectEvents.Instance.Add("Model", typeof(Init).Assembly);
-				ObjectEvents.Instance.Add("Editor", typeof(BTEditor).Assembly);
+				EventSystem.Instance.Add(DLLType.Model, typeof(Init).Assembly);
+				EventSystem.Instance.Add(DLLType.Editor, typeof(BTEditor).Assembly);
 
 				instance = new BTEditor();
-
-				instance.AddComponent<EventComponent>();
+				
 				instance.AddComponent<TimerComponent>();
 				instance.AddComponent<BTNodeInfoComponent>();
 				instance.AddComponent<BTDebugComponent>();
@@ -381,7 +380,7 @@ namespace MyEditor
 			this.NewLoadPrefabTree();
 
 			BTEditorWindow.ShowWindow();
-			this.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeOpenEditor);
+			EventSystem.Instance.Run(EventIdType.BehaviorTreeOpenEditor);
 		}
 
 		public string[] GetCanInPutEnvKeyArray(BehaviorNodeData nodeData, NodeFieldDesc desc)

+ 1 - 1
Unity/Assets/Editor/BehaviorTreeEditor/Component/BTNodeInfoComponent.cs

@@ -5,7 +5,7 @@ using Model;
 namespace MyEditor
 {
 	[ObjectEvent]
-	public class BTNodeInfoComponentEvent : ObjectEvent<BTNodeInfoComponent>, IAwake
+	public class BtNodeInfoComponentSystem : ObjectSystem<BTNodeInfoComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -200,7 +200,7 @@ namespace MyEditor
 					if (mDragingRightBorder)
 					{
 						mRightWidth -= e.delta.x;
-						BTEditor.Instance.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeRightDesignerDrag, e.delta.x);
+						EventSystem.Instance.Run(EventIdType.BehaviorTreeRightDesignerDrag, e.delta.x);
 						return;
 					}
 
@@ -581,7 +581,7 @@ namespace MyEditor
 				newNode.AddChild(child);
 			}
 			BTEditor.Instance.ResetTreeId();
-			BTEditor.Instance.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeAfterChangeNodeType);
+			EventSystem.Instance.Run(EventIdType.BehaviorTreeAfterChangeNodeType);
 		}
 
 		public void onChangeNodeType(params object[] list)
@@ -614,7 +614,7 @@ namespace MyEditor
 				mDetachedNodes.Add(node);
 			}
 			BTEditor.Instance.ResetTreeId();
-			BTEditor.Instance.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeCreateNode, node);
+			EventSystem.Instance.Run(EventIdType.BehaviorTreeCreateNode, node);
 			return node;
 		}
 
@@ -714,7 +714,7 @@ namespace MyEditor
 
 		public void ClickNode(NodeDesigner dstNode)
 		{
-			BTEditor.Instance.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeClickNode, dstNode);
+			EventSystem.Instance.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)
 			{
-				BTEditor.Instance.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeMouseInNode, NodeData, this);
+				EventSystem.Instance.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)
 			{
-				BTEditor.Instance.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeConnectState, this, State.ConnectLeft);
+				EventSystem.Instance.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())
 			{
-				BTEditor.Instance.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeConnectState, this, State.ConnectRight);
+				EventSystem.Instance.Run(EventIdType.BehaviorTreeConnectState, this, State.ConnectRight);
 			}
 
 			for (int i = 0; i < this.Children.Count; i++)

+ 8 - 8
Unity/Assets/Editor/BehaviorTreeEditor/NodeExtension.cs

@@ -17,8 +17,8 @@ namespace Model
 			Type rootType = typeof(Game).Assembly.GetType($"Model.{config.RootNodeProto.Name}");
 			Node root = (Node) Activator.CreateInstance(rootType, config.RootNodeProto);
 			root.Id = BTEditor.NodeIdStartIndex;
-			EQueue<NodeProto> protoStack = new EQueue<NodeProto>();
-			EQueue<Node> nodeStack = new EQueue<Node>();
+			Queue<NodeProto> protoStack = new Queue<NodeProto>();
+			Queue<Node> nodeStack = new Queue<Node>();
 			protoStack.Enqueue(config.RootNodeProto);
 			nodeStack.Enqueue(root);
 			while (protoStack.Count > 0)
@@ -101,7 +101,7 @@ namespace Model
 
 		public T GetChildInType<T>() where T : Node
 		{
-			EQueue<Node> nodeStack = new EQueue<Node>();
+			Queue<Node> nodeStack = new Queue<Node>();
 			nodeStack.Enqueue(_root);
 			while (nodeStack.Count > 0)
 			{
@@ -126,7 +126,7 @@ namespace Model
 
 		public T[] GetChildrenInType<T>() where T : Node
 		{
-			EQueue<Node> nodeStack = new EQueue<Node>();
+			Queue<Node> nodeStack = new Queue<Node>();
 			List<T> list = new List<T>();
 			nodeStack.Enqueue(_root);
 			while (nodeStack.Count > 0)
@@ -189,7 +189,7 @@ namespace Model
 
 		public static T GetChildInType<T>(this Node root) where T : Node
 		{
-			EQueue<Node> nodeStack = new EQueue<Node>();
+			Queue<Node> nodeStack = new Queue<Node>();
 			nodeStack.Enqueue(root);
 			while (nodeStack.Count > 0)
 			{
@@ -208,7 +208,7 @@ namespace Model
 
 		public static T[] GetChildrenInType<T>(this Node root) where T : Node
 		{
-			EQueue<Node> nodeStack = new EQueue<Node>();
+			Queue<Node> nodeStack = new Queue<Node>();
 			List<T> list = new List<T>();
 			nodeStack.Enqueue(root);
 			while (nodeStack.Count > 0)
@@ -230,8 +230,8 @@ namespace Model
 		{
 			config.Clear();
 			BehaviorNodeConfig rootNp = config.AddRootNode(root.GetType().Name);
-			EQueue<Node> queue = new EQueue<Node>();
-			EQueue<BehaviorNodeConfig> npQue = new EQueue<BehaviorNodeConfig>();
+			Queue<Node> queue = new Queue<Node>();
+			Queue<BehaviorNodeConfig> npQue = new Queue<BehaviorNodeConfig>();
 			rootNp.describe = root.Description;
 			queue.Enqueue(root);
 			npQue.Enqueue(rootNp);

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

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

BIN
Unity/Assets/Res/Code/Hotfix.dll.bytes


BIN
Unity/Assets/Res/Code/Hotfix.mdb.bytes


BIN
Unity/Assets/Res/Code/Hotfix.pdb.bytes


+ 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);
-				Game.Scene.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeRunTreeEvent, this);
+				EventSystem.Instance.Run(EventIdType.BehaviorTreeRunTreeEvent, this);
 				return ret;
 			}
 			catch (Exception e)

+ 0 - 39
Unity/Assets/Scripts/Base/EQueue.cs

@@ -1,39 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-
-namespace Model
-{
-	public class EQueue<T>: IEnumerable
-	{
-		private readonly Queue<T> list = new Queue<T>();
-
-		public void Enqueue(T t)
-		{
-			this.list.Enqueue(t);
-		}
-
-		public T Dequeue()
-		{
-			T t = this.list.Dequeue();
-			return t;
-		}
-		
-		public int Count
-		{
-			get
-			{
-				return this.list.Count;
-			}
-		}
-
-		public IEnumerator GetEnumerator()
-		{
-			return this.list.GetEnumerator();
-		}
-
-		public void Clear()
-		{
-			this.list.Clear();
-		}
-	}
-}

+ 0 - 12
Unity/Assets/Scripts/Base/EQueue.cs.meta

@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: dab3474e94a21ed4a87252287c00c567
-timeCreated: 1505386149
-licenseType: Free
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

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

@@ -6,7 +6,7 @@
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectEvents.Instance.Awake(disposer);
+			EventSystem.Instance.Awake(disposer);
 			return disposer;
 		}
 
@@ -14,7 +14,7 @@
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectEvents.Instance.Awake(disposer, a);
+			EventSystem.Instance.Awake(disposer, a);
 			return disposer;
 		}
 
@@ -22,7 +22,7 @@
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectEvents.Instance.Awake(disposer, a, b);
+			EventSystem.Instance.Awake(disposer, a, b);
 			return disposer;
 		}
 
@@ -30,7 +30,7 @@
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectEvents.Instance.Awake(disposer, a, b, c);
+			EventSystem.Instance.Awake(disposer, a, b, c);
 			return disposer;
 		}
 	}

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

@@ -5,28 +5,28 @@
 		public static T Create<T>() where T : Disposer
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
-			ObjectEvents.Instance.Awake(disposer);
+			EventSystem.Instance.Awake(disposer);
 			return disposer;
 		}
 
 		public static T Create<T, A>(A a) where T : Disposer
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
-			ObjectEvents.Instance.Awake(disposer, a);
+			EventSystem.Instance.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>();
-			ObjectEvents.Instance.Awake(disposer, a, b);
+			EventSystem.Instance.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>();
-			ObjectEvents.Instance.Awake(disposer, a, b, c);
+			EventSystem.Instance.Awake(disposer, a, b, c);
 			return disposer;
 		}
 
@@ -34,7 +34,7 @@
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
-			ObjectEvents.Instance.Awake(disposer);
+			EventSystem.Instance.Awake(disposer);
 			return disposer;
 		}
 
@@ -42,7 +42,7 @@
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
-			ObjectEvents.Instance.Awake(disposer, a);
+			EventSystem.Instance.Awake(disposer, a);
 			return disposer;
 		}
 
@@ -50,7 +50,7 @@
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
-			ObjectEvents.Instance.Awake(disposer, a, b);
+			EventSystem.Instance.Awake(disposer, a, b);
 			return disposer;
 		}
 
@@ -58,7 +58,7 @@
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
-			ObjectEvents.Instance.Awake(disposer, a, b, c);
+			EventSystem.Instance.Awake(disposer, a, b, c);
 			return disposer;
 		}
 	}

+ 489 - 0
Unity/Assets/Scripts/Base/Object/EventSystem.cs

@@ -0,0 +1,489 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace Model
+{
+	public enum DLLType
+	{
+		Model,
+		Hotfix,
+		Editor,
+	}
+
+	public interface IObjectSystem
+	{
+		Type Type();
+		void Set(object value);
+	}
+
+	public abstract class ObjectSystem<T> : IObjectSystem
+	{
+		private T value;
+
+		protected T Get()
+		{
+			return value;
+		}
+
+		public void Set(object v)
+		{
+			this.value = (T)v;
+		}
+
+		public Type Type()
+		{
+			return typeof(T);
+		}
+	}
+
+	public sealed class EventSystem
+	{
+		private static EventSystem instance;
+
+		public static EventSystem Instance
+		{
+			get
+			{
+				return instance ?? (instance = new EventSystem());
+			}
+		}
+
+		private Assembly hotfixAssembly;
+
+		public Assembly HotfixAssembly
+		{
+			get
+			{
+				return this.hotfixAssembly;
+			}
+			set
+			{
+				this.hotfixAssembly = value;
+			}
+		}
+
+		private readonly Dictionary<DLLType, Assembly> assemblies = new Dictionary<DLLType, Assembly>();
+
+		private readonly Dictionary<EventIdType, List<IEventMethod>> allEvents = new Dictionary<EventIdType, List<IEventMethod>>();
+
+		private readonly Dictionary<Type, IObjectSystem> disposerEvents = new Dictionary<Type, IObjectSystem>();
+
+		private Queue<Disposer> updates = new Queue<Disposer>();
+		private Queue<Disposer> updates2 = new Queue<Disposer>();
+
+		private readonly Queue<Disposer> starts = new Queue<Disposer>();
+
+		private Queue<Disposer> loaders = new Queue<Disposer>();
+		private Queue<Disposer> loaders2 = new Queue<Disposer>();
+
+		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();
+#endif
+			this.Register();
+			this.Load();
+		}
+
+		public void Add(DLLType dllType, Assembly assembly)
+		{
+			this.assemblies[dllType] = assembly;
+			this.Register();
+		}
+
+		private void Register()
+		{
+			Type[] types = DllHelper.GetMonoTypes();
+			foreach (Type type in types)
+			{
+				object[] attrs = type.GetCustomAttributes(typeof(ObjectEventAttribute), false);
+
+				if (attrs.Length == 0)
+				{
+					continue;
+				}
+
+				object obj = Activator.CreateInstance(type);
+				IObjectSystem objectSystem = obj as IObjectSystem;
+				if (objectSystem == null)
+				{
+					Log.Error($"组件事件没有继承IObjectEvent: {type.Name}");
+					continue;
+				}
+				this.disposerEvents[objectSystem.Type()] = objectSystem;
+			}
+
+
+			this.allEvents.Clear();
+			foreach (Type type in types)
+			{
+				object[] attrs = type.GetCustomAttributes(typeof(EventAttribute), false);
+
+				foreach (object attr in attrs)
+				{
+					EventAttribute aEventAttribute = (EventAttribute)attr;
+					object obj = Activator.CreateInstance(type);
+					if (!this.allEvents.ContainsKey((EventIdType)aEventAttribute.Type))
+					{
+						this.allEvents.Add((EventIdType)aEventAttribute.Type, new List<IEventMethod>());
+					}
+					this.allEvents[(EventIdType)aEventAttribute.Type].Add(new IEventMonoMethod(obj));
+				}
+			}
+
+			// hotfix dll
+			Type[] hotfixTypes = DllHelper.GetHotfixTypes();
+			foreach (Type type in hotfixTypes)
+			{
+				object[] attrs = type.GetCustomAttributes(typeof(EventAttribute), false);
+				foreach (object attr in attrs)
+				{
+					EventAttribute aEventAttribute = (EventAttribute)attr;
+#if ILRuntime
+					IEventMethod method = new IEventILMethod(type, "Run");
+#else
+					object obj = Activator.CreateInstance(type);
+					IEventMethod method = new IEventMonoMethod(obj);
+#endif
+					if (!allEvents.ContainsKey((EventIdType)aEventAttribute.Type))
+					{
+						allEvents.Add((EventIdType)aEventAttribute.Type, new List<IEventMethod>());
+					}
+					allEvents[(EventIdType)aEventAttribute.Type].Add(method);
+				}
+			}
+		}
+
+		public Assembly Get(DLLType dllType)
+		{
+			return this.assemblies[dllType];
+		}
+
+		public Assembly[] GetAll()
+		{
+			return this.assemblies.Values.ToArray();
+		}
+
+		public void Add(Disposer disposer)
+		{
+			IObjectSystem objectSystem;
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+			{
+				return;
+			}
+
+			if (objectSystem is ILoad)
+			{
+				this.loaders.Enqueue(disposer);
+			}
+
+			if (objectSystem is IUpdate)
+			{
+				this.updates.Enqueue(disposer);
+			}
+
+			if (objectSystem is IStart)
+			{
+				this.starts.Enqueue(disposer);
+			}
+		}
+
+		public void Awake(Disposer disposer)
+		{
+			EventSystem.Instance.Add(disposer);
+
+			IObjectSystem objectSystem;
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+			{
+				return;
+			}
+			IAwake iAwake = objectSystem as IAwake;
+			if (iAwake == null)
+			{
+				return;
+			}
+			objectSystem.Set(disposer);
+			iAwake.Awake();
+		}
+
+		public void Awake<P1>(Disposer disposer, P1 p1)
+		{
+			EventSystem.Instance.Add(disposer);
+
+			IObjectSystem objectSystem;
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+			{
+				return;
+			}
+			IAwake<P1> iAwake = objectSystem as IAwake<P1>;
+			if (iAwake == null)
+			{
+				return;
+			}
+			objectSystem.Set(disposer);
+			iAwake.Awake(p1);
+		}
+
+		public void Awake<P1, P2>(Disposer disposer, P1 p1, P2 p2)
+		{
+			EventSystem.Instance.Add(disposer);
+
+			IObjectSystem objectSystem;
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+			{
+				return;
+			}
+			IAwake<P1, P2> iAwake = objectSystem as IAwake<P1, P2>;
+			if (iAwake == null)
+			{
+				return;
+			}
+			objectSystem.Set(disposer);
+			iAwake.Awake(p1, p2);
+		}
+
+		public void Awake<P1, P2, P3>(Disposer disposer, P1 p1, P2 p2, P3 p3)
+		{
+			EventSystem.Instance.Add(disposer);
+
+			IObjectSystem objectSystem;
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+			{
+				return;
+			}
+			IAwake<P1, P2, P3> iAwake = objectSystem as IAwake<P1, P2, P3>;
+			if (iAwake == null)
+			{
+				return;
+			}
+			objectSystem.Set(disposer);
+			iAwake.Awake(p1, p2, p3);
+		}
+
+		public void Load()
+		{
+			while (this.loaders.Count > 0)
+			{
+				Disposer disposer = this.loaders.Dequeue();
+				if (disposer.Id == 0)
+				{
+					continue;
+				}
+
+				IObjectSystem objectSystem;
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+				{
+					continue;
+				}
+
+				this.loaders2.Enqueue(disposer);
+
+				ILoad iLoad = objectSystem as ILoad;
+				if (iLoad == null)
+				{
+					continue;
+				}
+				objectSystem.Set(disposer);
+				try
+				{
+					iLoad.Load();
+				}
+				catch (Exception e)
+				{
+					Log.Error(e.ToString());
+				}
+			}
+
+			ObjectHelper.Swap(ref this.loaders, ref this.loaders2);
+		}
+
+		private void Start()
+		{
+			while (this.starts.Count > 0)
+			{
+				Disposer disposer = this.starts.Dequeue();
+
+				IObjectSystem objectSystem;
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+				{
+					continue;
+				}
+				IStart iStart = objectSystem as IStart;
+				if (iStart == null)
+				{
+					continue;
+				}
+				objectSystem.Set(disposer);
+				iStart.Start();
+			}
+		}
+
+		public void Update()
+		{
+			this.Start();
+
+			while (this.updates.Count > 0)
+			{
+				Disposer disposer = this.updates.Dequeue();
+				if (disposer.Id == 0)
+				{
+					continue;
+				}
+
+				IObjectSystem objectSystem;
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+				{
+					continue;
+				}
+
+				this.updates2.Enqueue(disposer);
+
+				IUpdate iUpdate = objectSystem as IUpdate;
+				if (iUpdate == null)
+				{
+					continue;
+				}
+				objectSystem.Set(disposer);
+				try
+				{
+					iUpdate.Update();
+				}
+				catch (Exception e)
+				{
+					Log.Error(e.ToString());
+				}
+			}
+
+			ObjectHelper.Swap(ref this.updates, ref this.updates2);
+		}
+
+		public void LateUpdate()
+		{
+			while (this.lateUpdates.Count > 0)
+			{
+				Disposer disposer = this.lateUpdates.Dequeue();
+				if (disposer.Id == 0)
+				{
+					continue;
+				}
+
+				IObjectSystem objectSystem;
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
+				{
+					continue;
+				}
+
+				this.lateUpdates2.Enqueue(disposer);
+
+				ILateUpdate iLateUpdate = objectSystem as ILateUpdate;
+				if (iLateUpdate == null)
+				{
+					continue;
+				}
+				objectSystem.Set(disposer);
+				try
+				{
+					iLateUpdate.LateUpdate();
+				}
+				catch (Exception e)
+				{
+					Log.Error(e.ToString());
+				}
+			}
+
+			ObjectHelper.Swap(ref this.lateUpdates, ref this.lateUpdates2);
+		}
+
+		public void Run(EventIdType type)
+		{
+			List<IEventMethod> iEvents;
+			if (!this.allEvents.TryGetValue(type, out iEvents))
+			{
+				return;
+			}
+			foreach (IEventMethod iEvent in iEvents)
+			{
+				try
+				{
+					iEvent.Run();
+				}
+				catch (Exception e)
+				{
+					Log.Error(e.ToString());
+				}
+			}
+		}
+
+		public void Run<A>(EventIdType type, A a)
+		{
+			List<IEventMethod> iEvents;
+			if (!this.allEvents.TryGetValue(type, out iEvents))
+			{
+				return;
+			}
+			foreach (IEventMethod iEvent in iEvents)
+			{
+				try
+				{
+					iEvent.Run(a);
+				}
+				catch (Exception e)
+				{
+					Log.Error(e.ToString());
+				}
+			}
+		}
+
+		public void Run<A, B>(EventIdType type, A a, B b)
+		{
+			List<IEventMethod> iEvents;
+			if (!this.allEvents.TryGetValue(type, out iEvents))
+			{
+				return;
+			}
+			foreach (IEventMethod iEvent in iEvents)
+			{
+				try
+				{
+					iEvent.Run(a, b);
+				}
+				catch (Exception e)
+				{
+					Log.Error(e.ToString());
+				}
+			}
+		}
+
+		public void Run<A, B, C>(EventIdType type, A a, B b, C c)
+		{
+			List<IEventMethod> iEvents;
+			if (!this.allEvents.TryGetValue(type, out iEvents))
+			{
+				return;
+			}
+			foreach (IEventMethod iEvent in iEvents)
+			{
+				try
+				{
+					iEvent.Run(a, b, c);
+				}
+				catch (Exception e)
+				{
+					Log.Error(e.ToString());
+				}
+			}
+		}
+	}
+}

+ 0 - 0
Unity/Assets/Scripts/Base/Object/ObjectEvents.cs.meta → Unity/Assets/Scripts/Base/Object/EventSystem.cs.meta


+ 102 - 0
Unity/Assets/Scripts/Base/Object/IEventMethod.cs

@@ -0,0 +1,102 @@
+using System;
+using ILRuntime.CLR.Method;
+using ILRuntime.Runtime.Intepreter;
+
+namespace Model
+{
+	public interface IEventMethod
+	{
+		void Run();
+		void Run<A>(A a);
+		void Run<A, B>(A a, B b);
+		void Run<A, B, C>(A a, B b, C c);
+		void Run<A, B, C, D>(A a, B b, C c, D d);
+	}
+
+	public class IEventMonoMethod : IEventMethod
+	{
+		private readonly object obj;
+
+		public IEventMonoMethod(object obj)
+		{
+			this.obj = obj;
+		}
+
+		public void Run()
+		{
+			((IEvent)obj).Run();
+		}
+
+		public void Run<A>(A a)
+		{
+			((IEvent<A>)obj).Run(a);
+		}
+
+		public void Run<A, B>(A a, B b)
+		{
+			((IEvent<A, B>)obj).Run(a, b);
+		}
+
+		public void Run<A, B, C>(A a, B b, C c)
+		{
+			((IEvent<A, B, C>)obj).Run(a, b, c);
+		}
+
+		public void Run<A, B, C, D>(A a, B b, C c, D d)
+		{
+			((IEvent<A, B, C, D>)obj).Run(a, b, c, d);
+		}
+	}
+
+	public class IEventILMethod : IEventMethod
+	{
+		private readonly ILRuntime.Runtime.Enviorment.AppDomain appDomain;
+		private readonly ILTypeInstance instance;
+		private readonly IMethod method;
+		private readonly object[] param;
+
+		public IEventILMethod(Type type, string methodName)
+		{
+			appDomain = Init.Instance.AppDomain;
+			this.instance = this.appDomain.Instantiate(type.FullName);
+			this.method = this.instance.Type.GetMethod(methodName);
+			int n = this.method.ParameterCount;
+			this.param = new object[n];
+		}
+
+		public void Run()
+		{
+			this.appDomain.Invoke(this.method, this.instance, param);
+		}
+
+		public void Run<A>(A a)
+		{
+			this.param[0] = a;
+			this.appDomain.Invoke(this.method, this.instance, param);
+		}
+
+		public void Run<A, B>(A a, B b)
+		{
+			this.param[0] = a;
+			this.param[1] = b;
+			this.appDomain.Invoke(this.method, this.instance, param);
+		}
+
+		public void Run<A, B, C>(A a, B b, C c)
+		{
+			this.param[0] = a;
+			this.param[1] = b;
+			this.param[2] = c;
+			this.appDomain.Invoke(this.method, this.instance, param);
+		}
+
+		public void Run<A, B, C, D>(A a, B b, C c, D d)
+		{
+			this.param[0] = a;
+			this.param[1] = b;
+			this.param[2] = c;
+			this.param[3] = d;
+			this.appDomain.Invoke(this.method, this.instance, param);
+		}
+	}
+}

+ 2 - 2
Unity/Assets/Scripts/Component/EventComponent.cs.meta → Unity/Assets/Scripts/Base/Object/IEventMethod.cs.meta

@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: fdeabd62f7ad9414fa74891de319729f
-timeCreated: 1498117617
+guid: 56f77b0dfb72d8e488d7ef044ede8dba
+timeCreated: 1516100437
 licenseType: Free
 MonoImporter:
   serializedVersion: 2

+ 0 - 357
Unity/Assets/Scripts/Base/Object/ObjectEvents.cs

@@ -1,357 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-
-namespace Model
-{
-	public interface IObjectEvent
-	{
-		Type Type();
-		void Set(object value);
-	}
-
-	public abstract class ObjectEvent<T> : IObjectEvent
-	{
-		private T value;
-
-		protected T Get()
-		{
-			return value;
-		}
-
-		public void Set(object v)
-		{
-			this.value = (T)v;
-		}
-
-		public Type Type()
-		{
-			return typeof(T);
-		}
-	}
-
-	public sealed class ObjectEvents
-	{
-		private static ObjectEvents instance;
-
-		public static ObjectEvents Instance
-		{
-			get
-			{
-				return instance ?? (instance = new ObjectEvents());
-			}
-		}
-
-		private Assembly hotfixAssembly;
-
-		public Assembly HotfixAssembly
-		{
-			get
-			{
-				return this.hotfixAssembly;
-			}
-			set
-			{
-				this.hotfixAssembly = value;
-			}
-		}
-
-		private readonly Dictionary<string, Assembly> assemblies = new Dictionary<string, Assembly>();
-
-		private readonly Dictionary<Type, IObjectEvent> disposerEvents = new Dictionary<Type, IObjectEvent>();
-
-		private EQueue<Disposer> updates = new EQueue<Disposer>();
-		private EQueue<Disposer> updates2 = new EQueue<Disposer>();
-
-		private readonly EQueue<Disposer> starts = new EQueue<Disposer>();
-
-		private EQueue<Disposer> loaders = new EQueue<Disposer>();
-		private EQueue<Disposer> loaders2 = new EQueue<Disposer>();
-
-		private EQueue<Disposer> lateUpdates = new EQueue<Disposer>();
-		private EQueue<Disposer> lateUpdates2 = new EQueue<Disposer>();
-
-		public static void Close()
-		{
-			instance = null;
-		}
-
-		public void LoadHotfixDll()
-		{
-#if ILRuntime
-			DllHelper.LoadHotfixAssembly();	
-#else
-			ObjectEvents.Instance.HotfixAssembly = DllHelper.LoadHotfixAssembly();
-#endif
-			this.Load();
-		}
-
-		public void Add(string name, Assembly assembly)
-		{
-			this.assemblies[name] = assembly;
-
-			foreach (Assembly ass in this.assemblies.Values)
-			{
-				foreach (Type type in ass.GetTypes())
-				{
-					object[] attrs = type.GetCustomAttributes(typeof(ObjectEventAttribute), false);
-
-					if (attrs.Length == 0)
-					{
-						continue;
-					}
-
-					object obj = Activator.CreateInstance(type);
-					IObjectEvent objectEvent = obj as IObjectEvent;
-					if (objectEvent == null)
-					{
-						Log.Error($"组件事件没有继承IObjectEvent: {type.Name}");
-						continue;
-					}
-					this.disposerEvents[objectEvent.Type()] = objectEvent;
-				}
-			}
-		}
-
-		public Assembly Get(string name)
-		{
-			return this.assemblies[name];
-		}
-
-		public Assembly[] GetAll()
-		{
-			return this.assemblies.Values.ToArray();
-		}
-
-		public void Add(Disposer disposer)
-		{
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-			{
-				return;
-			}
-
-			if (objectEvent is ILoad)
-			{
-				this.loaders.Enqueue(disposer);
-			}
-
-			if (objectEvent is IUpdate)
-			{
-				this.updates.Enqueue(disposer);
-			}
-
-			if (objectEvent is IStart)
-			{
-				this.starts.Enqueue(disposer);
-			}
-		}
-
-		public void Awake(Disposer disposer)
-		{
-			ObjectEvents.Instance.Add(disposer);
-
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-			{
-				return;
-			}
-			IAwake iAwake = objectEvent as IAwake;
-			if (iAwake == null)
-			{
-				return;
-			}
-			objectEvent.Set(disposer);
-			iAwake.Awake();
-		}
-
-		public void Awake<P1>(Disposer disposer, P1 p1)
-		{
-			ObjectEvents.Instance.Add(disposer);
-
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-			{
-				return;
-			}
-			IAwake<P1> iAwake = objectEvent as IAwake<P1>;
-			if (iAwake == null)
-			{
-				return;
-			}
-			objectEvent.Set(disposer);
-			iAwake.Awake(p1);
-		}
-
-		public void Awake<P1, P2>(Disposer disposer, P1 p1, P2 p2)
-		{
-			ObjectEvents.Instance.Add(disposer);
-
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-			{
-				return;
-			}
-			IAwake<P1, P2> iAwake = objectEvent as IAwake<P1, P2>;
-			if (iAwake == null)
-			{
-				return;
-			}
-			objectEvent.Set(disposer);
-			iAwake.Awake(p1, p2);
-		}
-
-		public void Awake<P1, P2, P3>(Disposer disposer, P1 p1, P2 p2, P3 p3)
-		{
-			ObjectEvents.Instance.Add(disposer);
-
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-			{
-				return;
-			}
-			IAwake<P1, P2, P3> iAwake = objectEvent as IAwake<P1, P2, P3>;
-			if (iAwake == null)
-			{
-				return;
-			}
-			objectEvent.Set(disposer);
-			iAwake.Awake(p1, p2, p3);
-		}
-
-		public void Load()
-		{
-			while (this.loaders.Count > 0)
-			{
-				Disposer disposer = this.loaders.Dequeue();
-				if (disposer.Id == 0)
-				{
-					continue;
-				}
-
-				IObjectEvent objectEvent;
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-				{
-					continue;
-				}
-
-				this.loaders2.Enqueue(disposer);
-
-				ILoad iLoad = objectEvent as ILoad;
-				if (iLoad == null)
-				{
-					continue;
-				}
-				objectEvent.Set(disposer);
-				try
-				{
-					iLoad.Load();
-				}
-				catch (Exception e)
-				{
-					Log.Error(e.ToString());
-				}
-			}
-
-			ObjectHelper.Swap(ref this.loaders, ref this.loaders2);
-		}
-
-		private void Start()
-		{
-			while (this.starts.Count > 0)
-			{
-				Disposer disposer = this.starts.Dequeue();
-
-				IObjectEvent objectEvent;
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-				{
-					continue;
-				}
-				IStart iStart = objectEvent as IStart;
-				if (iStart == null)
-				{
-					continue;
-				}
-				objectEvent.Set(disposer);
-				iStart.Start();
-			}
-		}
-
-		public void Update()
-		{
-			this.Start();
-
-			while (this.updates.Count > 0)
-			{
-				Disposer disposer = this.updates.Dequeue();
-				if (disposer.Id == 0)
-				{
-					continue;
-				}
-
-				IObjectEvent objectEvent;
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-				{
-					continue;
-				}
-
-				this.updates2.Enqueue(disposer);
-
-				IUpdate iUpdate = objectEvent as IUpdate;
-				if (iUpdate == null)
-				{
-					continue;
-				}
-				objectEvent.Set(disposer);
-				try
-				{
-					iUpdate.Update();
-				}
-				catch (Exception e)
-				{
-					Log.Error(e.ToString());
-				}
-			}
-
-			ObjectHelper.Swap(ref this.updates, ref this.updates2);
-		}
-
-		public void LateUpdate()
-		{
-			while (this.lateUpdates.Count > 0)
-			{
-				Disposer disposer = this.lateUpdates.Dequeue();
-				if (disposer.Id == 0)
-				{
-					continue;
-				}
-
-				IObjectEvent objectEvent;
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
-				{
-					continue;
-				}
-
-				this.lateUpdates2.Enqueue(disposer);
-
-				ILateUpdate iLateUpdate = objectEvent as ILateUpdate;
-				if (iLateUpdate == null)
-				{
-					continue;
-				}
-				objectEvent.Set(disposer);
-				try
-				{
-					iLateUpdate.LateUpdate();
-				}
-				catch (Exception e)
-				{
-					Log.Error(e.ToString());
-				}
-			}
-
-			ObjectHelper.Swap(ref this.lateUpdates, ref this.lateUpdates2);
-		}
-	}
-}

+ 5 - 5
Unity/Assets/Scripts/Base/Object/ObjectPool.cs

@@ -15,7 +15,7 @@ namespace Model
 		    }
 	    }
 
-        private readonly Dictionary<Type, EQueue<Disposer>> dictionary = new Dictionary<Type, EQueue<Disposer>>();
+        private readonly Dictionary<Type, Queue<Disposer>> dictionary = new Dictionary<Type, Queue<Disposer>>();
 
         private ObjectPool()
         {
@@ -28,10 +28,10 @@ namespace Model
 
         private Disposer Fetch(Type type)
         {
-	        EQueue<Disposer> queue;
+	        Queue<Disposer> queue;
             if (!this.dictionary.TryGetValue(type, out queue))
             {
-                queue = new EQueue<Disposer>();
+                queue = new Queue<Disposer>();
                 this.dictionary.Add(type, queue);
             }
 	        Disposer obj;
@@ -55,10 +55,10 @@ namespace Model
         public void Recycle(Disposer obj)
         {
             Type type = obj.GetType();
-	        EQueue<Disposer> queue;
+	        Queue<Disposer> queue;
             if (!this.dictionary.TryGetValue(type, out queue))
             {
-                queue = new EQueue<Disposer>();
+                queue = new Queue<Disposer>();
 				this.dictionary.Add(type, queue);
             }
             queue.Enqueue(obj);

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

@@ -5,7 +5,7 @@ using UnityEngine;
 namespace Model
 {
 	[ObjectEvent]
-	public class AnimatorComponentEvent : ObjectEvent<AnimatorComponent>, IAwake, IUpdate
+	public class AnimatorComponentSystem : ObjectSystem<AnimatorComponent>, IAwake, IUpdate
 	{
 		public void Awake()
 		{

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

@@ -6,7 +6,7 @@ using UnityEngine;
 namespace Model
 {
 	[ObjectEvent]
-	public class BehaviorTreeComponentEvent : ObjectEvent<BehaviorTreeComponent>, IAwake, ILoad
+	public class BehaviorTreeComponentSystem : ObjectSystem<BehaviorTreeComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{
@@ -71,7 +71,7 @@ namespace Model
 
 		private static void InitFieldValue(ref Node node, NodeProto nodeProto)
 		{
-			Type type = ObjectEvents.Instance.Get("Model").GetType("Model." + nodeProto.Name);
+			Type type = EventSystem.Instance.Get(DLLType.Model).GetType("Model." + nodeProto.Name);
 
 			foreach (var args_item in nodeProto.Args.Dict())
 			{

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

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
 namespace Model
 {
 	[ObjectEvent]
-	public class UIBundleDownloaderComponentEvent : ObjectEvent<BundleDownloaderComponent>, IAwake
+	public class UiBundleDownloaderComponentSystem : ObjectSystem<BundleDownloaderComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -3,7 +3,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class CameraComponentEvent : ObjectEvent<CameraComponent>, IAwake, ILateUpdate
+	public class CameraComponentSystem : ObjectSystem<CameraComponent>, IAwake, ILateUpdate
 	{
 		public void Awake()
 		{

+ 5 - 3
Unity/Assets/Scripts/Component/ClientFrameComponent.cs

@@ -1,4 +1,6 @@
-namespace Model
+using System.Collections.Generic;
+
+namespace Model
 {
     public struct SessionFrameMessage
     {
@@ -7,7 +9,7 @@
     }
     
     [ObjectEvent]
-    public class ClientFrameComponentEvent : ObjectEvent<ClientFrameComponent>, IStart
+    public class ClientFrameComponentSystem : ObjectSystem<ClientFrameComponent>, IStart
     {
         public void Start()
         {
@@ -19,7 +21,7 @@
     {
         public int Frame;
 
-        public EQueue<SessionFrameMessage> Queue = new EQueue<SessionFrameMessage>();
+        public Queue<SessionFrameMessage> Queue = new Queue<SessionFrameMessage>();
 
         public int count = 1;
         

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

@@ -4,7 +4,7 @@ using System.Collections.Generic;
 namespace Model
 {
 	[ObjectEvent]
-	public class ConfigComponentEvent : ObjectEvent<ConfigComponent>, IAwake, ILoad
+	public class ConfigComponentSystem : ObjectSystem<ConfigComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{

+ 0 - 254
Unity/Assets/Scripts/Component/EventComponent.cs

@@ -1,254 +0,0 @@
-using System;
-using System.Collections.Generic;
-using ILRuntime.CLR.Method;
-using ILRuntime.Runtime.Intepreter;
-
-namespace Model
-{
-	public interface IEventMethod
-	{
-		void Run();
-		void Run<A>(A a);
-		void Run<A, B>(A a, B b);
-		void Run<A, B, C>(A a, B b, C c);
-		void Run<A, B, C, D>(A a, B b, C c, D d);
-	}
-
-	public class IEventMonoMethod : IEventMethod
-	{
-		private readonly object obj;
-
-		public IEventMonoMethod(object obj)
-		{
-			this.obj = obj;
-		}
-
-		public void Run()
-		{
-			((IEvent)obj).Run();
-		}
-
-		public void Run<A>(A a)
-		{
-			((IEvent<A>)obj).Run(a);
-		}
-
-		public void Run<A, B>(A a, B b)
-		{
-			((IEvent<A, B>)obj).Run(a, b);
-		}
-
-		public void Run<A, B, C>(A a, B b, C c)
-		{
-			((IEvent<A, B, C>)obj).Run(a, b, c);
-		}
-
-		public void Run<A, B, C, D>(A a, B b, C c, D d)
-		{
-			((IEvent<A, B, C, D>)obj).Run(a, b, c, d);
-		}
-	}
-
-	public class IEventILMethod : IEventMethod
-	{
-		private readonly ILRuntime.Runtime.Enviorment.AppDomain appDomain;
-		private readonly ILTypeInstance instance;
-		private readonly IMethod method;
-		private readonly object[] param;
-
-		public IEventILMethod(Type type, string methodName)
-		{
-			appDomain = Init.Instance.AppDomain;
-			this.instance = this.appDomain.Instantiate(type.FullName);
-			this.method = this.instance.Type.GetMethod(methodName);
-			int n = this.method.ParameterCount;
-			this.param = new object[n];
-		}
-
-		public void Run()
-		{
-			this.appDomain.Invoke(this.method, this.instance, param);
-		}
-
-		public void Run<A>(A a)
-		{
-			this.param[0] = a;
-			this.appDomain.Invoke(this.method, this.instance, param);
-		}
-
-		public void Run<A, B>(A a, B b)
-		{
-			this.param[0] = a;
-			this.param[1] = b;
-			this.appDomain.Invoke(this.method, this.instance, param);
-		}
-
-		public void Run<A, B, C>(A a, B b, C c)
-		{
-			this.param[0] = a;
-			this.param[1] = b;
-			this.param[2] = c;
-			this.appDomain.Invoke(this.method, this.instance, param);
-		}
-
-		public void Run<A, B, C, D>(A a, B b, C c, D d)
-		{
-			this.param[0] = a;
-			this.param[1] = b;
-			this.param[2] = c;
-			this.param[3] = d;
-			this.appDomain.Invoke(this.method, this.instance, param);
-		}
-	}
-
-	[ObjectEvent]
-	public class EventComponentEvent : ObjectEvent<EventComponent>, IAwake, ILoad
-	{
-		public void Awake()
-		{
-			this.Get().Awake();
-		}
-
-		public void Load()
-		{
-			this.Get().Load();
-		}
-	}
-
-	public class EventComponent : Component
-	{
-		public static EventComponent Instance;
-
-		private Dictionary<EventIdType, List<IEventMethod>> allEvents;
-
-		public void Awake()
-		{
-			Instance = this;
-			this.Load();
-		}
-
-		public void Load()
-		{
-			this.allEvents = new Dictionary<EventIdType, List<IEventMethod>>();
-
-			Type[] types = DllHelper.GetMonoTypes();
-			foreach (Type type in types)
-			{
-				object[] attrs = type.GetCustomAttributes(typeof(EventAttribute), false);
-
-				foreach (object attr in attrs)
-				{
-					EventAttribute aEventAttribute = (EventAttribute)attr;
-					object obj = Activator.CreateInstance(type);
-					if (!this.allEvents.ContainsKey((EventIdType)aEventAttribute.Type))
-					{
-						this.allEvents.Add((EventIdType)aEventAttribute.Type, new List<IEventMethod>());
-					}
-					this.allEvents[(EventIdType)aEventAttribute.Type].Add(new IEventMonoMethod(obj));
-				}
-			}
-
-			// hotfix dll
-			Type[] hotfixTypes = DllHelper.GetHotfixTypes();
-			foreach (Type type in hotfixTypes)
-			{
-				object[] attrs = type.GetCustomAttributes(typeof(EventAttribute), false);
-				foreach (object attr in attrs)
-				{
-					EventAttribute aEventAttribute = (EventAttribute)attr;
-#if ILRuntime
-					IEventMethod method = new IEventILMethod(type, "Run");
-#else
-					object obj = Activator.CreateInstance(type);
-					IEventMethod method = new IEventMonoMethod(obj);
-#endif
-					if (!allEvents.ContainsKey((EventIdType)aEventAttribute.Type))
-					{
-						allEvents.Add((EventIdType)aEventAttribute.Type, new List<IEventMethod>());
-					}
-					allEvents[(EventIdType)aEventAttribute.Type].Add(method);
-				}
-			}
-		}
-
-		public void Run(EventIdType type)
-		{
-			List<IEventMethod> iEvents;
-			if (!this.allEvents.TryGetValue(type, out iEvents))
-			{
-				return;
-			}
-			foreach (IEventMethod iEvent in iEvents)
-			{
-				try
-				{
-					iEvent.Run();
-				}
-				catch (Exception e)
-				{
-					Log.Error(e.ToString());
-				}
-			}
-		}
-
-		public void Run<A>(EventIdType type, A a)
-		{
-			List<IEventMethod> iEvents;
-			if (!this.allEvents.TryGetValue(type, out iEvents))
-			{
-				return;
-			}
-			foreach (IEventMethod iEvent in iEvents)
-			{
-				try
-				{
-					iEvent.Run(a);
-				}
-				catch (Exception e)
-				{
-					Log.Error(e.ToString());
-				}
-			}
-		}
-
-		public void Run<A, B>(EventIdType type, A a, B b)
-		{
-			List<IEventMethod> iEvents;
-			if (!this.allEvents.TryGetValue(type, out iEvents))
-			{
-				return;
-			}
-			foreach (IEventMethod iEvent in iEvents)
-			{
-				try
-				{
-					iEvent.Run(a, b);
-				}
-				catch (Exception e)
-				{
-					Log.Error(e.ToString());
-				}
-			}
-		}
-
-		public void Run<A, B, C>(EventIdType type, A a, B b, C c)
-		{
-			List<IEventMethod> iEvents;
-			if (!this.allEvents.TryGetValue(type, out iEvents))
-			{
-				return;
-			}
-			foreach (IEventMethod iEvent in iEvents)
-			{
-				try
-				{
-					iEvent.Run(a, b, c);
-				}
-				catch (Exception e)
-				{
-					Log.Error(e.ToString());
-				}
-			}
-		}
-	}
-}

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

@@ -1,7 +1,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class GlobalConfigComponentEvent : ObjectEvent<GlobalConfigComponent>, IAwake
+	public class GlobalConfigComponentSystem : ObjectSystem<GlobalConfigComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -54,7 +54,7 @@ namespace Model
 
 
 	[ObjectEvent]
-	public class MessageDispatherComponentEvent : ObjectEvent<MessageDispatherComponent>, IAwake, ILoad
+	public class MessageDispatherComponentSystem : ObjectSystem<MessageDispatherComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{

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

@@ -4,7 +4,7 @@ using UnityEngine;
 namespace Model
 {
 	[ObjectEvent]
-	public class MoveComponentEvent : ObjectEvent<MoveComponent>, IAwake, IUpdate
+	public class MoveComponentSystem : ObjectSystem<MoveComponent>, IAwake, IUpdate
 	{
 		public void Awake()
 		{

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

@@ -1,7 +1,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class NetOuterComponentEvent : ObjectEvent<NetOuterComponent>, IAwake, IUpdate
+	public class NetOuterComponentSystem : ObjectSystem<NetOuterComponent>, IAwake, IUpdate
 	{
 		public void Awake()
 		{

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

@@ -3,7 +3,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class NumericComponentEvent : ObjectEvent<NumericComponent>, IAwake
+	public class NumericComponentSystem : ObjectSystem<NumericComponent>, IAwake
 	{
 		public void Awake()
 		{
@@ -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;
-			Game.Scene.GetComponent<EventComponent>().Run(EventIdType.NumbericChange, this.Parent.Id, numericType, final);
+			EventSystem.Instance.Run(EventIdType.NumbericChange, this.Parent.Id, numericType, final);
 		}
 	}
 }

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

@@ -4,7 +4,7 @@ using System.Collections.Generic;
 namespace Model
 {
 	[ObjectEvent]
-	public class NumericWatcherComponentEvent : ObjectEvent<NumericWatcherComponent>, IAwake, ILoad
+	public class NumericWatcherComponentSystem : ObjectSystem<NumericWatcherComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{

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

@@ -3,7 +3,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class OpcodeTypeComponentEvent : ObjectEvent<OpcodeTypeComponent>, IAwake
+	public class OpcodeTypeComponentSystem : ObjectSystem<OpcodeTypeComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -3,7 +3,7 @@
 namespace Model
 {
     [ObjectEvent]
-    public class OperaComponentEvent : ObjectEvent<OperaComponent>, IUpdate, IAwake
+    public class OperaComponentSystem : ObjectSystem<OperaComponent>, IUpdate, IAwake
     {
         public void Update()
         {

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

@@ -4,7 +4,7 @@ using System.Linq;
 namespace Model
 {
 	[ObjectEvent]
-	public class PlayerComponentEvent : ObjectEvent<PlayerComponent>, IAwake
+	public class PlayerComponentSystem : ObjectSystem<PlayerComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -1,7 +1,7 @@
 namespace Model
 {
 	[ObjectEvent]
-	public class SessionComponentEvent : ObjectEvent<SessionComponent>, IAwake
+	public class SessionComponentSystem : ObjectSystem<SessionComponent>, IAwake
 	{
 		public void Awake()
 		{

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

@@ -12,7 +12,7 @@ namespace Model
 	}
 
 	[ObjectEvent]
-	public class TimerComponentEvent : ObjectEvent<TimerComponent>, IUpdate
+	public class TimerComponentSystem : ObjectSystem<TimerComponent>, IUpdate
 	{
 		public void Update()
 		{

+ 3 - 3
Unity/Assets/Scripts/Component/UIComponent.cs

@@ -6,7 +6,7 @@ using UnityEngine;
 namespace Model
 {
 	[ObjectEvent]
-	public class UIComponentEvent : ObjectEvent<UIComponent>, IAwake, ILoad
+	public class UiComponentSystem : ObjectSystem<UIComponent>, IAwake, ILoad
 	{
 		public void Awake()
 		{
@@ -60,7 +60,7 @@ namespace Model
 
 		public void Load()
 		{
-            this.UiTypes.Clear();
+			this.UiTypes.Clear();
             
             Type[] types = DllHelper.GetMonoTypes();
 
@@ -94,7 +94,7 @@ namespace Model
 			try
 			{
 				UI ui = UiTypes[type].Create(this.GetParent<Scene>(), type, Root);
-                uis.Add(type, ui);
+				uis.Add(type, ui);
 
 				// 设置canvas
 				string cavasName = ui.GameObject.GetComponent<CanvasConfig>().CanvasName;

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

@@ -4,7 +4,7 @@ using System.Linq;
 namespace Model
 {
 	[ObjectEvent]
-	public class UnitComponentEvent : ObjectEvent<UnitComponent>, IAwake
+	public class UnitComponentSystem : ObjectSystem<UnitComponent>, IAwake
 	{
 		public void Awake()
 		{

+ 1 - 1
Unity/Assets/Scripts/Entity/AssetsBundleLoaderAsync.cs

@@ -5,7 +5,7 @@ using UnityEngine;
 namespace Model
 {
 	[ObjectEvent]
-	public class AssetsBundleLoaderAsyncEvent : ObjectEvent<AssetsBundleLoaderAsync>, IUpdate
+	public class AssetsBundleLoaderAsyncSystem : ObjectSystem<AssetsBundleLoaderAsync>, IUpdate
 	{
 		public void Update()
 		{

+ 1 - 1
Unity/Assets/Scripts/Entity/AssetsLoaderAsync.cs

@@ -5,7 +5,7 @@ using UnityEngine;
 namespace Model
 {
 	[ObjectEvent]
-	public class AssetsLoaderAsyncEvent : ObjectEvent<AssetsLoaderAsync>, IUpdate, IAwake<AssetBundle>
+	public class AssetsLoaderAsyncSystem : ObjectSystem<AssetsLoaderAsync>, IUpdate, IAwake<AssetBundle>
 	{
 		public void Awake(AssetBundle assetBundle)
 		{

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

@@ -13,7 +13,6 @@
 					return scene;
 				}
 				scene = new Scene();
-				scene.AddComponent<EventComponent>();
 				scene.AddComponent<TimerComponent>();
 				return scene;
 			}

+ 1 - 1
Unity/Assets/Scripts/Entity/Session.cs

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
 namespace Model
 {
 	[ObjectEvent]
-	public class SessionEvent : ObjectEvent<Session>, IAwake<NetworkComponent, AChannel>, IStart
+	public class SessionSystem : ObjectSystem<Session>, IAwake<NetworkComponent, AChannel>, IStart
 	{
 		public void Awake(NetworkComponent network, AChannel channel)
 		{

+ 1 - 1
Unity/Assets/Scripts/Entity/UI.cs

@@ -4,7 +4,7 @@ using UnityEngine;
 namespace 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)
 		{

+ 1 - 1
Unity/Assets/Scripts/Entity/Unit.cs

@@ -9,7 +9,7 @@ namespace Model
 	}
 
 	[ObjectEvent]
-	public class UnitEvent : ObjectEvent<Unit>
+	public class UnitSystem : ObjectSystem<Unit>
 	{
 	}
 

+ 1 - 1
Unity/Assets/Scripts/Entity/UnityWebRequestAsync.cs

@@ -7,7 +7,7 @@ using UnityEngine.Networking;
 namespace Model
 {
 	[ObjectEvent]
-	public class UnityWebRequestEvent : ObjectEvent<UnityWebRequestAsync>, IUpdate
+	public class UnityWebRequestSystem : ObjectSystem<UnityWebRequestAsync>, IUpdate
 	{
 		public void Update()
 		{

+ 1 - 1
Unity/Assets/Scripts/Entity/WWWAsync.cs

@@ -6,7 +6,7 @@ using UnityEngine;
 namespace Model
 {
 	[ObjectEvent]
-	public class WWWAsyncEvent : ObjectEvent<WWWAsync>, IUpdate
+	public class WwwAsyncSystem : ObjectSystem<WWWAsync>, IUpdate
 	{
 		public void Update()
 		{

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

@@ -8,9 +8,9 @@ namespace Model
 	{
 		public static async Task DownloadBundle()
 		{
-			Game.Scene.GetComponent<EventComponent>().Run(EventIdType.LoadingBegin);
+			EventSystem.Instance.Run(EventIdType.LoadingBegin);
 			await StartDownLoadResources();
-			Game.Scene.GetComponent<EventComponent>().Run(EventIdType.LoadingFinish);
+			EventSystem.Instance.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 (ObjectEvents.Instance.HotfixAssembly == null)
+			if (EventSystem.Instance.HotfixAssembly == null)
 			{
 				return new Type[0];
 			}
-			return ObjectEvents.Instance.HotfixAssembly.GetTypes();
+			return EventSystem.Instance.HotfixAssembly.GetTypes();
 #endif
 		}
 
 		public static Type[] GetMonoTypes()
 		{
 			List<Type> types = new List<Type>();
-			foreach (Assembly assembly in ObjectEvents.Instance.GetAll())
+			foreach (Assembly assembly in EventSystem.Instance.GetAll())
 			{
 				types.AddRange(assembly.GetTypes());
 			}

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

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

+ 1 - 1
Unity/Assets/Scripts/UI/UILoading/Component/UILoadingComponent.cs

@@ -4,7 +4,7 @@ using UnityEngine.UI;
 namespace Model
 {
 	[ObjectEvent]
-	public class UILoadingComponentEvent : ObjectEvent<UILoadingComponent>, IAwake, IStart
+	public class UiLoadingComponentSystem : ObjectSystem<UILoadingComponent>, IAwake, IStart
 	{
 		public void Awake()
 		{

+ 0 - 9
Unity/Assets/ThirdParty/ILRuntime/Mono.Cecil.Mdb.meta

@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: 7009bf06a68e5594dbd9d52f601ec08a
-folderAsset: yes
-timeCreated: 1509540093
-licenseType: Free
-DefaultImporter:
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

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

@@ -8,7 +8,7 @@ namespace Hotfix
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectEvents.Instance.Awake(disposer);
+			ObjectSystem.Instance.Awake(disposer);
 			return disposer;
 		}
 
@@ -16,7 +16,7 @@ namespace Hotfix
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectEvents.Instance.Awake(disposer, a);
+			ObjectSystem.Instance.Awake(disposer, a);
 			return disposer;
 		}
 
@@ -24,7 +24,7 @@ namespace Hotfix
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectEvents.Instance.Awake(disposer, a, b);
+			ObjectSystem.Instance.Awake(disposer, a, b);
 			return disposer;
 		}
 
@@ -32,7 +32,7 @@ namespace Hotfix
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Parent = entity;
-			ObjectEvents.Instance.Awake(disposer, a, b, c);
+			ObjectSystem.Instance.Awake(disposer, a, b, c);
 			return disposer;
 		}
 	}

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

@@ -7,28 +7,28 @@ namespace Hotfix
 		public static T Create<T>() where T : Disposer
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
-			ObjectEvents.Instance.Awake(disposer);
+			ObjectSystem.Instance.Awake(disposer);
 			return disposer;
 		}
 
 		public static T Create<T, A>(A a) where T : Disposer
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
-			ObjectEvents.Instance.Awake(disposer, a);
+			ObjectSystem.Instance.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>();
-			ObjectEvents.Instance.Awake(disposer, a, b);
+			ObjectSystem.Instance.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>();
-			ObjectEvents.Instance.Awake(disposer, a, b, c);
+			ObjectSystem.Instance.Awake(disposer, a, b, c);
 			return disposer;
 		}
 
@@ -36,7 +36,7 @@ namespace Hotfix
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
-			ObjectEvents.Instance.Awake(disposer);
+			ObjectSystem.Instance.Awake(disposer);
 			return disposer;
 		}
 
@@ -44,7 +44,7 @@ namespace Hotfix
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
-			ObjectEvents.Instance.Awake(disposer, a);
+			ObjectSystem.Instance.Awake(disposer, a);
 			return disposer;
 		}
 
@@ -52,7 +52,7 @@ namespace Hotfix
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
-			ObjectEvents.Instance.Awake(disposer, a, b);
+			ObjectSystem.Instance.Awake(disposer, a, b);
 			return disposer;
 		}
 
@@ -60,7 +60,7 @@ namespace Hotfix
 		{
 			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
-			ObjectEvents.Instance.Awake(disposer, a, b, c);
+			ObjectSystem.Instance.Awake(disposer, a, b, c);
 			return disposer;
 		}
 	}

+ 5 - 5
Unity/Hotfix/Base/Object/ObjectPool.cs

@@ -16,7 +16,7 @@ namespace Hotfix
 			}
 	    }
 
-        private readonly Dictionary<Type, EQueue<Disposer>> dictionary = new Dictionary<Type, EQueue<Disposer>>();
+        private readonly Dictionary<Type, Queue<Disposer>> dictionary = new Dictionary<Type, Queue<Disposer>>();
 
         private ObjectPool()
         {
@@ -29,10 +29,10 @@ namespace Hotfix
 
         public Disposer Fetch(Type type)
         {
-	        EQueue<Disposer> queue;
+	        Queue<Disposer> queue;
             if (!this.dictionary.TryGetValue(type, out queue))
             {
-                queue = new EQueue<Disposer>();
+                queue = new Queue<Disposer>();
                 this.dictionary.Add(type, queue);
             }
 	        Disposer obj;
@@ -54,10 +54,10 @@ namespace Hotfix
         public void Recycle(Disposer obj)
         {
             Type type = obj.GetType();
-	        EQueue<Disposer> queue;
+	        Queue<Disposer> queue;
             if (!this.dictionary.TryGetValue(type, out queue))
             {
-                queue = new EQueue<Disposer>();
+                queue = new Queue<Disposer>();
 				this.dictionary.Add(type, queue);
             }
             queue.Enqueue(obj);

+ 39 - 45
Unity/Hotfix/Base/Object/ObjectEvents.cs → Unity/Hotfix/Base/Object/ObjectSystem.cs

@@ -30,38 +30,40 @@ namespace Hotfix
 		}
 	}
 
-	public sealed class ObjectEvents
+	public sealed class ObjectSystem
 	{
-		private static ObjectEvents instance;
+		private static ObjectSystem instance;
 
-		public static ObjectEvents Instance
+		public static ObjectSystem Instance
 		{
 			get
 			{
-				return instance ?? (instance = new ObjectEvents());
+				return instance ?? (instance = new ObjectSystem());
 			}
 		}
+
+		public static void Close()
+		{
+			instance = null;
+		}
 		
 		private readonly Dictionary<Type, IObjectEvent> disposerEvents = new Dictionary<Type, IObjectEvent>();
 
-		private EQueue<Disposer> updates = new EQueue<Disposer>();
-		private EQueue<Disposer> updates2 = new EQueue<Disposer>();
+		private Queue<Disposer> updates = new Queue<Disposer>();
+		private Queue<Disposer> updates2 = new Queue<Disposer>();
 
-		private readonly EQueue<Disposer> starts = new EQueue<Disposer>();
+		private readonly Queue<Disposer> starts = new Queue<Disposer>();
 
-		private EQueue<Disposer> loaders = new EQueue<Disposer>();
-		private EQueue<Disposer> loaders2 = new EQueue<Disposer>();
+		private Queue<Disposer> loaders = new Queue<Disposer>();
+		private Queue<Disposer> loaders2 = new Queue<Disposer>();
 
-		private EQueue<Disposer> lateUpdates = new EQueue<Disposer>();
-		private EQueue<Disposer> lateUpdates2 = new EQueue<Disposer>();
+		private Queue<Disposer> lateUpdates = new Queue<Disposer>();
+		private Queue<Disposer> lateUpdates2 = new Queue<Disposer>();
 
-		public static void Close()
-		{
-			instance = null;
-		}
-		
-		public ObjectEvents()
+		public ObjectSystem()
 		{
+			this.disposerEvents.Clear();
+
 			Type[] types = DllHelper.GetHotfixTypes();
 			foreach (Type type in types)
 			{
@@ -81,12 +83,13 @@ namespace Hotfix
 				}
 				this.disposerEvents[objectEvent.Type()] = objectEvent;
 			}
+
+			this.Load();
 		}
 
 		public void Add(Disposer disposer)
 		{
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{
 				return;
 			}
@@ -109,10 +112,9 @@ namespace Hotfix
 
 		public void Awake(Disposer disposer)
 		{
-			ObjectEvents.Instance.Add(disposer);
+			Instance.Add(disposer);
 
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{
 				return;
 			}
@@ -127,17 +129,16 @@ namespace Hotfix
 
 		public void Awake<P1>(Disposer disposer, P1 p1)
 		{
-			ObjectEvents.Instance.Add(disposer);
+			Instance.Add(disposer);
 
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{
-				return;
+				throw new Exception($"{disposer.GetType().Name} not found awake1");
 			}
 			IAwake<P1> iAwake = objectEvent as IAwake<P1>;
 			if (iAwake == null)
 			{
-				return;
+				throw new Exception($"{disposer.GetType().Name} not found awake1");
 			}
 			objectEvent.Set(disposer);
 			iAwake.Awake(p1);
@@ -145,17 +146,16 @@ namespace Hotfix
 
 		public void Awake<P1, P2>(Disposer disposer, P1 p1, P2 p2)
 		{
-			ObjectEvents.Instance.Add(disposer);
+			Instance.Add(disposer);
 
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{
-				return;
+				throw new Exception($"{disposer.GetType().Name} not found awake2");
 			}
 			IAwake<P1, P2> iAwake = objectEvent as IAwake<P1, P2>;
 			if (iAwake == null)
 			{
-				return;
+				throw new Exception($"{disposer.GetType().Name} not found awake2");
 			}
 			objectEvent.Set(disposer);
 			iAwake.Awake(p1, p2);
@@ -163,17 +163,16 @@ namespace Hotfix
 
 		public void Awake<P1, P2, P3>(Disposer disposer, P1 p1, P2 p2, P3 p3)
 		{
-			ObjectEvents.Instance.Add(disposer);
+			Instance.Add(disposer);
 
-			IObjectEvent objectEvent;
-			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+			if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 			{
-				return;
+				throw new Exception($"{disposer.GetType().Name} not found awake3");
 			}
 			IAwake<P1, P2, P3> iAwake = objectEvent as IAwake<P1, P2, P3>;
 			if (iAwake == null)
 			{
-				return;
+				throw new Exception($"{disposer.GetType().Name} not found awake3");
 			}
 			objectEvent.Set(disposer);
 			iAwake.Awake(p1, p2, p3);
@@ -189,8 +188,7 @@ namespace Hotfix
 					continue;
 				}
 
-				IObjectEvent objectEvent;
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 				{
 					continue;
 				}
@@ -221,9 +219,7 @@ namespace Hotfix
 			while (this.starts.Count > 0)
 			{
 				Disposer disposer = this.starts.Dequeue();
-
-				IObjectEvent objectEvent;
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 				{
 					continue;
 				}
@@ -248,9 +244,7 @@ namespace Hotfix
 				{
 					continue;
 				}
-
-				IObjectEvent objectEvent;
-				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectEvent))
+				if (!this.disposerEvents.TryGetValue(disposer.GetType(), out IObjectEvent objectEvent))
 				{
 					continue;
 				}

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff