2024-04-30 16:09:57 +08:00
|
|
|
|
using DCFApixels.DragonECS.PoolsCore;
|
|
|
|
|
|
|
|
|
|
namespace DCFApixels.DragonECS
|
2023-06-27 05:09:41 +08:00
|
|
|
|
{
|
2024-02-22 15:39:37 +08:00
|
|
|
|
public partial class EcsWorld
|
2023-06-27 05:09:41 +08:00
|
|
|
|
{
|
2023-06-27 05:30:45 +08:00
|
|
|
|
internal readonly struct PoolCache<T> : IEcsWorldComponent<PoolCache<T>>
|
|
|
|
|
where T : IEcsPoolImplementation, new()
|
2023-06-27 05:09:41 +08:00
|
|
|
|
{
|
2023-06-27 05:30:45 +08:00
|
|
|
|
public readonly T instance;
|
2024-09-07 17:18:35 +08:00
|
|
|
|
public PoolCache(T instance) { this.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:09:41 +08:00
|
|
|
|
{
|
2023-06-27 05:30:45 +08:00
|
|
|
|
component = new PoolCache<T>(world.CreatePool<T>());
|
2023-06-27 05:09:41 +08:00
|
|
|
|
}
|
2023-06-27 05:30:45 +08:00
|
|
|
|
void IEcsWorldComponent<PoolCache<T>>.OnDestroy(ref PoolCache<T> component, EcsWorld world)
|
2023-06-27 05:09:41 +08:00
|
|
|
|
{
|
|
|
|
|
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
|
|
|
|
{
|
|
|
|
|
public readonly T instance;
|
2024-09-07 17:18:35 +08:00
|
|
|
|
public AspectCache(T instance) { this.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-10-02 22:13:10 +08:00
|
|
|
|
internal readonly struct QueryCache<T> : IEcsWorldComponent<QueryCache<T>>
|
|
|
|
|
where T : EcsQueryCache, new()
|
2023-06-27 05:30:45 +08:00
|
|
|
|
{
|
|
|
|
|
public readonly T instance;
|
2024-10-02 22:13:10 +08:00
|
|
|
|
public QueryCache(T instance) { this.instance = instance; }
|
|
|
|
|
void IEcsWorldComponent<QueryCache<T>>.Init(ref QueryCache<T> component, EcsWorld world)
|
2023-06-27 05:30:45 +08:00
|
|
|
|
{
|
|
|
|
|
T instance = new T();
|
2024-08-24 12:29:58 +08:00
|
|
|
|
instance.Initialize(world, world._executorsMediator);
|
2024-10-02 22:13:10 +08:00
|
|
|
|
component = new QueryCache<T>(instance);
|
2023-06-27 05:30:45 +08:00
|
|
|
|
}
|
2024-10-02 22:13:10 +08:00
|
|
|
|
void IEcsWorldComponent<QueryCache<T>>.OnDestroy(ref QueryCache<T> component, EcsWorld world)
|
2023-06-27 05:30:45 +08:00
|
|
|
|
{
|
|
|
|
|
component = default;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-06-27 05:09:41 +08:00
|
|
|
|
}
|
|
|
|
|
}
|