From dd5a81334ce0add90f05479a1ed5619fac8f19e0 Mon Sep 17 00:00:00 2001 From: DCFApixels <99481254+DCFApixels@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:44:16 +0800 Subject: [PATCH] add EcsWorld.GetPoolInstanceMarker --- src/EcsWorld.pools.cs | 23 +++++++++++++++++++++++ src/Pools/EcsPool.cs | 1 + src/Pools/EcsTagPool.cs | 1 + 3 files changed, 25 insertions(+) diff --git a/src/EcsWorld.pools.cs b/src/EcsWorld.pools.cs index 9dd0ee7..688f51d 100644 --- a/src/EcsWorld.pools.cs +++ b/src/EcsWorld.pools.cs @@ -83,6 +83,11 @@ namespace DCFApixels.DragonECS { return GetUnchecked>(worldID).Instance; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public GetPoolInstanceMarker GetPoolInstance() + { + return new GetPoolInstanceMarker(this); + } #endregion #region ComponentInfo @@ -418,6 +423,24 @@ namespace DCFApixels.DragonECS public bool locked; #endif } + public readonly ref struct GetPoolInstanceMarker + { + public readonly EcsWorld World; + public GetPoolInstanceMarker(EcsWorld world) + { + World = world; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public TPool GetInstance() where TPool : IEcsPoolImplementation, new() + { + return World.GetPoolInstance(); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public TPool GetInstanceUnchecked() where TPool : IEcsPoolImplementation, new() + { + return World.GetPoolInstanceUnchecked(); + } + } #endregion } } diff --git a/src/Pools/EcsPool.cs b/src/Pools/EcsPool.cs index a621c26..c347dc8 100644 --- a/src/Pools/EcsPool.cs +++ b/src/Pools/EcsPool.cs @@ -340,6 +340,7 @@ namespace DCFApixels.DragonECS public static implicit operator EcsPool(IncludeMarker a) { return a.GetInstance>(); } public static implicit operator EcsPool(ExcludeMarker a) { return a.GetInstance>(); } public static implicit operator EcsPool(OptionalMarker a) { return a.GetInstance>(); } + public static implicit operator EcsPool(EcsWorld.GetPoolInstanceMarker a) { return a.GetInstance>(); } #endregion } public static class EcsPoolExt diff --git a/src/Pools/EcsTagPool.cs b/src/Pools/EcsTagPool.cs index a510bf8..6859e42 100644 --- a/src/Pools/EcsTagPool.cs +++ b/src/Pools/EcsTagPool.cs @@ -291,6 +291,7 @@ namespace DCFApixels.DragonECS public static implicit operator EcsTagPool(IncludeMarker a) { return a.GetInstance>(); } public static implicit operator EcsTagPool(ExcludeMarker a) { return a.GetInstance>(); } public static implicit operator EcsTagPool(OptionalMarker a) { return a.GetInstance>(); } + public static implicit operator EcsTagPool(EcsWorld.GetPoolInstanceMarker a) { return a.GetInstance>(); } #endregion } public static class EcsTagPoolExt