mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
EntityModule
EntityModule
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
using TEngine;
|
using TEngine.EntityModule;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class EcsDemoApp : MonoBehaviour
|
public class EcsDemoApp : MonoBehaviour
|
||||||
|
@@ -65,6 +65,14 @@ namespace TEngine.EntityModule
|
|||||||
{
|
{
|
||||||
entityComponent.Entity.Updates.Remove(update);
|
entityComponent.Entity.Updates.Remove(update);
|
||||||
}
|
}
|
||||||
|
if (entityComponent is IFixedUpdate fixedupdate)
|
||||||
|
{
|
||||||
|
entityComponent.Entity.FixedUpdates.Remove(fixedupdate);
|
||||||
|
}
|
||||||
|
if (entityComponent is ILateUpdate lateupdate)
|
||||||
|
{
|
||||||
|
entityComponent.Entity.LateUpdates.Remove(lateupdate);
|
||||||
|
}
|
||||||
if (reuse)
|
if (reuse)
|
||||||
{
|
{
|
||||||
entityComponent.Entity.System.Push(entityComponent);
|
entityComponent.Entity.System.Push(entityComponent);
|
||||||
@@ -82,11 +90,10 @@ namespace TEngine.EntityModule
|
|||||||
entityComponentTemp.OnDestroy();
|
entityComponentTemp.OnDestroy();
|
||||||
if (reuse)
|
if (reuse)
|
||||||
{
|
{
|
||||||
entity.System.Push(entityComponentTemp);
|
Destroy(entityComponentTemp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
entity.Updates.Clear();
|
entity.IsDispose = true;
|
||||||
entity.CanUpdate = false;
|
|
||||||
if (reuse)
|
if (reuse)
|
||||||
{
|
{
|
||||||
entity.System.Push(entity);
|
entity.System.Push(entity);
|
||||||
|
@@ -23,7 +23,7 @@ namespace TEngine.EntityModule
|
|||||||
|
|
||||||
#region Status
|
#region Status
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
private bool IsFromPool
|
internal bool IsFromPool
|
||||||
{
|
{
|
||||||
get => (this.status & EntityStatus.IsFromPool) == EntityStatus.IsFromPool;
|
get => (this.status & EntityStatus.IsFromPool) == EntityStatus.IsFromPool;
|
||||||
set
|
set
|
||||||
@@ -40,7 +40,27 @@ namespace TEngine.EntityModule
|
|||||||
}
|
}
|
||||||
|
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
private bool IsDispose => (this.status & EntityStatus.IsDispose) == EntityStatus.IsDispose;
|
internal bool IsDispose
|
||||||
|
{
|
||||||
|
get => (this.status & EntityStatus.IsDispose) == EntityStatus.IsDispose;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
this.status |= EntityStatus.IsDispose;
|
||||||
|
CanUpdate = false;
|
||||||
|
CanFixedUpdate = false;
|
||||||
|
CanLateUpdates = false;
|
||||||
|
Updates.Clear();
|
||||||
|
FixedUpdates.Clear();
|
||||||
|
LateUpdates.Clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.status &= ~EntityStatus.IsDispose;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -50,19 +70,19 @@ namespace TEngine.EntityModule
|
|||||||
internal List<IUpdate> Updates = new List<IUpdate>();
|
internal List<IUpdate> Updates = new List<IUpdate>();
|
||||||
internal List<IFixedUpdate> FixedUpdates = new List<IFixedUpdate>();
|
internal List<IFixedUpdate> FixedUpdates = new List<IFixedUpdate>();
|
||||||
internal List<ILateUpdate> LateUpdates = new List<ILateUpdate>();
|
internal List<ILateUpdate> LateUpdates = new List<ILateUpdate>();
|
||||||
internal bool InActive;
|
|
||||||
internal bool CanUpdate;
|
internal bool CanUpdate;
|
||||||
|
internal bool CanFixedUpdate;
|
||||||
|
internal bool CanLateUpdates;
|
||||||
|
|
||||||
public int Index { get; set; } = -1;
|
public int Index { get; set; } = -1;
|
||||||
public Entity()
|
public Entity()
|
||||||
{
|
{
|
||||||
InActive = true;
|
|
||||||
System = EntitySystem.Instance;
|
System = EntitySystem.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
~Entity()
|
~Entity()
|
||||||
{
|
{
|
||||||
InActive = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Update()
|
internal void Update()
|
||||||
|
@@ -7,18 +7,9 @@ namespace TEngine.EntityModule
|
|||||||
{
|
{
|
||||||
public void RmvComponent<T>(T component) where T :EntityComponent, new()
|
public void RmvComponent<T>(T component) where T :EntityComponent, new()
|
||||||
{
|
{
|
||||||
if (component is IUpdate update)
|
|
||||||
{
|
|
||||||
Updates.Remove(update);
|
|
||||||
}
|
|
||||||
else if (component is IFixedUpdate fixedUpdate)
|
|
||||||
{
|
|
||||||
FixedUpdates.Remove(fixedUpdate);
|
|
||||||
}
|
|
||||||
|
|
||||||
CanUpdate = Updates.Count > 0;
|
|
||||||
|
|
||||||
Destroy(component);
|
Destroy(component);
|
||||||
|
|
||||||
|
CheckUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public T AddComponent<T>() where T :EntityComponent, new()
|
public T AddComponent<T>() where T :EntityComponent, new()
|
||||||
@@ -36,8 +27,11 @@ namespace TEngine.EntityModule
|
|||||||
{
|
{
|
||||||
FixedUpdates.Add(fixedUpdate);
|
FixedUpdates.Add(fixedUpdate);
|
||||||
}
|
}
|
||||||
CanUpdate = Updates.Count > 0;
|
else if (component is ILateUpdate lateUpdate)
|
||||||
|
{
|
||||||
|
LateUpdates.Add(lateUpdate);
|
||||||
|
}
|
||||||
|
CheckUpdate();
|
||||||
return component;
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +49,11 @@ namespace TEngine.EntityModule
|
|||||||
{
|
{
|
||||||
FixedUpdates.Add(fixedUpdate);
|
FixedUpdates.Add(fixedUpdate);
|
||||||
}
|
}
|
||||||
CanUpdate = Updates.Count > 0;
|
else if (component is ILateUpdate lateUpdate)
|
||||||
|
{
|
||||||
|
LateUpdates.Add(lateUpdate);
|
||||||
|
}
|
||||||
|
CheckUpdate();
|
||||||
return component;
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,5 +123,12 @@ namespace TEngine.EntityModule
|
|||||||
}
|
}
|
||||||
return elements.ToArray();
|
return elements.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CheckUpdate()
|
||||||
|
{
|
||||||
|
CanUpdate = Updates.Count > 0;
|
||||||
|
CanFixedUpdate = FixedUpdates.Count > 0;
|
||||||
|
CanLateUpdates = LateUpdates.Count > 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -81,6 +81,7 @@ namespace TEngine.EntityModule
|
|||||||
internal T Create<T>() where T : Entity, new()
|
internal T Create<T>() where T : Entity, new()
|
||||||
{
|
{
|
||||||
T entity = Get<T>();
|
T entity = Get<T>();
|
||||||
|
entity.IsDispose = false;
|
||||||
AddEntity(entity);
|
AddEntity(entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user