From 03598f97d8896bcb04bc75bd48af1aacef0aa326 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Fri, 8 Mar 2024 20:40:19 +0800 Subject: [PATCH] add simplified aspect builder syntax --- src/EcsAspect.cs | 52 +++++++++++++++++++++++++++++++++++++++++ src/Pools/EcsPool.cs | 6 +++++ src/Pools/EcsTagPool.cs | 6 +++++ 3 files changed, 64 insertions(+) diff --git a/src/EcsAspect.cs b/src/EcsAspect.cs index 0436848..354bdcc 100644 --- a/src/EcsAspect.cs +++ b/src/EcsAspect.cs @@ -46,6 +46,19 @@ namespace DCFApixels.DragonECS private EcsWorld _world; private EcsMask.Builder _maskBuilder; + public IncludeMarker Inc + { + get { return new IncludeMarker(this); } + } + public ExcludeMarker Exc + { + get { return new ExcludeMarker(this); } + } + public OptionalMarker Opt + { + get { return new OptionalMarker(this); } + } + public EcsWorld World => _world; private Builder(EcsWorld world) @@ -406,4 +419,43 @@ namespace DCFApixels.DragonECS } #endregion } + public readonly ref struct IncludeMarker + { + private readonly EcsAspect.Builder _builder; + public IncludeMarker(EcsAspect.Builder builder) + { + _builder = builder; + } + public T GetInstance() + where T : IEcsPoolImplementation, new() + { + return _builder.IncludePool(); + } + } + public readonly ref struct ExcludeMarker + { + private readonly EcsAspect.Builder _builder; + public ExcludeMarker(EcsAspect.Builder builder) + { + _builder = builder; + } + public T GetInstance() + where T : IEcsPoolImplementation, new() + { + return _builder.ExcludePool(); + } + } + public readonly ref struct OptionalMarker + { + private readonly EcsAspect.Builder _builder; + public OptionalMarker(EcsAspect.Builder builder) + { + _builder = builder; + } + public T GetInstance() + where T : IEcsPoolImplementation, new() + { + return _builder.OptionalPool(); + } + } } diff --git a/src/Pools/EcsPool.cs b/src/Pools/EcsPool.cs index e83a5f3..6996a00 100644 --- a/src/Pools/EcsPool.cs +++ b/src/Pools/EcsPool.cs @@ -248,6 +248,12 @@ namespace DCFApixels.DragonECS IEnumerator IEnumerable.GetEnumerator() { throw new NotImplementedException(); } IEnumerator IEnumerable.GetEnumerator() { throw new NotImplementedException(); } #endregion + + #region MarkersConverter + 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>(); } + #endregion } /// Standard component public interface IEcsComponent { } diff --git a/src/Pools/EcsTagPool.cs b/src/Pools/EcsTagPool.cs index 049d17b..43e678f 100644 --- a/src/Pools/EcsTagPool.cs +++ b/src/Pools/EcsTagPool.cs @@ -229,6 +229,12 @@ namespace DCFApixels.DragonECS IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException(); IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException(); #endregion + + #region MarkersConverter + 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>(); } + #endregion } /// Component without data