1
This commit is contained in:
@@ -7,15 +7,20 @@ using System.Text;
|
||||
using System.Threading;
|
||||
using BITKit.Entities;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine.Profiling;
|
||||
using UnityEngine.UIElements;
|
||||
// ReSharper disable RedundantTypeArgumentsOfMethod
|
||||
|
||||
namespace BITKit.Entities
|
||||
{
|
||||
[CustomType(typeof(IUnityEntity))]
|
||||
[CustomType(typeof(IEntity))]
|
||||
public class Entity : MonoBehaviour, IUnityEntity
|
||||
{
|
||||
private readonly GenericEvent genericEvent = new();
|
||||
public ulong Id { get; private set; }
|
||||
|
||||
|
||||
public ulong Id { get; set; }
|
||||
public CancellationToken CancellationToken { get; private set; }
|
||||
public IEntityBehavior[] Behaviors { get;private set; }
|
||||
public IEntityComponent[] Components => Behaviors.Cast<IEntityComponent>().ToArray();
|
||||
@@ -31,7 +36,7 @@ namespace BITKit.Entities
|
||||
foreach (var fieldInfo in obj
|
||||
.GetType()
|
||||
.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
|
||||
.Where(fieldInfo=>fieldInfo.GetCustomAttribute<InjectAttribute>() is not null))
|
||||
.Where(fieldInfo=>fieldInfo.GetCustomAttribute<InjectAttribute>(true) is not null))
|
||||
{
|
||||
var type = fieldInfo.FieldType;
|
||||
var attribute = fieldInfo.GetCustomAttribute<InjectAttribute>();
|
||||
@@ -83,19 +88,30 @@ namespace BITKit.Entities
|
||||
}
|
||||
|
||||
private bool isInitialized;
|
||||
|
||||
public void WaitForInitializationComplete()
|
||||
{
|
||||
if (isInitialized) return;
|
||||
Start();
|
||||
isInitialized = true;
|
||||
}
|
||||
private void Awake()
|
||||
{
|
||||
Id = (ulong)Guid.NewGuid().GetHashCode();
|
||||
if (Id.IsDefault())
|
||||
Id = (ulong)Guid.NewGuid().GetHashCode();
|
||||
CancellationToken = gameObject.GetCancellationTokenOnDestroy();
|
||||
Set(CancellationToken);
|
||||
Behaviors = GetComponentsInChildren<IEntityBehavior>(true).Distinct().ToArray();
|
||||
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (isInitialized) return;
|
||||
try
|
||||
{
|
||||
AddService<IEntity>(this);
|
||||
AddService<Entity>(this);
|
||||
AddService<IUnityEntity>(this);
|
||||
|
||||
Behaviors = GetComponentsInChildren<IEntityBehavior>(true).Distinct().ToArray();
|
||||
var monoBehaviours = GetComponentsInChildren<MonoBehaviour>(true);
|
||||
Behaviors.ForEach(x => x.Initialize(this));
|
||||
foreach (var x in monoBehaviours)
|
||||
@@ -108,8 +124,11 @@ namespace BITKit.Entities
|
||||
.OfType<CustomTypeAttribute>()
|
||||
)
|
||||
{
|
||||
AddService(att.Type, x);
|
||||
AddService(att.Type, x);
|
||||
if (att.AsGlobal)
|
||||
DI.Register(att.Type, x);
|
||||
}
|
||||
|
||||
genericEvent.Set(x.GetType(),x);
|
||||
}
|
||||
foreach (var x in monoBehaviours)
|
||||
@@ -143,23 +162,26 @@ namespace BITKit.Entities
|
||||
|
||||
private void Update()
|
||||
{
|
||||
var deltaTime = Time.fixedDeltaTime;
|
||||
foreach (var x in Behaviors)
|
||||
{
|
||||
x.OnUpdate(Time.deltaTime);
|
||||
x.OnUpdate(deltaTime);
|
||||
}
|
||||
}
|
||||
private void FixedUpdate()
|
||||
{
|
||||
var deltaTime = Time.fixedDeltaTime;
|
||||
foreach (var x in Behaviors)
|
||||
{
|
||||
x.OnFixedUpdate(Time.fixedDeltaTime);
|
||||
x.OnFixedUpdate(deltaTime);
|
||||
}
|
||||
}
|
||||
private void LateUpdate()
|
||||
{
|
||||
var deltaTime = Time.fixedDeltaTime;
|
||||
foreach (var x in Behaviors)
|
||||
{
|
||||
x.OnLateUpdate(Time.deltaTime);
|
||||
x.OnLateUpdate(deltaTime);
|
||||
}
|
||||
}
|
||||
public void AddListener<T>(Action<T> action) => genericEvent.AddListener<T>(action);
|
||||
|
Reference in New Issue
Block a user