using Godot; using System.Collections.Generic; using System.Linq; using System.Threading; using BITKit.Core.Entites; // ReSharper disable All namespace BITKit; /// /// 基于Godot.Node的IEntitiesService实现 /// public partial class GodotEntitiesService : Node,IEntitiesService { public GodotEntitiesService() { DI.Register(this); } private readonly Dictionary _entities=new (); private CancellationTokenSource _cancellationTokenSource; public IEntity[] Entities => _entities.Values.ToArray(); public bool Register(IEntity entity) { return _entities.TryAdd(entity.Id, entity); } public bool UnRegister(IEntity entity) { return _entities.TryRemove(entity.Id); } public override void _Ready() { _cancellationTokenSource = new(); } protected override void Dispose(bool disposing) { if(disposing)_cancellationTokenSource.Cancel(); } public CancellationToken CancellationToken => _cancellationTokenSource.Token; public IEntity[] Query() where T : IEntityComponent { return _entities.Values.Where(x => x.TryGetComponent(out _)).ToArray(); } }