43 lines
1.1 KiB
C#
43 lines
1.1 KiB
C#
using Godot;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using BITKit.Core.Entites;
|
|
// ReSharper disable All
|
|
|
|
namespace BITKit;
|
|
/// <summary>
|
|
/// 基于Godot.Node的IEntitiesService实现
|
|
/// </summary>
|
|
public partial class GodotEntitiesService : Node,IEntitiesService
|
|
{
|
|
public GodotEntitiesService()
|
|
{
|
|
DI.Register<IEntitiesService>(this);
|
|
}
|
|
private readonly Dictionary<ulong,IEntity> _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;
|
|
}
|