Przeglądaj źródła

框架做调整,domain增加了IScene接口,带来很多好处
1. 强制domain必须有IScene接口,这个其它Entity就无法设置为Domain
2. Scene的实现得到了简化,不需要再覆盖Domain跟Parent方法
3. 事件第一个参数以后不再限制只能是Scene,只要是IScene都可以
这么做的目的是为了方便扩展另外一套Entity系统,比如帧同步的Entity系统

tanghai 2 lat temu
rodzic
commit
3089fa41f4
39 zmienionych plików z 139 dodań i 164 usunięć
  1. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Client/Demo/Session/NetClientComponentOnReadEvent.cs
  2. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/EntryEvent2_InitServer.cs
  3. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Scenes/Map/AOI/ChangePosition_NotifyAOI.cs
  4. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Scenes/Map/Unit/UnitEnterSightRange_NotifyClient.cs
  5. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Scenes/Map/Unit/UnitLeaveSightRange_NotifyClient.cs
  6. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Scenes/Router/HttpGetRouterHandler.cs
  7. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs
  8. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetServerComponentOnReadEvent.cs
  9. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Http/HttpComponentSystem.cs
  10. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Share/Demo/EntryEvent1_InitShare.cs
  11. 1 1
      Unity/Assets/Scripts/Codes/Hotfix/Share/Module/Numeric/NumericChangeEvent_NotifyWatcher.cs
  12. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/EntryEvent3_InitClient.cs
  13. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Scene/AfterCreateClientScene_AddComponent.cs
  14. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Scene/AfterCreateCurrentScene_AddComponent.cs
  15. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Scene/SceneChangeStart_AddComponent.cs
  16. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/UI/UIHelp/SceneChangeFinishEvent_CreateUIHelp.cs
  17. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/UI/UILobby/LoginFinish_CreateLobbyUI.cs
  18. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/UI/UILogin/AppStartInitFinish_CreateLoginUI.cs
  19. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/UI/UILogin/LoginFinish_RemoveLoginUI.cs
  20. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Unit/AfterUnitCreate_CreateUnitView.cs
  21. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Unit/ChangePosition_SyncGameObjectPos.cs
  22. 1 1
      Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Unit/ChangeRotation_SyncGameObjectRotation.cs
  23. 1 1
      Unity/Assets/Scripts/Codes/Model/Server/Module/Http/IHttpHandler.cs
  24. 23 24
      Unity/Assets/Scripts/Core/Module/Entity/Entity.cs
  25. 4 3
      Unity/Assets/Scripts/Core/Module/Entity/EntitySceneFactory.cs
  26. 5 42
      Unity/Assets/Scripts/Core/Module/Entity/Scene.cs
  27. 2 2
      Unity/Assets/Scripts/Core/Module/Entity/SceneHelper.cs
  28. 60 48
      Unity/Assets/Scripts/Core/Module/EventSystem/EventSystem.cs
  29. 1 1
      Unity/Assets/Scripts/Core/Module/EventSystem/IAddComponentSystem.cs
  30. 5 5
      Unity/Assets/Scripts/Core/Module/EventSystem/IAwakeSystem.cs
  31. 1 1
      Unity/Assets/Scripts/Core/Module/EventSystem/IDeserializeSystem.cs
  32. 1 1
      Unity/Assets/Scripts/Core/Module/EventSystem/IDestroySystem.cs
  33. 3 3
      Unity/Assets/Scripts/Core/Module/EventSystem/IEvent.cs
  34. 1 1
      Unity/Assets/Scripts/Core/Module/EventSystem/IGetComponentSystem.cs
  35. 1 1
      Unity/Assets/Scripts/Core/Module/EventSystem/ILateUpdateSystem.cs
  36. 1 1
      Unity/Assets/Scripts/Core/Module/EventSystem/ILoadSystem.cs
  37. 1 1
      Unity/Assets/Scripts/Core/Module/EventSystem/ISystemType.cs
  38. 1 1
      Unity/Assets/Scripts/Core/Module/EventSystem/IUpdateSystem.cs
  39. 6 6
      Unity/Assets/Scripts/Core/Module/EventSystem/InstanceQueueIndex.cs

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Client/Demo/Session/NetClientComponentOnReadEvent.cs

@@ -1,7 +1,7 @@
 namespace ET.Client
 {
     [Event(SceneType.Process)]
-    public class NetClientComponentOnReadEvent: AEvent<NetClientComponentOnRead>
+    public class NetClientComponentOnReadEvent: AEvent<Scene, NetClientComponentOnRead>
     {
         protected override async ETTask Run(Scene scene, NetClientComponentOnRead args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/EntryEvent2_InitServer.cs

@@ -3,7 +3,7 @@ using System.Net;
 namespace ET.Server
 {
     [Event(SceneType.Process)]
-    public class EntryEvent2_InitServer: AEvent<ET.EventType.EntryEvent2>
+    public class EntryEvent2_InitServer: AEvent<Scene, ET.EventType.EntryEvent2>
     {
         protected override async ETTask Run(Scene scene, ET.EventType.EntryEvent2 args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Scenes/Map/AOI/ChangePosition_NotifyAOI.cs

@@ -3,7 +3,7 @@
 namespace ET.Server
 {
     [Event(SceneType.Map)]
-    public class ChangePosition_NotifyAOI: AEvent<ET.EventType.ChangePosition>
+    public class ChangePosition_NotifyAOI: AEvent<Scene, ET.EventType.ChangePosition>
     {
         protected override async ETTask Run(Scene scene, ET.EventType.ChangePosition args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Scenes/Map/Unit/UnitEnterSightRange_NotifyClient.cs

@@ -2,7 +2,7 @@
 {
     // 进入视野通知
     [Event(SceneType.Map)]
-    public class UnitEnterSightRange_NotifyClient: AEvent<EventType.UnitEnterSightRange>
+    public class UnitEnterSightRange_NotifyClient: AEvent<Scene, EventType.UnitEnterSightRange>
     {
         protected override async ETTask Run(Scene scene, EventType.UnitEnterSightRange args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Scenes/Map/Unit/UnitLeaveSightRange_NotifyClient.cs

@@ -2,7 +2,7 @@
 {
     // 离开视野
     [Event(SceneType.Map)]
-    public class UnitLeaveSightRange_NotifyClient: AEvent<EventType.UnitLeaveSightRange>
+    public class UnitLeaveSightRange_NotifyClient: AEvent<Scene, EventType.UnitLeaveSightRange>
     {
         protected override async ETTask Run(Scene scene, EventType.UnitLeaveSightRange args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Scenes/Router/HttpGetRouterHandler.cs

@@ -8,7 +8,7 @@ namespace ET.Server
     [HttpHandler(SceneType.RouterManager, "/get_router")]
     public class HttpGetRouterHandler : IHttpHandler
     {
-        public async ETTask Handle(Entity domain, HttpListenerContext context)
+        public async ETTask Handle(Scene scene, HttpListenerContext context)
         {
             HttpGetRouterResponse response = new HttpGetRouterResponse();
             response.Realms = new List<string>();

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs

@@ -3,7 +3,7 @@
 namespace ET.Server
 {
     [Event(SceneType.Process)]
-    public class NetInnerComponentOnReadEvent: AEvent<NetInnerComponentOnRead>
+    public class NetInnerComponentOnReadEvent: AEvent<Scene, NetInnerComponentOnRead>
     {
         protected override async ETTask Run(Scene scene, NetInnerComponentOnRead args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Demo/Session/NetServerComponentOnReadEvent.cs

@@ -1,7 +1,7 @@
 namespace ET.Server
 {
     [Event(SceneType.Process)]
-    public class NetServerComponentOnReadEvent: AEvent<NetServerComponentOnRead>
+    public class NetServerComponentOnReadEvent: AEvent<Scene, NetServerComponentOnRead>
     {
         protected override async ETTask Run(Scene scene, NetServerComponentOnRead args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Server/Module/Http/HttpComponentSystem.cs

@@ -117,7 +117,7 @@ namespace ET.Server
                 IHttpHandler handler;
                 if (self.dispatcher.TryGetValue(context.Request.Url.AbsolutePath, out handler))
                 {
-                    await handler.Handle(self.Domain, context);
+                    await handler.Handle(self.DomainScene(), context);
                 }
             }
             catch (Exception e)

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Share/Demo/EntryEvent1_InitShare.cs

@@ -1,7 +1,7 @@
 namespace ET
 {
     [Event(SceneType.Process)]
-    public class EntryEvent1_InitShare: AEvent<EventType.EntryEvent1>
+    public class EntryEvent1_InitShare: AEvent<Scene, EventType.EntryEvent1>
     {
         protected override async ETTask Run(Scene scene, EventType.EntryEvent1 args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Hotfix/Share/Module/Numeric/NumericChangeEvent_NotifyWatcher.cs

@@ -2,7 +2,7 @@
 {
 	// 分发数值监听
 	[Event(SceneType.All)]  // 服务端Map需要分发, 客户端CurrentScene也要分发
-	public class NumericChangeEvent_NotifyWatcher: AEvent<EventType.NumbericChange>
+	public class NumericChangeEvent_NotifyWatcher: AEvent<Scene, EventType.NumbericChange>
 	{
 		protected override async ETTask Run(Scene scene, EventType.NumbericChange args)
 		{

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/EntryEvent3_InitClient.cs

@@ -4,7 +4,7 @@ using System.IO;
 namespace ET.Client
 {
     [Event(SceneType.Process)]
-    public class EntryEvent3_InitClient: AEvent<ET.EventType.EntryEvent3>
+    public class EntryEvent3_InitClient: AEvent<Scene, ET.EventType.EntryEvent3>
     {
         protected override async ETTask Run(Scene scene, ET.EventType.EntryEvent3 args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Scene/AfterCreateClientScene_AddComponent.cs

@@ -1,7 +1,7 @@
 namespace ET.Client
 {
     [Event(SceneType.Client)]
-    public class AfterCreateClientScene_AddComponent: AEvent<EventType.AfterCreateClientScene>
+    public class AfterCreateClientScene_AddComponent: AEvent<Scene, EventType.AfterCreateClientScene>
     {
         protected override async ETTask Run(Scene scene, EventType.AfterCreateClientScene args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Scene/AfterCreateCurrentScene_AddComponent.cs

@@ -1,7 +1,7 @@
 namespace ET.Client
 {
     [Event(SceneType.Current)]
-    public class AfterCreateCurrentScene_AddComponent: AEvent<EventType.AfterCreateCurrentScene>
+    public class AfterCreateCurrentScene_AddComponent: AEvent<Scene, EventType.AfterCreateCurrentScene>
     {
         protected override async ETTask Run(Scene scene, EventType.AfterCreateCurrentScene args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Scene/SceneChangeStart_AddComponent.cs

@@ -3,7 +3,7 @@ using UnityEngine.SceneManagement;
 namespace ET.Client
 {
     [Event(SceneType.Client)]
-    public class SceneChangeStart_AddComponent: AEvent<EventType.SceneChangeStart>
+    public class SceneChangeStart_AddComponent: AEvent<Scene, EventType.SceneChangeStart>
     {
         protected override async ETTask Run(Scene scene, EventType.SceneChangeStart args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/UI/UIHelp/SceneChangeFinishEvent_CreateUIHelp.cs

@@ -1,7 +1,7 @@
 namespace ET.Client
 {
     [Event(SceneType.Current)]
-    public class SceneChangeFinishEvent_CreateUIHelp : AEvent<EventType.SceneChangeFinish>
+    public class SceneChangeFinishEvent_CreateUIHelp : AEvent<Scene, EventType.SceneChangeFinish>
     {
         protected override async ETTask Run(Scene scene, EventType.SceneChangeFinish args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/UI/UILobby/LoginFinish_CreateLobbyUI.cs

@@ -1,7 +1,7 @@
 namespace ET.Client
 {
 	[Event(SceneType.Client)]
-	public class LoginFinish_CreateLobbyUI: AEvent<EventType.LoginFinish>
+	public class LoginFinish_CreateLobbyUI: AEvent<Scene, EventType.LoginFinish>
 	{
 		protected override async ETTask Run(Scene scene, EventType.LoginFinish args)
 		{

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/UI/UILogin/AppStartInitFinish_CreateLoginUI.cs

@@ -1,7 +1,7 @@
 namespace ET.Client
 {
 	[Event(SceneType.Client)]
-	public class AppStartInitFinish_CreateLoginUI: AEvent<EventType.AppStartInitFinish>
+	public class AppStartInitFinish_CreateLoginUI: AEvent<Scene, EventType.AppStartInitFinish>
 	{
 		protected override async ETTask Run(Scene scene, EventType.AppStartInitFinish args)
 		{

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/UI/UILogin/LoginFinish_RemoveLoginUI.cs

@@ -1,7 +1,7 @@
 namespace ET.Client
 {
 	[Event(SceneType.Client)]
-	public class LoginFinish_RemoveLoginUI: AEvent<EventType.LoginFinish>
+	public class LoginFinish_RemoveLoginUI: AEvent<Scene, EventType.LoginFinish>
 	{
 		protected override async ETTask Run(Scene scene, EventType.LoginFinish args)
 		{

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Unit/AfterUnitCreate_CreateUnitView.cs

@@ -3,7 +3,7 @@
 namespace ET.Client
 {
     [Event(SceneType.Current)]
-    public class AfterUnitCreate_CreateUnitView: AEvent<EventType.AfterUnitCreate>
+    public class AfterUnitCreate_CreateUnitView: AEvent<Scene, EventType.AfterUnitCreate>
     {
         protected override async ETTask Run(Scene scene, EventType.AfterUnitCreate args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Unit/ChangePosition_SyncGameObjectPos.cs

@@ -3,7 +3,7 @@
 namespace ET.Client
 {
     [Event(SceneType.Current)]
-    public class ChangePosition_SyncGameObjectPos: AEvent<EventType.ChangePosition>
+    public class ChangePosition_SyncGameObjectPos: AEvent<Scene, EventType.ChangePosition>
     {
         protected override async ETTask Run(Scene scene, EventType.ChangePosition args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Demo/Unit/ChangeRotation_SyncGameObjectRotation.cs

@@ -3,7 +3,7 @@ using UnityEngine;
 namespace ET.Client
 {
     [Event(SceneType.Current)]
-    public class ChangeRotation_SyncGameObjectRotation: AEvent<EventType.ChangeRotation>
+    public class ChangeRotation_SyncGameObjectRotation: AEvent<Scene, EventType.ChangeRotation>
     {
         protected override async ETTask Run(Scene scene, EventType.ChangeRotation args)
         {

+ 1 - 1
Unity/Assets/Scripts/Codes/Model/Server/Module/Http/IHttpHandler.cs

@@ -4,6 +4,6 @@ namespace ET.Server
 {
     public interface IHttpHandler
     {
-        ETTask Handle(Entity domain, HttpListenerContext context);
+        ETTask Handle(Scene scene, HttpListenerContext context);
     }
 }

+ 23 - 24
Unity/Assets/Scripts/Core/Module/Entity/Entity.cs

@@ -15,6 +15,11 @@ namespace ET
         IsNew = 1 << 4,
     }
 
+    public interface IScene
+    {
+        SceneType SceneType { get; set; }
+    }
+
     public partial class Entity: DisposeObject
     {
 #if ENABLE_VIEW && UNITY_EDITOR
@@ -103,7 +108,7 @@ namespace ET
         }
 
         [BsonIgnore]
-        private bool IsComponent
+        protected bool IsComponent
         {
             get => (this.status & EntityStatus.IsComponent) == EntityStatus.IsComponent;
             set
@@ -161,10 +166,10 @@ namespace ET
 
         // 可以改变parent,但是不能设置为null
         [BsonIgnore]
-        public Entity Parent
+        public virtual Entity Parent
         {
             get => this.parent;
-            private set
+            protected set
             {
                 if (value == null)
                 {
@@ -197,7 +202,8 @@ namespace ET
                 this.parent = value;
                 this.IsComponent = false;
                 this.parent.AddToChildren(this);
-                this.Domain = this.parent.domain;
+
+                this.Domain = this is IScene? this as IScene : this.parent.domain;
 
 #if ENABLE_VIEW && UNITY_EDITOR
                 this.viewGO.GetComponent<ComponentView>().Component = this;
@@ -252,7 +258,7 @@ namespace ET
                 this.parent = value;
                 this.IsComponent = true;
                 this.parent.AddToComponents(this);
-                this.Domain = this.parent.domain;
+                this.Domain = this is IScene? this as IScene : this.parent.domain;
             }
         }
 
@@ -265,19 +271,19 @@ namespace ET
         [BsonDefaultValue(0L)]
         [BsonElement]
         [BsonId]
-        public long Id { get; set; }
+        public long Id { get; protected set; }
 
         [BsonIgnore]
-        protected Entity domain;
+        protected IScene domain;
 
         [BsonIgnore]
-        public Entity Domain
+        public virtual IScene Domain
         {
             get
             {
                 return this.domain;
             }
-            private set
+            protected set
             {
                 if (value == null)
                 {
@@ -289,12 +295,16 @@ namespace ET
                     return;
                 }
 
-                Entity preDomain = this.domain;
+                IScene preDomain = this.domain;
                 this.domain = value;
 
                 if (preDomain == null)
                 {
-                    this.InstanceId = IdGenerater.Instance.GenerateInstanceId();
+                    if (this.InstanceId == 0)
+                    {
+                        this.InstanceId = IdGenerater.Instance.GenerateInstanceId();
+                    }
+
                     this.IsRegister = true;
 
                     // 反序列化出来的需要设置父子关系
@@ -383,7 +393,7 @@ namespace ET
 
         [BsonElement("C")]
         [BsonIgnoreIfNull]
-        private List<Entity> componentsDB;
+        protected List<Entity> componentsDB;
 
         [BsonIgnore]
         private SortedDictionary<string, Entity> components;
@@ -857,18 +867,7 @@ namespace ET
             return component;
         }
 
-        public T AddChild<T, A, B, C, D>(A a, B b, C c, D d, bool isFromPool = false) where T : Entity, IAwake<A, B, C, D>
-        {
-            Type type = typeof (T);
-            T component = (T) Entity.Create(type, isFromPool);
-            component.Id = IdGenerater.Instance.GenerateId();
-            component.Parent = this;
-
-            EventSystem.Instance.Awake(component, a, b, c, d);
-            return component;
-        }
-
-        public T AddChildWithId<T>(long id, bool isFromPool = false) where T : Entity, IAwake, new()
+        public T AddChildWithId<T>(long id, bool isFromPool = false) where T : Entity, IAwake
         {
             Type type = typeof (T);
             T component = Entity.Create(type, isFromPool) as T;

+ 4 - 3
Unity/Assets/Scripts/Core/Module/Entity/EntitySceneFactory.cs

@@ -4,15 +4,16 @@
     {
         public static Scene CreateScene(long id, long instanceId, int zone, SceneType sceneType, string name, Entity parent = null)
         {
-            Scene scene = new Scene(id, instanceId, zone, sceneType, name, parent);
-
+            Scene scene = new Scene(id, instanceId, zone, sceneType, name);
+            parent?.AddChild(scene);
             return scene;
         }
 
         public static Scene CreateScene(int zone, SceneType sceneType, string name, Entity parent = null)
         {
             long instanceId = IdGenerater.Instance.GenerateInstanceId();
-            Scene scene = new Scene(zone, instanceId, zone, sceneType, name, parent);
+            Scene scene = new Scene(zone, instanceId, zone, sceneType, name);
+            parent?.AddChild(scene);
             return scene;
         }
     }

+ 5 - 42
Unity/Assets/Scripts/Core/Module/Entity/Scene.cs

@@ -3,9 +3,8 @@
 namespace ET
 {
     [EnableMethod]
-    [DebuggerDisplay("ViewName,nq")]
     [ChildOf]
-    public sealed class Scene: Entity
+    public class Scene: Entity, IScene
     {
         public int Zone
         {
@@ -15,6 +14,7 @@ namespace ET
         public SceneType SceneType
         {
             get;
+            set;
         }
 
         public string Name
@@ -22,22 +22,11 @@ namespace ET
             get;
         }
 
-        public Scene(long instanceId, int zone, SceneType sceneType, string name, Entity parent)
+        public Scene()
         {
-            this.Id = instanceId;
-            this.InstanceId = instanceId;
-            this.Zone = zone;
-            this.SceneType = sceneType;
-            this.Name = name;
-            this.IsCreated = true;
-            this.IsNew = true;
-            this.Parent = parent;
-            this.Domain = this;
-            this.IsRegister = true;
-            Log.Info($"scene create: {this.SceneType} {this.Name} {this.Id} {this.InstanceId} {this.Zone}");
         }
 
-        public Scene(long id, long instanceId, int zone, SceneType sceneType, string name, Entity parent)
+        public Scene(long id, long instanceId, int zone, SceneType sceneType, string name)
         {
             this.Id = id;
             this.InstanceId = instanceId;
@@ -46,9 +35,8 @@ namespace ET
             this.Name = name;
             this.IsCreated = true;
             this.IsNew = true;
-            this.Parent = parent;
-            this.Domain = this;
             this.IsRegister = true;
+            this.domain = this;
             Log.Info($"scene create: {this.SceneType} {this.Name} {this.Id} {this.InstanceId} {this.Zone}");
         }
 
@@ -58,31 +46,6 @@ namespace ET
             
             Log.Info($"scene dispose: {this.SceneType} {this.Name} {this.Id} {this.InstanceId} {this.Zone}");
         }
-
-        public new Entity Domain
-        {
-            get => this.domain;
-            private set => this.domain = value;
-        }
-
-        public new Entity Parent
-        {
-            get
-            {
-                return this.parent;
-            }
-            private set
-            {
-                if (value == null)
-                {
-                    //this.parent = this;
-                    return;
-                }
-
-                this.parent = value;
-                this.parent.Children.Add(this.Id, this);
-            }
-        }
         
         protected override string ViewName
         {

+ 2 - 2
Unity/Assets/Scripts/Core/Module/Entity/SceneHelper.cs

@@ -4,12 +4,12 @@ namespace ET
     {
         public static int DomainZone(this Entity entity)
         {
-            return ((Scene) entity.Domain)?.Zone ?? 0;
+            return (entity.Domain as Scene)?.Zone ?? 0;
         }
 
         public static Scene DomainScene(this Entity entity)
         {
-            return (Scene) entity.Domain;
+            return entity.Domain as Scene;
         }
     }
 }

+ 60 - 48
Unity/Assets/Scripts/Core/Module/EventSystem/EventSystem.cs

@@ -5,57 +5,69 @@ using System.Text;
 
 namespace ET
 {
-    public class EventSystem: Singleton<EventSystem>, ISingletonUpdate, ISingletonLateUpdate
+    public class TypeSystems
     {
-        private class OneTypeSystems
+        public class OneTypeSystems
         {
+            public OneTypeSystems(int count)
+            {
+                this.QueueFlag = new bool[count];
+            }
+            
             public readonly UnOrderMultiMap<Type, object> Map = new();
             // 这里不用hash,数量比较少,直接for循环速度更快
-            public readonly bool[] QueueFlag = new bool[(int)InstanceQueueIndex.Max];
+            public readonly bool[] QueueFlag;
         }
-        
-        private class TypeSystems
+
+        private readonly int count;
+
+        public TypeSystems(int count)
         {
-            private readonly Dictionary<Type, OneTypeSystems> typeSystemsMap = new();
+            this.count = count;
+        }
+        
+        private readonly Dictionary<Type, OneTypeSystems> typeSystemsMap = new();
 
-            public OneTypeSystems GetOrCreateOneTypeSystems(Type type)
+        public OneTypeSystems GetOrCreateOneTypeSystems(Type type)
+        {
+            OneTypeSystems systems = null;
+            this.typeSystemsMap.TryGetValue(type, out systems);
+            if (systems != null)
             {
-                OneTypeSystems systems = null;
-                this.typeSystemsMap.TryGetValue(type, out systems);
-                if (systems != null)
-                {
-                    return systems;
-                }
-
-                systems = new OneTypeSystems();
-                this.typeSystemsMap.Add(type, systems);
                 return systems;
             }
 
-            public OneTypeSystems GetOneTypeSystems(Type type)
+            systems = new OneTypeSystems(this.count);
+            this.typeSystemsMap.Add(type, systems);
+            return systems;
+        }
+
+        public OneTypeSystems GetOneTypeSystems(Type type)
+        {
+            OneTypeSystems systems = null;
+            this.typeSystemsMap.TryGetValue(type, out systems);
+            return systems;
+        }
+
+        public List<object> GetSystems(Type type, Type systemType)
+        {
+            OneTypeSystems oneTypeSystems = null;
+            if (!this.typeSystemsMap.TryGetValue(type, out oneTypeSystems))
             {
-                OneTypeSystems systems = null;
-                this.typeSystemsMap.TryGetValue(type, out systems);
-                return systems;
+                return null;
             }
 
-            public List<object> GetSystems(Type type, Type systemType)
+            if (!oneTypeSystems.Map.TryGetValue(systemType, out List<object> systems))
             {
-                OneTypeSystems oneTypeSystems = null;
-                if (!this.typeSystemsMap.TryGetValue(type, out oneTypeSystems))
-                {
-                    return null;
-                }
-
-                if (!oneTypeSystems.Map.TryGetValue(systemType, out List<object> systems))
-                {
-                    return null;
-                }
-
-                return systems;
+                return null;
             }
-        }
 
+            return systems;
+        }
+    }
+    
+    public class EventSystem: Singleton<EventSystem>, ISingletonUpdate, ISingletonLateUpdate
+    {
         private class EventInfo
         {
             public IEvent IEvent { get; }
@@ -79,7 +91,7 @@ namespace ET
 
         private TypeSystems typeSystems;
 
-        private readonly Queue<long>[] queues = new Queue<long>[(int)InstanceQueueIndex.Max];
+        private readonly Queue<long>[] queues = new Queue<long>[InstanceQueueIndex.Max];
 
         public EventSystem()
         {
@@ -112,7 +124,7 @@ namespace ET
                 }
             }
 
-            this.typeSystems = new TypeSystems();
+            this.typeSystems = new TypeSystems(InstanceQueueIndex.Max);
 
             foreach (Type type in this.GetTypes(typeof (ObjectSystemAttribute)))
             {
@@ -120,12 +132,12 @@ namespace ET
 
                 if (obj is ISystemType iSystemType)
                 {
-                    OneTypeSystems oneTypeSystems = this.typeSystems.GetOrCreateOneTypeSystems(iSystemType.Type());
+                    TypeSystems.OneTypeSystems oneTypeSystems = this.typeSystems.GetOrCreateOneTypeSystems(iSystemType.Type());
                     oneTypeSystems.Map.Add(iSystemType.SystemType(), obj);
-                    InstanceQueueIndex index = iSystemType.GetInstanceQueueIndex();
+                    int index = iSystemType.GetInstanceQueueIndex();
                     if (index > InstanceQueueIndex.None && index < InstanceQueueIndex.Max)
                     {
-                        oneTypeSystems.QueueFlag[(int)index] = true;
+                        oneTypeSystems.QueueFlag[index] = true;
                     }
                 }
             }
@@ -210,11 +222,11 @@ namespace ET
             return this.allTypes[typeName];
         }
 
-        public void RegisterSystem(Entity component)
+        public virtual void RegisterSystem(Entity component)
         {
             Type type = component.GetType();
 
-            OneTypeSystems oneTypeSystems = this.typeSystems.GetOneTypeSystems(type);
+            TypeSystems.OneTypeSystems oneTypeSystems = this.typeSystems.GetOneTypeSystems(type);
             if (oneTypeSystems == null)
             {
                 return;
@@ -441,7 +453,7 @@ namespace ET
 
         public void Load()
         {
-            Queue<long> queue = this.queues[(int)InstanceQueueIndex.Load];
+            Queue<long> queue = this.queues[InstanceQueueIndex.Load];
             int count = queue.Count;
             while (count-- > 0)
             {
@@ -507,7 +519,7 @@ namespace ET
 
         public void Update()
         {
-            Queue<long> queue = this.queues[(int)InstanceQueueIndex.Update];
+            Queue<long> queue = this.queues[InstanceQueueIndex.Update];
             int count = queue.Count;
             while (count-- > 0)
             {
@@ -547,7 +559,7 @@ namespace ET
 
         public void LateUpdate()
         {
-            Queue<long> queue = this.queues[(int)InstanceQueueIndex.LateUpdate];
+            Queue<long> queue = this.queues[InstanceQueueIndex.LateUpdate];
             int count = queue.Count;
             while (count-- > 0)
             {
@@ -585,7 +597,7 @@ namespace ET
             }
         }
 
-        public async ETTask PublishAsync<T>(Scene scene, T a) where T : struct
+        public async ETTask PublishAsync<S, T>(S scene, T a) where S: class, IScene where T : struct
         {
             List<EventInfo> iEvents;
             if (!this.allEvents.TryGetValue(typeof(T), out iEvents))
@@ -602,7 +614,7 @@ namespace ET
                     continue;
                 }
                     
-                if (!(eventInfo.IEvent is AEvent<T> aEvent))
+                if (!(eventInfo.IEvent is AEvent<S, T> aEvent))
                 {
                     Log.Error($"event error: {eventInfo.IEvent.GetType().Name}");
                     continue;
@@ -621,7 +633,7 @@ namespace ET
             }
         }
 
-        public void Publish<T>(Scene scene, T a) where T : struct
+        public void Publish<S, T>(S scene, T a) where S: class, IScene where T : struct
         {
             List<EventInfo> iEvents;
             if (!this.allEvents.TryGetValue(typeof (T), out iEvents))
@@ -638,7 +650,7 @@ namespace ET
                 }
 
                 
-                if (!(eventInfo.IEvent is AEvent<T> aEvent))
+                if (!(eventInfo.IEvent is AEvent<S, T> aEvent))
                 {
                     Log.Error($"event error: {eventInfo.IEvent.GetType().Name}");
                     continue;

+ 1 - 1
Unity/Assets/Scripts/Core/Module/EventSystem/IAddComponentSystem.cs

@@ -24,7 +24,7 @@ namespace ET
 			return typeof(IAddComponentSystem);
 		}
 
-		InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+		int ISystemType.GetInstanceQueueIndex()
 		{
 			return InstanceQueueIndex.None;
 		}

+ 5 - 5
Unity/Assets/Scripts/Core/Module/EventSystem/IAwakeSystem.cs

@@ -60,7 +60,7 @@ namespace ET
             return typeof(IAwakeSystem);
         }
 
-        InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+        int ISystemType.GetInstanceQueueIndex()
         {
             return InstanceQueueIndex.None;
         }
@@ -86,7 +86,7 @@ namespace ET
             return typeof(IAwakeSystem<A>);
         }
 
-        InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+        int ISystemType.GetInstanceQueueIndex()
         {
             return InstanceQueueIndex.None;
         }
@@ -112,7 +112,7 @@ namespace ET
             return typeof(IAwakeSystem<A, B>);
         }
 
-        InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+        int ISystemType.GetInstanceQueueIndex()
         {
             return InstanceQueueIndex.None;
         }
@@ -138,7 +138,7 @@ namespace ET
             return typeof(IAwakeSystem<A, B, C>);
         }
 
-        InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+        int ISystemType.GetInstanceQueueIndex()
         {
             return InstanceQueueIndex.None;
         }
@@ -164,7 +164,7 @@ namespace ET
             return typeof(IAwakeSystem<A, B, C, D>);
         }
 
-        InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+        int ISystemType.GetInstanceQueueIndex()
         {
             return InstanceQueueIndex.None;
         }

+ 1 - 1
Unity/Assets/Scripts/Core/Module/EventSystem/IDeserializeSystem.cs

@@ -28,7 +28,7 @@ namespace ET
 			return typeof(IDeserializeSystem);
 		}
 
-		InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+		int ISystemType.GetInstanceQueueIndex()
 		{
 			return InstanceQueueIndex.None;
 		}

+ 1 - 1
Unity/Assets/Scripts/Core/Module/EventSystem/IDestroySystem.cs

@@ -24,7 +24,7 @@ namespace ET
 			return typeof(IDestroySystem);
 		}
 
-		InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+		int ISystemType.GetInstanceQueueIndex()
 		{
 			return InstanceQueueIndex.None;
 		}

+ 3 - 3
Unity/Assets/Scripts/Core/Module/EventSystem/IEvent.cs

@@ -7,7 +7,7 @@ namespace ET
 		Type Type { get; }
 	}
 	
-	public abstract class AEvent<A>: IEvent where A: struct
+	public abstract class AEvent<S, A>: IEvent where S: class, IScene where A: struct
 	{
 		public Type Type
 		{
@@ -17,9 +17,9 @@ namespace ET
 			}
 		}
 
-		protected abstract ETTask Run(Scene scene, A a);
+		protected abstract ETTask Run(S scene, A a);
 
-		public async ETTask Handle(Scene scene, A a)
+		public async ETTask Handle(S scene, A a)
 		{
 			try
 			{

+ 1 - 1
Unity/Assets/Scripts/Core/Module/EventSystem/IGetComponentSystem.cs

@@ -28,7 +28,7 @@ namespace ET
 			return typeof(IGetComponentSystem);
 		}
 
-		InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+		int ISystemType.GetInstanceQueueIndex()
 		{
 			return InstanceQueueIndex.None;
 		}

+ 1 - 1
Unity/Assets/Scripts/Core/Module/EventSystem/ILateUpdateSystem.cs

@@ -29,7 +29,7 @@ namespace ET
 			return typeof(ILateUpdateSystem);
 		}
 
-		InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+		int ISystemType.GetInstanceQueueIndex()
 		{
 			return InstanceQueueIndex.LateUpdate;
 		}

+ 1 - 1
Unity/Assets/Scripts/Core/Module/EventSystem/ILoadSystem.cs

@@ -29,7 +29,7 @@ namespace ET
 			return typeof(ILoadSystem);
 		}
 
-		InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+		int ISystemType.GetInstanceQueueIndex()
 		{
 			return InstanceQueueIndex.Load;
 		}

+ 1 - 1
Unity/Assets/Scripts/Core/Module/EventSystem/ISystemType.cs

@@ -6,6 +6,6 @@ namespace ET
     {
         Type Type();
         Type SystemType();
-        InstanceQueueIndex GetInstanceQueueIndex();
+        int GetInstanceQueueIndex();
     }
 }

+ 1 - 1
Unity/Assets/Scripts/Core/Module/EventSystem/IUpdateSystem.cs

@@ -29,7 +29,7 @@ namespace ET
 			return typeof(IUpdateSystem);
 		}
 
-		InstanceQueueIndex ISystemType.GetInstanceQueueIndex()
+		int ISystemType.GetInstanceQueueIndex()
 		{
 			return InstanceQueueIndex.Update;
 		}

+ 6 - 6
Unity/Assets/Scripts/Core/Module/EventSystem/InstanceQueueIndex.cs

@@ -1,11 +1,11 @@
 namespace ET
 {
-    public enum InstanceQueueIndex
+    public static class InstanceQueueIndex
     {
-        None = -1,
-        Update,
-        LateUpdate,
-        Load,
-        Max,
+        public const int None = -1;
+        public const int Update = 0;
+        public const int LateUpdate = 1;
+        public const int Load = 2;
+        public const int Max = 3;
     }
 }