diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs new file mode 100644 index 00000000..12992ef7 --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs @@ -0,0 +1,72 @@ +using UnityEngine; + +namespace TEngine.Runtime.Entity +{ + public class EntityData : IMemory + { + protected Vector3 m_Position = Vector3.zero; + + protected Quaternion m_Rotation = Quaternion.identity; + + public EntityData() + { + m_Position = Vector3.zero; + m_Rotation = Quaternion.identity; + UserData = null; + } + + /// + /// 实体位置。 + /// + public Vector3 Position + { + get { return m_Position; } + set { m_Position = value; } + } + + /// + /// 实体朝向。 + /// + public Quaternion Rotation + { + get { return m_Rotation; } + set { m_Rotation = value; } + } + + public object UserData { get; protected set; } + + public static EntityData Create(object userData = null) + { + EntityData entityData = MemoryPool.Acquire(); + entityData.Position = Vector3.zero; + entityData.Rotation = Quaternion.identity; + entityData.UserData = userData; + return entityData; + } + + public static EntityData Create(Vector3 position, object userData = null) + { + EntityData entityData = MemoryPool.Acquire(); + entityData.Position = position; + entityData.Rotation = Quaternion.identity; + entityData.UserData = userData; + return entityData; + } + + public static EntityData Create(Vector3 position, Quaternion quaternion, object userData = null) + { + EntityData entityData = MemoryPool.Acquire(); + entityData.Position = position; + entityData.Rotation = quaternion; + entityData.UserData = userData; + return entityData; + } + + public virtual void Clear() + { + m_Position = Vector3.zero; + m_Rotation = Quaternion.identity; + UserData = null; + } + } +} \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs.meta b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs.meta new file mode 100644 index 00000000..548ce332 --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 414727f378e043a7800d009402172d15 +timeCreated: 1662376564 \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs new file mode 100644 index 00000000..50e6a1d3 --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs @@ -0,0 +1,39 @@ +namespace TEngine.Runtime.Entity +{ + public static class EntityExtension + { + private static int _serialId = 0; + + /// + /// 生成客户端序列化ID,服务器默认不用 + /// + /// + /// + public static int GenerateSerialId(this EntityComponent entityComponent) + { + return ++_serialId; + } + + public static void ShowEntity(this EntityComponent entityComponent, int serialId, int entityId, + System.Type logicType, string assetPath, object userData = null, float autoReleaseInterval = 60f, + int capacity = 60, + float expireTime = 60f, int priority = 0) + { + if (serialId < 0) + { + Log.Error("Can not load entity id '{0}' from data table.", entityId.ToString()); + return; + } + + if (!entityComponent.HasEntityGroup(logicType.Name)) + { + EntityComponent.Instance.AddEntityGroup(logicType.Name, + autoReleaseInterval, capacity, + expireTime, priority); + } + + entityComponent.ShowEntity(serialId, logicType, assetPath, logicType.Name, + Constant.DefaultPriority, userData); + } + } +} \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs.meta b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs.meta new file mode 100644 index 00000000..c51760c6 --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityExtension.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cfc72f38bbb4465aaabec8fd9d5a461d +timeCreated: 1662376752 \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs new file mode 100644 index 00000000..e5260349 --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs @@ -0,0 +1,77 @@ +using UnityEngine; + +namespace TEngine.Runtime.Entity +{ + public abstract class EntityLogicEx : EntityLogic + { + [SerializeField] private EntityData m_EntityData = null; + + public int Id + { + get { return Entity.Id; } + } + + public Animation Animation { get; private set; } + + protected internal override void OnInit(object userData) + { + base.OnInit(userData); + Animation = GetComponent(); + } + + protected internal override void OnRecycle() + { + base.OnRecycle(); + } + + protected internal override void OnShow(object userData) + { + base.OnShow(userData); + + m_EntityData = userData as EntityData; + if (m_EntityData == null) + { + Log.Error("Entity data is invalid."); + return; + } + + Name = Utility.Text.Format("[Entity {0}]", Id.ToString()); + CachedTransform.localPosition = m_EntityData.Position; + CachedTransform.localRotation = m_EntityData.Rotation; + CachedTransform.localScale = Vector3.one; + } + + protected internal override void OnHide(bool isShutdown, object userData) + { + base.OnHide(isShutdown, userData); + + MemoryPool.Release(m_EntityData); + } + + protected internal override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData) + { + base.OnAttached(childEntity, parentTransform, userData); + } + + protected internal override void OnDetached(EntityLogic childEntity, object userData) + { + base.OnDetached(childEntity, userData); + } + + protected internal override void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, + object userData) + { + base.OnAttachTo(parentEntity, parentTransform, userData); + } + + protected internal override void OnDetachFrom(EntityLogic parentEntity, object userData) + { + base.OnDetachFrom(parentEntity, userData); + } + + protected internal override void OnUpdate(float elapseSeconds, float realElapseSeconds) + { + base.OnUpdate(elapseSeconds, realElapseSeconds); + } + } +} \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs.meta b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs.meta new file mode 100644 index 00000000..23cc8870 --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Entity/Core/Entity/EntityLogicEx.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 48dddd54c9564e868d36fa1e0640c996 +timeCreated: 1662463218 \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Entity/DefaultEntityHelper.cs b/Assets/TEngine/Scripts/Runtime/Entity/DefaultEntityHelper.cs index 50e0d225..682f2221 100644 --- a/Assets/TEngine/Scripts/Runtime/Entity/DefaultEntityHelper.cs +++ b/Assets/TEngine/Scripts/Runtime/Entity/DefaultEntityHelper.cs @@ -14,7 +14,8 @@ namespace TEngine.Runtime.Entity /// 实例化后的实体。 public override object InstantiateEntity(object entityAsset) { - return Instantiate((Object)entityAsset); + // return Instantiate((Object)entityAsset); + return (Object)entityAsset; } ///