160 lines
5.3 KiB
C#
160 lines
5.3 KiB
C#
using System.Threading;
|
|
using System;
|
|
using System.ComponentModel.Design;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
#if NET5_0_OR_GREATER
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
#endif
|
|
namespace BITKit.Entities
|
|
{
|
|
/// <summary>
|
|
/// 基本实体
|
|
/// </summary>
|
|
public interface IEntity
|
|
{
|
|
int Id { get; }
|
|
CancellationToken CancellationToken { get; }
|
|
IServiceProvider ServiceProvider { get; }
|
|
IServiceCollection ServiceCollection { get; }
|
|
object[] GetServices();
|
|
void Inject(object obj);
|
|
}
|
|
/// <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(int id);
|
|
/// <summary>
|
|
/// 尝试通过Id获取Entity
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
bool TryGetEntity(int id, out IEntity entity);
|
|
/// <summary>
|
|
/// 通过Id获取或添加Entity
|
|
/// </summary>
|
|
IEntity GetOrAdd(int id,Func<int,IEntity> factory);
|
|
|
|
/// <summary>
|
|
/// 查询Entity,例如
|
|
/// </summary>
|
|
/// <para>var rotationEntities=EntitiesService.Query<RotationComponent></para>
|
|
IEntity[] Query<T>();
|
|
|
|
/// <summary>
|
|
/// 查询1个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <returns></returns>
|
|
T[] QueryComponents<T>();
|
|
|
|
/// <summary>
|
|
/// 查询2个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <returns></returns>
|
|
ValueTuple<T, T1>[] QueryComponents<T, T1>();
|
|
|
|
/// <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>();
|
|
|
|
/// <summary>
|
|
/// 查询4个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <returns></returns>
|
|
ValueTuple<T, T1, T2, T3>[] QueryComponents<T, T1, T2, T3>();
|
|
|
|
/// <summary>
|
|
/// 查询5个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <typeparam name="T4"></typeparam>
|
|
/// <returns></returns>
|
|
ValueTuple<T, T1, T2, T3, T4>[] QueryComponents<T, T1, T2, T3, T4>();
|
|
/// <summary>
|
|
/// 查询6个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <typeparam name="T4"></typeparam>
|
|
/// <typeparam name="T5"></typeparam>
|
|
/// <returns></returns>
|
|
ValueTuple<T, T1, T2, T3, T4, T5>[] QueryComponents<T, T1, T2, T3, T4, T5>();
|
|
|
|
/// <summary>
|
|
/// 查询7个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <typeparam name="T4"></typeparam>
|
|
/// <typeparam name="T5"></typeparam>
|
|
/// <typeparam name="T6"></typeparam>
|
|
/// <returns></returns>
|
|
ValueTuple<T, T1, T2, T3, T4, T5, T6>[] QueryComponents<T, T1, T2, T3, T4, T5, T6>();
|
|
|
|
/// <summary>
|
|
/// 查询8个组件
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <typeparam name="T1"></typeparam>
|
|
/// <typeparam name="T2"></typeparam>
|
|
/// <typeparam name="T3"></typeparam>
|
|
/// <typeparam name="T4"></typeparam>
|
|
/// <typeparam name="T5"></typeparam>
|
|
/// <typeparam name="T6"></typeparam>
|
|
/// <typeparam name="TRest">剩余实例</typeparam>
|
|
/// <returns></returns>
|
|
ValueTuple<T, T1, T2, T3, T4, T5, T6, TRest>[] QueryComponents<T, T1, T2, T3, T4, T5, T6, TRest>() where TRest : struct;
|
|
}
|
|
} |