1
This commit is contained in:
@@ -20,7 +20,7 @@ namespace BITKit.Entities
|
||||
private readonly GenericEvent genericEvent = new();
|
||||
|
||||
|
||||
public ulong Id { get; set; }
|
||||
public int Id { get; set; }
|
||||
public CancellationToken CancellationToken { get; private set; }
|
||||
public IEntityBehavior[] Behaviors { get;private set; }
|
||||
public IEntityComponent[] Components => Behaviors.Cast<IEntityComponent>().ToArray();
|
||||
@@ -33,9 +33,43 @@ namespace BITKit.Entities
|
||||
IServiceProvider Entities.IEntity.ServiceProvider=> throw new InvalidOperationException("Unity Entity can't register component");
|
||||
public void Inject(object obj)
|
||||
{
|
||||
foreach (var propertyInfo in obj
|
||||
.GetType()
|
||||
.GetProperties(ReflectionHelper.Flags)
|
||||
.Where(x=>x.GetCustomAttribute<InjectAttribute>(true) is not null))
|
||||
{
|
||||
var type = propertyInfo.PropertyType;
|
||||
var attribute = propertyInfo.GetCustomAttribute<InjectAttribute>();
|
||||
var currentValue = propertyInfo.GetValue(obj);
|
||||
try
|
||||
{
|
||||
switch (currentValue)
|
||||
{
|
||||
case null:
|
||||
break;
|
||||
case IEntityComponent entityComponent:
|
||||
if(entityComponent.Entity.Id == Id)
|
||||
continue;
|
||||
break;
|
||||
case MonoBehaviour { destroyCancellationToken: { IsCancellationRequested: false } }:
|
||||
continue;
|
||||
case not null:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
catch (MissingReferenceException){}
|
||||
if(genericEvent.TryGetObjectDirect(type.FullName,out var value))
|
||||
{
|
||||
propertyInfo.SetValue(obj,value,null);
|
||||
}
|
||||
else if(attribute?.CanBeNull is false)
|
||||
{
|
||||
BIT4Log.Warning<Entity>($"{name}未找到{obj.GetType().Name}需要的{type.FullName}");
|
||||
}
|
||||
}
|
||||
foreach (var fieldInfo in obj
|
||||
.GetType()
|
||||
.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
|
||||
.GetFields(ReflectionHelper.Flags)
|
||||
.Where(fieldInfo=>fieldInfo.GetCustomAttribute<InjectAttribute>(true) is not null))
|
||||
{
|
||||
var type = fieldInfo.FieldType;
|
||||
@@ -97,7 +131,7 @@ namespace BITKit.Entities
|
||||
private void Awake()
|
||||
{
|
||||
if (Id.IsDefault())
|
||||
Id = (ulong)Guid.NewGuid().GetHashCode();
|
||||
Id = GetInstanceID();
|
||||
CancellationToken = gameObject.GetCancellationTokenOnDestroy();
|
||||
Set(CancellationToken);
|
||||
}
|
||||
|
Reference in New Issue
Block a user