From 2b5cc8b27b1b696b0d2e87870fa6b3018362c79d Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:31:13 +0800 Subject: [PATCH] rename Subject to Aspect --- src/Builtin/Aspects.cs | 317 ++++++++++++++++++ .../{Subjects.cs.meta => Aspects.cs.meta} | 0 src/Builtin/InjectSystem.cs | 5 +- src/Builtin/Subjects.cs | 317 ------------------ src/Builtin/Systems.cs | 8 +- src/{EcsSubject.cs => EcsAspect.cs} | 68 ++-- src/{EcsSubject.cs.meta => EcsAspect.cs.meta} | 2 +- src/EcsPipeline.cs | 2 +- src/EcsWorld.cs | 40 +-- src/Executors/EcsWhereExecutor.cs | 12 +- src/Pools/EcsPool.cs | 6 +- src/Pools/EcsTagPool.cs | 6 +- src/Utils/WorldMetaStorage.cs | 10 +- 13 files changed, 398 insertions(+), 395 deletions(-) create mode 100644 src/Builtin/Aspects.cs rename src/Builtin/{Subjects.cs.meta => Aspects.cs.meta} (100%) delete mode 100644 src/Builtin/Subjects.cs rename src/{EcsSubject.cs => EcsAspect.cs} (84%) rename src/{EcsSubject.cs.meta => EcsAspect.cs.meta} (83%) diff --git a/src/Builtin/Aspects.cs b/src/Builtin/Aspects.cs new file mode 100644 index 0000000..4844048 --- /dev/null +++ b/src/Builtin/Aspects.cs @@ -0,0 +1,317 @@ +namespace DCFApixels.DragonECS +{ + public sealed class EmptyAspect : EcsAspect { } + + public sealed class SingleAspect : EcsAspect where TPool : IEcsPoolImplementation, new() + { + public readonly TPool pool; + public SingleAspect(Builder b) + { + pool = b.Include(); + } + } + public sealed class CombinedAspect : EcsAspect + where A0 : EcsAspect + where A1 : EcsAspect + { + public readonly A0 a0; + public readonly A1 a1; + public CombinedAspect(Builder b) + { + a0 = b.Combine(0); + a1 = b.Combine(1); + } + } + + public sealed class CombinedAspect : EcsAspect + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + { + public readonly A0 a0; + public readonly A1 a1; + public readonly A2 a2; + public CombinedAspect(Builder b) + { + a0 = b.Combine(0); + a1 = b.Combine(1); + a2 = b.Combine(2); + } + } + + public sealed class CombinedAspect : EcsAspect + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + { + public readonly A0 a0; + public readonly A1 a1; + public readonly A2 a2; + public readonly A3 a3; + public CombinedAspect(Builder b) + { + a0 = b.Combine(0); + a1 = b.Combine(1); + a2 = b.Combine(2); + a3 = b.Combine(3); + } + } + + public sealed class CombinedAspect : EcsAspect + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + { + public readonly A0 a0; + public readonly A1 a1; + public readonly A2 a2; + public readonly A3 a3; + public readonly A4 a4; + public CombinedAspect(Builder b) + { + a0 = b.Combine(0); + a1 = b.Combine(1); + a2 = b.Combine(2); + a3 = b.Combine(3); + a4 = b.Combine(4); + } + } + + public sealed class CombinedAspect : EcsAspect + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + where A5 : EcsAspect + { + public readonly A0 a0; + public readonly A1 a1; + public readonly A2 a2; + public readonly A3 a3; + public readonly A4 a4; + public readonly A5 a5; + public CombinedAspect(Builder b) + { + a0 = b.Combine(0); + a1 = b.Combine(1); + a2 = b.Combine(2); + a3 = b.Combine(3); + a4 = b.Combine(4); + a5 = b.Combine(5); + } + } + + public static class CombinedAspectExtensions + { + #region Where 2 + public static EcsReadonlyGroup Where(this EcsWorld self, out A0 a0, out A1 a1) + where A0 : EcsAspect + where A1 : EcsAspect + { + return self.WhereFor(self.Entities, out a0, out a1); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out A0 a0, out A1 a1) + where A0 : EcsAspect + where A1 : EcsAspect + { + var combined = self.GetAspect>(); + a0 = combined.a0; + a1 = combined.a1; + return self.WhereFor>(sourceGroup); + } + + public static EcsReadonlyGroup Where(this EcsWorld self) + where A0 : EcsAspect + where A1 : EcsAspect + { + return self.Where>(); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) + where A0 : EcsAspect + where A1 : EcsAspect + { + return self.WhereFor>(sourceGroup); + } + #endregion + + #region Where 3 + public static EcsReadonlyGroup Where(this EcsWorld self, out A0 a0, out A1 a1, out A2 a2) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + { + return self.WhereFor(self.Entities, out a0, out a1, out a2); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out A0 a0, out A1 a1, out A2 a2) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + { + var combined = self.GetAspect>(); + a0 = combined.a0; + a1 = combined.a1; + a2 = combined.a2; + return self.WhereFor>(sourceGroup); + } + + public static EcsReadonlyGroup Where(this EcsWorld self) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + { + return self.Where>(); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + { + return self.WhereFor>(sourceGroup); + } + #endregion + + #region Where 4 + public static EcsReadonlyGroup Where(this EcsWorld self, out A0 a0, out A1 a1, out A2 a2, out A3 a3) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + { + return self.WhereFor(self.Entities, out a0, out a1, out a2, out a3); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out A0 a0, out A1 a1, out A2 a2, out A3 a3) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + { + var combined = self.GetAspect>(); + a0 = combined.a0; + a1 = combined.a1; + a2 = combined.a2; + a3 = combined.a3; + return self.WhereFor>(sourceGroup); + } + + public static EcsReadonlyGroup Where(this EcsWorld self) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + { + return self.Where>(); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + { + return self.WhereFor>(sourceGroup); + } + #endregion + + #region Where 5 + public static EcsReadonlyGroup Where(this EcsWorld self, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + { + return self.WhereFor(self.Entities, out a0, out a1, out a2, out a3, out a4); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + { + var combined = self.GetAspect>(); + a0 = combined.a0; + a1 = combined.a1; + a2 = combined.a2; + a3 = combined.a3; + a4 = combined.a4; + return self.WhereFor>(sourceGroup); + } + + + public static EcsReadonlyGroup Where(this EcsWorld self) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + { + return self.Where>(); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + { + return self.WhereFor>(sourceGroup); + } + #endregion + + #region Where 6 + public static EcsReadonlyGroup Where(this EcsWorld self, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + where A5 : EcsAspect + { + return self.WhereFor(self.Entities, out a0, out a1, out a2, out a3, out a4, out a5); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + where A5 : EcsAspect + { + var combined = self.GetAspect>(); + a0 = combined.a0; + a1 = combined.a1; + a2 = combined.a2; + a3 = combined.a3; + a4 = combined.a4; + a5 = combined.a5; + return self.WhereFor>(sourceGroup); + } + + + public static EcsReadonlyGroup Where(this EcsWorld self) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + where A5 : EcsAspect + { + return self.Where>(); + } + public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) + where A0 : EcsAspect + where A1 : EcsAspect + where A2 : EcsAspect + where A3 : EcsAspect + where A4 : EcsAspect + where A5 : EcsAspect + { + return self.WhereFor>(sourceGroup); + } + #endregion + } +} diff --git a/src/Builtin/Subjects.cs.meta b/src/Builtin/Aspects.cs.meta similarity index 100% rename from src/Builtin/Subjects.cs.meta rename to src/Builtin/Aspects.cs.meta diff --git a/src/Builtin/InjectSystem.cs b/src/Builtin/InjectSystem.cs index 7ea0ee7..e618f57 100644 --- a/src/Builtin/InjectSystem.cs +++ b/src/Builtin/InjectSystem.cs @@ -141,9 +141,12 @@ namespace DCFApixels.DragonECS } } - public static class InjectSystemExtensions + public static partial class EcsPipelineExtensions { public static void Inject(EcsPipeline self, T data) => self.GetRunner>().Inject(data); + } + public static partial class EcsPipelineBuilderExtensions + { public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T data) { if (data == null) throw new ArgumentNullException(); diff --git a/src/Builtin/Subjects.cs b/src/Builtin/Subjects.cs deleted file mode 100644 index c281044..0000000 --- a/src/Builtin/Subjects.cs +++ /dev/null @@ -1,317 +0,0 @@ -namespace DCFApixels.DragonECS -{ - public sealed class EmptySubject : EcsSubject { } - - public sealed class SingleSubject : EcsSubject where TPool : IEcsPoolImplementation, new() - { - public readonly TPool pool; - public SingleSubject(Builder b) - { - pool = b.Include(); - } - } - public sealed class CombinedSubject : EcsSubject - where S0 : EcsSubject - where S1 : EcsSubject - { - public readonly S0 s0; - public readonly S1 s1; - public CombinedSubject(Builder b) - { - s0 = b.Combine(0); - s1 = b.Combine(1); - } - } - - public sealed class CombinedSubject : EcsSubject - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - { - public readonly S0 s0; - public readonly S1 s1; - public readonly S2 s2; - public CombinedSubject(Builder b) - { - s0 = b.Combine(0); - s1 = b.Combine(1); - s2 = b.Combine(2); - } - } - - public sealed class CombinedSubject : EcsSubject - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - { - public readonly S0 s0; - public readonly S1 s1; - public readonly S2 s2; - public readonly S3 s3; - public CombinedSubject(Builder b) - { - s0 = b.Combine(0); - s1 = b.Combine(1); - s2 = b.Combine(2); - s3 = b.Combine(3); - } - } - - public sealed class CombinedSubject : EcsSubject - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - { - public readonly S0 s0; - public readonly S1 s1; - public readonly S2 s2; - public readonly S3 s3; - public readonly S4 s4; - public CombinedSubject(Builder b) - { - s0 = b.Combine(0); - s1 = b.Combine(1); - s2 = b.Combine(2); - s3 = b.Combine(3); - s4 = b.Combine(4); - } - } - - public sealed class CombinedSubject : EcsSubject - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - where S5 : EcsSubject - { - public readonly S0 s0; - public readonly S1 s1; - public readonly S2 s2; - public readonly S3 s3; - public readonly S4 s4; - public readonly S5 s5; - public CombinedSubject(Builder b) - { - s0 = b.Combine(0); - s1 = b.Combine(1); - s2 = b.Combine(2); - s3 = b.Combine(3); - s4 = b.Combine(4); - s5 = b.Combine(5); - } - } - - public static class CombinedSubjectExtensions - { - #region Where 2 - public static EcsReadonlyGroup Where(this EcsWorld self, out S0 s0, out S1 s1) - where S0 : EcsSubject - where S1 : EcsSubject - { - return self.WhereFor(self.Entities, out s0, out s1); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out S0 s0, out S1 s1) - where S0 : EcsSubject - where S1 : EcsSubject - { - var combined = self.GetSubject>(); - s0 = combined.s0; - s1 = combined.s1; - return self.WhereFor>(sourceGroup); - } - - public static EcsReadonlyGroup Where(this EcsWorld self) - where S0 : EcsSubject - where S1 : EcsSubject - { - return self.Where>(); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) - where S0 : EcsSubject - where S1 : EcsSubject - { - return self.WhereFor>(sourceGroup); - } - #endregion - - #region Where 3 - public static EcsReadonlyGroup Where(this EcsWorld self, out S0 s0, out S1 s1, out S2 s2) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - { - return self.WhereFor(self.Entities, out s0, out s1, out s2); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out S0 s0, out S1 s1, out S2 s2) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - { - var combined = self.GetSubject>(); - s0 = combined.s0; - s1 = combined.s1; - s2 = combined.s2; - return self.WhereFor>(sourceGroup); - } - - public static EcsReadonlyGroup Where(this EcsWorld self) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - { - return self.Where>(); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - { - return self.WhereFor>(sourceGroup); - } - #endregion - - #region Where 4 - public static EcsReadonlyGroup Where(this EcsWorld self, out S0 s0, out S1 s1, out S2 s2, out S3 s3) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - { - return self.WhereFor(self.Entities, out s0, out s1, out s2, out s3); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out S0 s0, out S1 s1, out S2 s2, out S3 s3) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - { - var combined = self.GetSubject>(); - s0 = combined.s0; - s1 = combined.s1; - s2 = combined.s2; - s3 = combined.s3; - return self.WhereFor>(sourceGroup); - } - - public static EcsReadonlyGroup Where(this EcsWorld self) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - { - return self.Where>(); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - { - return self.WhereFor>(sourceGroup); - } - #endregion - - #region Where 5 - public static EcsReadonlyGroup Where(this EcsWorld self, out S0 s0, out S1 s1, out S2 s2, out S3 s3, out S4 s4) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - { - return self.WhereFor(self.Entities, out s0, out s1, out s2, out s3, out s4); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out S0 s0, out S1 s1, out S2 s2, out S3 s3, out S4 s4) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - { - var combined = self.GetSubject>(); - s0 = combined.s0; - s1 = combined.s1; - s2 = combined.s2; - s3 = combined.s3; - s4 = combined.s4; - return self.WhereFor>(sourceGroup); - } - - - public static EcsReadonlyGroup Where(this EcsWorld self) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - { - return self.Where>(); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - { - return self.WhereFor>(sourceGroup); - } - #endregion - - #region Where 6 - public static EcsReadonlyGroup Where(this EcsWorld self, out S0 s0, out S1 s1, out S2 s2, out S3 s3, out S4 s4, out S5 s5) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - where S5 : EcsSubject - { - return self.WhereFor(self.Entities, out s0, out s1, out s2, out s3, out s4, out s5); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup, out S0 s0, out S1 s1, out S2 s2, out S3 s3, out S4 s4, out S5 s5) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - where S5 : EcsSubject - { - var combined = self.GetSubject>(); - s0 = combined.s0; - s1 = combined.s1; - s2 = combined.s2; - s3 = combined.s3; - s4 = combined.s4; - s5 = combined.s5; - return self.WhereFor>(sourceGroup); - } - - - public static EcsReadonlyGroup Where(this EcsWorld self) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - where S5 : EcsSubject - { - return self.Where>(); - } - public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) - where S0 : EcsSubject - where S1 : EcsSubject - where S2 : EcsSubject - where S3 : EcsSubject - where S4 : EcsSubject - where S5 : EcsSubject - { - return self.WhereFor>(sourceGroup); - } - #endregion - } -} diff --git a/src/Builtin/Systems.cs b/src/Builtin/Systems.cs index 7b65738..f478cf6 100644 --- a/src/Builtin/Systems.cs +++ b/src/Builtin/Systems.cs @@ -26,10 +26,10 @@ namespace DCFApixels.DragonECS public class DeleteOneFrameComponentSystem : IEcsRunProcess, IEcsInject where TComponent : struct, IEcsComponent { - private sealed class Subject : EcsSubject + private sealed class Aspect : EcsAspect { public EcsPool pool; - public Subject(Builder b) => pool = b.Include(); + public Aspect(Builder b) => pool = b.Include(); } List _worlds = new List(); public void Inject(EcsWorld obj) => _worlds.Add(obj); @@ -40,8 +40,8 @@ namespace DCFApixels.DragonECS EcsWorld world = _worlds[i]; if (world.IsComponentTypeDeclared()) { - foreach (var e in world.Where(out Subject s)) - s.pool.Del(e); + foreach (var e in world.Where(out Aspect a)) + a.pool.Del(e); } } } diff --git a/src/EcsSubject.cs b/src/EcsAspect.cs similarity index 84% rename from src/EcsSubject.cs rename to src/EcsAspect.cs index 2032aa5..3c47c0b 100644 --- a/src/EcsSubject.cs +++ b/src/EcsAspect.cs @@ -9,7 +9,7 @@ using System.Text; namespace DCFApixels.DragonECS { - public abstract class EcsSubject + public abstract class EcsAspect { [EditorBrowsable(EditorBrowsableState.Always)] internal EcsWorld source; @@ -29,41 +29,41 @@ namespace DCFApixels.DragonECS #region Builder protected virtual void Init(Builder b) { } - public sealed class Builder : EcsSubjectBuilderBase + public sealed class Builder : EcsAspectBuilderBase { private EcsWorld _world; private HashSet _inc; private HashSet _exc; - private List _subjects; + private List _combined; public EcsWorld World => _world; private Builder(EcsWorld world) { _world = world; - _subjects = new List(); + _combined = new List(); _inc = new HashSet(); _exc = new HashSet(); } - internal static TSubject Build(EcsWorld world) where TSubject : EcsSubject + internal static TAspect Build(EcsWorld world) where TAspect : EcsAspect { Builder builder = new Builder(world); - Type subjectType = typeof(TSubject); - ConstructorInfo constructorInfo = subjectType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(Builder) }, null); - EcsSubject newSubject; + Type aspectType = typeof(TAspect); + ConstructorInfo constructorInfo = aspectType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(Builder) }, null); + EcsAspect newAspect; if (constructorInfo != null) { - newSubject = (EcsSubject)constructorInfo.Invoke(new object[] { builder }); + newAspect = (EcsAspect)constructorInfo.Invoke(new object[] { builder }); } else { - newSubject = (EcsSubject)Activator.CreateInstance(typeof(TSubject)); - newSubject.Init(builder); + newAspect = (EcsAspect)Activator.CreateInstance(typeof(TAspect)); + newAspect.Init(builder); } - newSubject.source = world; - builder.End(out newSubject.mask); - newSubject._isInit = true; - return (TSubject)newSubject; + newAspect.source = world; + builder.End(out newAspect.mask); + newAspect._isInit = true; + return (TAspect)newAspect; } #region Include/Exclude/Optional @@ -100,10 +100,10 @@ namespace DCFApixels.DragonECS #endregion #region Combine - public TOtherSubject Combine(int order = 0) where TOtherSubject : EcsSubject + public TOtherAspect Combine(int order = 0) where TOtherAspect : EcsAspect { - var result = _world.GetSubject(); - _subjects.Add(new CombinedSubject(result, order)); + var result = _world.GetAspect(); + _combined.Add(new Combined(result, order)); return result; } #endregion @@ -117,14 +117,14 @@ namespace DCFApixels.DragonECS { HashSet maskInc; HashSet maskExc; - if (_subjects.Count > 0) + if (_combined.Count > 0) { maskInc = new HashSet(); maskExc = new HashSet(); - _subjects.Sort((a, b) => a.order - b.order); - foreach (var item in _subjects) + _combined.Sort((a, b) => a.order - b.order); + foreach (var item in _combined) { - EcsMask submask = item.subject.mask; + EcsMask submask = item.aspect.mask; maskInc.ExceptWith(submask._exc);//удаляю конфликтующие ограничения maskExc.ExceptWith(submask._inc);//удаляю конфликтующие ограничения maskInc.UnionWith(submask._inc); @@ -169,30 +169,30 @@ namespace DCFApixels.DragonECS #endregion #region Iterator - public EcsSubjectIterator GetIterator() + public EcsAspectIterator GetIterator() { - return new EcsSubjectIterator(this, source.Entities); + return new EcsAspectIterator(this, source.Entities); } - public EcsSubjectIterator GetIteratorFor(EcsReadonlyGroup sourceGroup) + public EcsAspectIterator GetIteratorFor(EcsReadonlyGroup sourceGroup) { - return new EcsSubjectIterator(this, sourceGroup); + return new EcsAspectIterator(this, sourceGroup); } #endregion - private struct CombinedSubject + private struct Combined { - public EcsSubject subject; + public EcsAspect aspect; public int order; - public CombinedSubject(EcsSubject subject, int order) + public Combined(EcsAspect aspect, int order) { - this.subject = subject; + this.aspect = aspect; this.order = order; } } } #region BuilderBase - public abstract class EcsSubjectBuilderBase + public abstract class EcsAspectBuilderBase { public abstract TPool Include() where TPool : IEcsPoolImplementation, new(); public abstract TPool Exclude() where TPool : IEcsPoolImplementation, new(); @@ -291,15 +291,15 @@ namespace DCFApixels.DragonECS #endregion #region Iterator - public ref struct EcsSubjectIterator + public ref struct EcsAspectIterator { public readonly EcsMask mask; private EcsReadonlyGroup _sourceGroup; private Enumerator _enumerator; - public EcsSubjectIterator(EcsSubject subject, EcsReadonlyGroup sourceGroup) + public EcsAspectIterator(EcsAspect aspect, EcsReadonlyGroup sourceGroup) { - mask = subject.mask; + mask = aspect.mask; _sourceGroup = sourceGroup; _enumerator = default; } diff --git a/src/EcsSubject.cs.meta b/src/EcsAspect.cs.meta similarity index 83% rename from src/EcsSubject.cs.meta rename to src/EcsAspect.cs.meta index 17975f6..91124c4 100644 --- a/src/EcsSubject.cs.meta +++ b/src/EcsAspect.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 29736b3a804309743ad63455ed8fa098 +guid: 094f935216fa31840883f30e413d7f0c MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/src/EcsPipeline.cs b/src/EcsPipeline.cs index 549b9e3..5f915df 100644 --- a/src/EcsPipeline.cs +++ b/src/EcsPipeline.cs @@ -312,7 +312,7 @@ namespace DCFApixels.DragonECS } #region Extensions - public static class EcsPipelineExtensions + public static partial class EcsPipelineExtensions { public static bool IsNullOrDestroyed(this EcsPipeline self) => self == null || self.IsDestoryed; public static EcsPipeline.Builder Add(this EcsPipeline.Builder self, IEnumerable range, string layerName = null) diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 0a4b5f9..dcabfd7 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -119,7 +119,7 @@ namespace DCFApixels.DragonECS internal IEcsPoolImplementation[] _pools; private EcsNullPool _nullPool = EcsNullPool.instance; - private EcsSubject[] _subjects; + private EcsAspect[] _aspects; private EcsQueryExecutor[] _executors; private List> _groups = new List>(); @@ -166,7 +166,7 @@ namespace DCFApixels.DragonECS _allEntites = GetFreeGroup(); - _subjects = new EcsSubject[128]; + _aspects = new EcsAspect[128]; _executors = new EcsQueryExecutor[128]; } public void Destroy() @@ -175,7 +175,7 @@ namespace DCFApixels.DragonECS _gens = null; _pools = null; _nullPool = null; - _subjects = null; + _aspects = null; _executors = null; Worlds[id] = null; ReleaseData(id); @@ -212,14 +212,14 @@ namespace DCFApixels.DragonECS } return (TPool)_pools[index]; } - public TSubject GetSubject() where TSubject : EcsSubject + public TAspect GetAspect() where TAspect : EcsAspect { - int index = WorldMetaStorage.GetSubjectID(_worldTypeID); - if (index >= _subjects.Length) - Array.Resize(ref _subjects, _subjects.Length << 1); - if (_subjects[index] == null) - _subjects[index] = EcsSubject.Builder.Build(this); - return (TSubject)_subjects[index]; + int index = WorldMetaStorage.GetAspectID(_worldTypeID); + if (index >= _aspects.Length) + Array.Resize(ref _aspects, _aspects.Length << 1); + if (_aspects[index] == null) + _aspects[index] = EcsAspect.Builder.Build(this); + return (TAspect)_aspects[index]; } public TExecutor GetExecutor() where TExecutor : EcsQueryExecutor, new() { @@ -239,25 +239,25 @@ namespace DCFApixels.DragonECS #endregion #region Where Query - public EcsReadonlyGroup WhereFor(EcsReadonlyGroup sourceGroup, out TSubject subject) where TSubject : EcsSubject + public EcsReadonlyGroup WhereFor(EcsReadonlyGroup sourceGroup, out TAspect aspect) where TAspect : EcsAspect { - var executor = GetExecutor>(); - subject = executor.Subject; + var executor = GetExecutor>(); + aspect = executor.Aspect; return executor.ExecuteFor(sourceGroup); } - public EcsReadonlyGroup WhereFor(EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject + public EcsReadonlyGroup WhereFor(EcsReadonlyGroup sourceGroup) where TAspect : EcsAspect { - return GetExecutor>().ExecuteFor(sourceGroup); + return GetExecutor>().ExecuteFor(sourceGroup); } - public EcsReadonlyGroup Where(out TSubject subject) where TSubject : EcsSubject + public EcsReadonlyGroup Where(out TAspect aspect) where TAspect : EcsAspect { - var executor = GetExecutor>(); - subject = executor.Subject; + var executor = GetExecutor>(); + aspect = executor.Aspect; return executor.Execute(); } - public EcsReadonlyGroup Where() where TSubject : EcsSubject + public EcsReadonlyGroup Where() where TAspect : EcsAspect { - return GetExecutor>().Execute(); + return GetExecutor>().Execute(); } #endregion diff --git a/src/Executors/EcsWhereExecutor.cs b/src/Executors/EcsWhereExecutor.cs index 4b63300..4ed4919 100644 --- a/src/Executors/EcsWhereExecutor.cs +++ b/src/Executors/EcsWhereExecutor.cs @@ -1,8 +1,8 @@ namespace DCFApixels.DragonECS { - public sealed class EcsWhereExecutor : EcsQueryExecutor where TSubject : EcsSubject + public sealed class EcsWhereExecutor : EcsQueryExecutor where TAspect : EcsAspect { - private TSubject _subject; + private TAspect _aspect; private EcsGroup _filteredGroup; private long _executeVersion; @@ -12,14 +12,14 @@ #endif #region Properties - public TSubject Subject => _subject; + public TAspect Aspect => _aspect; internal long ExecuteVersion => _executeVersion; #endregion #region OnInitialize/OnDestroy protected sealed override void OnInitialize() { - _subject = World.GetSubject(); + _aspect = World.GetAspect(); _filteredGroup = EcsGroup.New(World); } protected sealed override void OnDestroy() @@ -29,14 +29,14 @@ #endregion #region Methods - public EcsReadonlyGroup Execute() => ExecuteFor(_subject.World.Entities); + public EcsReadonlyGroup Execute() => ExecuteFor(_aspect.World.Entities); public EcsReadonlyGroup ExecuteFor(EcsReadonlyGroup sourceGroup) { #if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS _executeWhere.Begin(); if (sourceGroup.IsNull) throw new System.ArgumentNullException();//TODO составить текст исключения. #endif - _subject.GetIteratorFor(sourceGroup).CopyTo(_filteredGroup); + _aspect.GetIteratorFor(sourceGroup).CopyTo(_filteredGroup); #if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS _executeWhere.End(); #endif diff --git a/src/Pools/EcsPool.cs b/src/Pools/EcsPool.cs index 71f64c1..cc1cb6d 100644 --- a/src/Pools/EcsPool.cs +++ b/src/Pools/EcsPool.cs @@ -202,15 +202,15 @@ namespace DCFApixels.DragonECS return self.GetPool>(); } - public static EcsPool Include(this EcsSubjectBuilderBase self) where TComponent : struct, IEcsComponent + public static EcsPool Include(this EcsAspectBuilderBase self) where TComponent : struct, IEcsComponent { return self.Include>(); } - public static EcsPool Exclude(this EcsSubjectBuilderBase self) where TComponent : struct, IEcsComponent + public static EcsPool Exclude(this EcsAspectBuilderBase self) where TComponent : struct, IEcsComponent { return self.Exclude>(); } - public static EcsPool Optional(this EcsSubjectBuilderBase self) where TComponent : struct, IEcsComponent + public static EcsPool Optional(this EcsAspectBuilderBase self) where TComponent : struct, IEcsComponent { return self.Optional>(); } diff --git a/src/Pools/EcsTagPool.cs b/src/Pools/EcsTagPool.cs index a7f752a..01c958f 100644 --- a/src/Pools/EcsTagPool.cs +++ b/src/Pools/EcsTagPool.cs @@ -194,15 +194,15 @@ namespace DCFApixels.DragonECS return self.GetPool>(); } - public static EcsTagPool Include(this EcsSubjectBuilderBase self) where TTagComponent : struct, IEcsTagComponent + public static EcsTagPool Include(this EcsAspectBuilderBase self) where TTagComponent : struct, IEcsTagComponent { return self.Include>(); } - public static EcsTagPool Exclude(this EcsSubjectBuilderBase self) where TTagComponent : struct, IEcsTagComponent + public static EcsTagPool Exclude(this EcsAspectBuilderBase self) where TTagComponent : struct, IEcsTagComponent { return self.Exclude>(); } - public static EcsTagPool Optional(this EcsSubjectBuilderBase self) where TTagComponent : struct, IEcsTagComponent + public static EcsTagPool Optional(this EcsAspectBuilderBase self) where TTagComponent : struct, IEcsTagComponent { return self.Optional>(); } diff --git a/src/Utils/WorldMetaStorage.cs b/src/Utils/WorldMetaStorage.cs index 79a0c63..741a7f9 100644 --- a/src/Utils/WorldMetaStorage.cs +++ b/src/Utils/WorldMetaStorage.cs @@ -49,7 +49,7 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetPoolID(int worldID) => Pool.Get(worldID); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int GetSubjectID(int worldID) => Subject.Get(worldID); + public static int GetAspectID(int worldID) => Aspect.Get(worldID); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetExecutorID(int worldID) => Executor.Get(worldID); [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -159,10 +159,10 @@ namespace DCFApixels.DragonECS } } } - private static class Subject + private static class Aspect { public static int[] ids; - static Subject() + static Aspect() { ids = new int[_tokenCount]; for (int i = 0; i < ids.Length; i++) @@ -174,7 +174,7 @@ namespace DCFApixels.DragonECS { ref int id = ref ids[token]; if (id < 0) - id = _metas[token].subjectsCount++; + id = _metas[token].aspectsCount++; return id; } private sealed class Resizer : ResizerBase @@ -255,7 +255,7 @@ namespace DCFApixels.DragonECS public readonly Type worldType; public int id; public int componentCount; - public int subjectsCount; + public int aspectsCount; public int executorsCount; public int worldComponentCount; private Type[] _types = new Type[10];