DragonECS/src/EcsWorld.cache.cs

67 lines
2.8 KiB
C#
Raw Normal View History

using DCFApixels.DragonECS.PoolsCore;
namespace DCFApixels.DragonECS
{
public partial class EcsWorld
{
2023-06-27 05:30:45 +08:00
internal readonly struct PoolCache<T> : IEcsWorldComponent<PoolCache<T>>
where T : IEcsPoolImplementation, new()
{
2024-10-03 08:20:22 +08:00
public readonly T Instance;
public PoolCache(T instance) { Instance = instance; }
2023-06-27 05:30:45 +08:00
void IEcsWorldComponent<PoolCache<T>>.Init(ref PoolCache<T> component, EcsWorld world)
{
2023-06-27 05:30:45 +08:00
component = new PoolCache<T>(world.CreatePool<T>());
}
2023-06-27 05:30:45 +08:00
void IEcsWorldComponent<PoolCache<T>>.OnDestroy(ref PoolCache<T> component, EcsWorld world)
{
component = default;
}
}
2023-06-27 05:30:45 +08:00
internal readonly struct AspectCache<T> : IEcsWorldComponent<AspectCache<T>>
2024-07-05 22:13:17 +08:00
where T : EcsAspect, new()
2023-06-27 05:30:45 +08:00
{
2024-10-03 08:20:22 +08:00
public readonly T Instance;
public AspectCache(T instance) { Instance = instance; }
2023-06-27 05:30:45 +08:00
void IEcsWorldComponent<AspectCache<T>>.Init(ref AspectCache<T> component, EcsWorld world)
{
2024-01-07 19:32:16 +08:00
component = new AspectCache<T>(EcsAspect.Builder.New<T>(world));
2023-06-27 05:30:45 +08:00
}
void IEcsWorldComponent<AspectCache<T>>.OnDestroy(ref AspectCache<T> component, EcsWorld world)
{
component = default;
}
}
2024-11-03 18:57:56 +08:00
//TODO добавить сквозной кеш для инстансов TExecutor
//private readonly struct WhereCache<TExecutor> : IEcsWorldComponent<WhereCache<TExecutor>>
//{
// private readonly SparseArray<int, TExecutor> _pairs
//}
// Это не подохидт
internal readonly struct WhereQueryCache<TExecutor, TAspcet> : IEcsWorldComponent<WhereQueryCache<TExecutor, TAspcet>>
2024-10-03 08:20:22 +08:00
where TExecutor : EcsQueryExecutor, new()
where TAspcet : EcsAspect, new()
2023-06-27 05:30:45 +08:00
{
2024-10-03 08:20:22 +08:00
public readonly TExecutor Executor;
public readonly TAspcet Aspcet;
2024-11-03 18:57:56 +08:00
public WhereQueryCache(TExecutor executor, TAspcet aspcet)
2023-06-27 05:30:45 +08:00
{
2024-10-03 08:20:22 +08:00
Executor = executor;
Aspcet = aspcet;
2023-06-27 05:30:45 +08:00
}
2024-11-03 18:57:56 +08:00
void IEcsWorldComponent<WhereQueryCache<TExecutor, TAspcet>>.Init(ref WhereQueryCache<TExecutor, TAspcet> component, EcsWorld world)
2024-10-03 08:20:22 +08:00
{
TExecutor instance = new TExecutor();
TAspcet aspect = world.GetAspect<TAspcet>();
instance.Initialize(world, aspect.Mask);
2024-11-03 18:57:56 +08:00
component = new WhereQueryCache<TExecutor, TAspcet>(instance, aspect);
2024-10-03 08:20:22 +08:00
}
2024-11-03 18:57:56 +08:00
void IEcsWorldComponent<WhereQueryCache<TExecutor, TAspcet>>.OnDestroy(ref WhereQueryCache<TExecutor, TAspcet> component, EcsWorld world)
2023-06-27 05:30:45 +08:00
{
component = default;
}
}
}
}