diff --git a/Assets/TEngine/Runtime/Entity/Demo/ECSDemoApp.cs b/Assets/TEngine/Runtime/Entity/Demo/ECSDemoApp.cs index cd7c0203..f0e8be52 100644 --- a/Assets/TEngine/Runtime/Entity/Demo/ECSDemoApp.cs +++ b/Assets/TEngine/Runtime/Entity/Demo/ECSDemoApp.cs @@ -40,6 +40,12 @@ namespace TEngine }); Entity.Destroy(entity); Entity.Destroy(entity2); + + + TimerMgr.Instance.AddTimer(objects => + { + Start(); + }, 3f); }), 3f,false); } diff --git a/Assets/TEngine/Runtime/Entity/EcsObject.cs b/Assets/TEngine/Runtime/Entity/EcsObject.cs index e870518c..eebcc4cb 100644 --- a/Assets/TEngine/Runtime/Entity/EcsObject.cs +++ b/Assets/TEngine/Runtime/Entity/EcsObject.cs @@ -12,7 +12,7 @@ namespace TEngine.EntityModule public int InstanceId { get; - protected set; + set; } internal int HashCode @@ -30,8 +30,6 @@ namespace TEngine.EntityModule public EcsObject() { HashCode = GetType().GetHashCode(); - InstanceId = EntitySystem.Instance.CurInstanceId; - EntitySystem.Instance.CurInstanceId++; } public virtual void Dispose() diff --git a/Assets/TEngine/Runtime/Entity/EntitySystem.cs b/Assets/TEngine/Runtime/Entity/EntitySystem.cs index bec7eee0..67ea791c 100644 --- a/Assets/TEngine/Runtime/Entity/EntitySystem.cs +++ b/Assets/TEngine/Runtime/Entity/EntitySystem.cs @@ -27,7 +27,11 @@ namespace TEngine.EntityModule private EntitySystem() { GameEventMgr.Instance.AddEventListener>(EntityEvent.AttachToEntity, AttachToEntity); - Update(true); + //Update(true); + MonoUtility.AddUpdateListener((() => + { + Update(false); + })); MonoUtility.AddFixedUpdateListener(FixedUpdate); MonoUtility.AddLateUpdateListener(LateUpdate); } @@ -59,17 +63,26 @@ namespace TEngine.EntityModule { if (stack.Count > 0) { - return (T)stack.Pop(); + var poolObj = (T)stack.Pop(); + GenInstanceId(poolObj); + return poolObj; } goto Instantiate; } stack = new Stack(); ObjectPool.Add(type, stack); Instantiate: T ecsObject = new T(); - EcsObjects.Add(ecsObject.InstanceId, ecsObject); + GenInstanceId(ecsObject); return ecsObject; } + private void GenInstanceId(EcsObject ecsObject) + { + ecsObject.InstanceId = CurInstanceId; + Instance.CurInstanceId++; + EcsObjects.Add(ecsObject.InstanceId, ecsObject); + } + internal void Push(EcsObject ecsObject) { int type = ecsObject.HashCode;