92 lines
2.8 KiB
C#
92 lines
2.8 KiB
C#
|
using System.Threading;
|
||
|
using System;
|
||
|
namespace BITKit.Core.Entites
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 基本实体
|
||
|
/// </summary>
|
||
|
public interface IEntity
|
||
|
{
|
||
|
ulong Id { get; }
|
||
|
#if NET5_0_OR_GREATER
|
||
|
bool TryGetComponent<T>(out T component) where T : IEntityComponent;
|
||
|
IEntityComponent[] Components { get; }
|
||
|
bool RegisterComponent<T>(T component) where T : IEntityComponent;
|
||
|
#else
|
||
|
|
||
|
#endif
|
||
|
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 基本实体组件
|
||
|
/// </summary>
|
||
|
public interface IEntityComponent:IAwake,IStart
|
||
|
{
|
||
|
Type BaseType { get; }
|
||
|
IEntity Entity { get; set; }
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 基本实体服务
|
||
|
/// </summary>
|
||
|
public interface IEntitiesService
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 当添加Entity时
|
||
|
/// </summary>
|
||
|
public event Action<IEntity> OnAdd;
|
||
|
/// <summary>
|
||
|
/// 当移除Entity时
|
||
|
/// </summary>
|
||
|
public event Action<IEntity> OnRemove;
|
||
|
/// <summary>
|
||
|
/// 所有Entity
|
||
|
/// </summary>
|
||
|
IEntity[] Entities { get; }
|
||
|
/// <summary>
|
||
|
/// 注册Entity
|
||
|
/// </summary>
|
||
|
/// <param name="entity"></param>
|
||
|
/// <returns></returns>
|
||
|
bool Register(IEntity entity);
|
||
|
/// <summary>
|
||
|
/// 注销Entity
|
||
|
/// </summary>
|
||
|
/// <param name="entity"></param>
|
||
|
/// <returns></returns>
|
||
|
bool UnRegister(IEntity entity);
|
||
|
CancellationToken CancellationToken { get; }
|
||
|
/// <summary>
|
||
|
/// 通过Id获取Entity
|
||
|
/// </summary>
|
||
|
/// <param name="id"></param>
|
||
|
/// <returns></returns>
|
||
|
IEntity Get(ulong id);
|
||
|
/// <summary>
|
||
|
/// 查询Entity,例如
|
||
|
/// </summary>
|
||
|
/// <para>var rotationEntities=EntitiesService.Query<RotationComponent></para>
|
||
|
IEntity[] Query<T>() where T : IEntityComponent;
|
||
|
/// <summary>
|
||
|
/// 查询1个组件
|
||
|
/// </summary>
|
||
|
/// <typeparam name="T"></typeparam>
|
||
|
/// <returns></returns>
|
||
|
T[] QueryComponents<T>() where T : IEntityComponent;
|
||
|
/// <summary>
|
||
|
/// 查询2个组件
|
||
|
/// </summary>
|
||
|
/// <typeparam name="T"></typeparam>
|
||
|
/// <typeparam name="T1"></typeparam>
|
||
|
/// <returns></returns>
|
||
|
ValueTuple<T,T1>[] QueryComponents<T,T1>()where T : IEntityComponent where T1 : IEntityComponent;
|
||
|
/// <summary>
|
||
|
/// 查询3个组件
|
||
|
/// </summary>
|
||
|
/// <typeparam name="T"></typeparam>
|
||
|
/// <typeparam name="T1"></typeparam>
|
||
|
/// <typeparam name="T2"></typeparam>
|
||
|
/// <returns></returns>
|
||
|
ValueTuple<T,T1,T2>[] QueryComponents<T,T1,T2>() where T : IEntityComponent where T1 : IEntityComponent where T2 : IEntityComponent;
|
||
|
|
||
|
}
|
||
|
}
|