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.WhereToGroupFor>(sourceGroup); } public static EcsReadonlyGroup Where(this EcsWorld self) where A0 : EcsAspect where A1 : EcsAspect { return self.WhereToGroup>(); } public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) where A0 : EcsAspect where A1 : EcsAspect { return self.WhereToGroupFor>(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.WhereToGroupFor>(sourceGroup); } public static EcsReadonlyGroup Where(this EcsWorld self) where A0 : EcsAspect where A1 : EcsAspect where A2 : EcsAspect { return self.WhereToGroup>(); } public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) where A0 : EcsAspect where A1 : EcsAspect where A2 : EcsAspect { return self.WhereToGroupFor>(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.WhereToGroupFor>(sourceGroup); } public static EcsReadonlyGroup Where(this EcsWorld self) where A0 : EcsAspect where A1 : EcsAspect where A2 : EcsAspect where A3 : EcsAspect { return self.WhereToGroup>(); } public static EcsReadonlyGroup WhereFor(this EcsWorld self, EcsReadonlyGroup sourceGroup) where A0 : EcsAspect where A1 : EcsAspect where A2 : EcsAspect where A3 : EcsAspect { return self.WhereToGroupFor>(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.WhereToGroupFor>(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.WhereToGroup>(); } 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.WhereToGroupFor>(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.WhereToGroupFor>(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.WhereToGroup>(); } 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.WhereToGroupFor>(sourceGroup); } #endregion } }