diff --git a/DragonECS.csproj b/DragonECS.csproj index cb1670d..129c906 100644 --- a/DragonECS.csproj +++ b/DragonECS.csproj @@ -10,7 +10,7 @@ DCFApixels.DragonECS DragonECS - 0.8.37 + 0.8.39 DCFApixels ECS Framework for Game Engines with C# and .Net Platform DCFApixels diff --git a/package.json b/package.json index 50d14d4..b811349 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "displayName": "DragonECS", "description": "C# Entity Component System Framework", "unity": "2020.3", - "version": "0.8.37", + "version": "0.8.39", "repository": { "type": "git", "url": "https://github.com/DCFApixels/DragonECS.git" diff --git a/src/Builtin/Aspects.cs b/src/Builtin/Aspects.cs index a04ea7a..708d64d 100644 --- a/src/Builtin/Aspects.cs +++ b/src/Builtin/Aspects.cs @@ -6,23 +6,14 @@ namespace DCFApixels.DragonECS public sealed class SingleAspect : EcsAspect where TPool : IEcsPoolImplementation, new() { - public readonly TPool pool; - public SingleAspect(Builder b) - { - pool = b.IncludePool(); - } + public readonly TPool pool = CurrentBuilder.IncludePool(); } public sealed class CombinedAspect : EcsAspect - where A0 : EcsAspect - where A1 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() { - public readonly A0 a0; - public readonly A1 a1; - public CombinedAspect(Builder b) - { - a0 = b.Combine(0); - a1 = b.Combine(1); - } + public readonly A0 a0 = CurrentBuilder.Combine(); + public readonly A1 a1 = CurrentBuilder.Combine(); public void Deconstruct(out A0 a0, out A1 a1) { a0 = this.a0; @@ -31,19 +22,13 @@ namespace DCFApixels.DragonECS } public sealed class CombinedAspect : EcsAspect - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() { - 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 readonly A0 a0 = CurrentBuilder.Combine(); + public readonly A1 a1 = CurrentBuilder.Combine(); + public readonly A2 a2 = CurrentBuilder.Combine(); public void Deconstruct(out A0 a0, out A1 a1, out A2 a2) { a0 = this.a0; @@ -53,22 +38,15 @@ namespace DCFApixels.DragonECS } public sealed class CombinedAspect : EcsAspect - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() { - 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 readonly A0 a0 = CurrentBuilder.Combine(); + public readonly A1 a1 = CurrentBuilder.Combine(); + public readonly A2 a2 = CurrentBuilder.Combine(); + public readonly A3 a3 = CurrentBuilder.Combine(); public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3) { a0 = this.a0; @@ -79,25 +57,17 @@ namespace DCFApixels.DragonECS } public sealed class CombinedAspect : EcsAspect - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect - where A4 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() { - 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 readonly A0 a0 = CurrentBuilder.Combine(); + public readonly A1 a1 = CurrentBuilder.Combine(); + public readonly A2 a2 = CurrentBuilder.Combine(); + public readonly A3 a3 = CurrentBuilder.Combine(); + public readonly A4 a4 = CurrentBuilder.Combine(); public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) { a0 = this.a0; @@ -109,28 +79,19 @@ namespace DCFApixels.DragonECS } public sealed class CombinedAspect : EcsAspect - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect - where A4 : EcsAspect - where A5 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() + where A5 : EcsAspect, new() { - 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 readonly A0 a0 = CurrentBuilder.Combine(); + public readonly A1 a1 = CurrentBuilder.Combine(); + public readonly A2 a2 = CurrentBuilder.Combine(); + public readonly A3 a3 = CurrentBuilder.Combine(); + public readonly A4 a4 = CurrentBuilder.Combine(); + public readonly A5 a5 = CurrentBuilder.Combine(); public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) { a0 = this.a0; @@ -146,21 +107,21 @@ namespace DCFApixels.DragonECS { #region Where 2 public static EcsSpan Where(this TCollection entities, out A0 a0, out A1 a1) - where A0 : EcsAspect - where A1 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().Where(out a0, out a1); } public static EcsSpan Where(this EcsReadonlyGroup group, out A0 a0, out A1 a1) - where A0 : EcsAspect - where A1 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() { return group.ToSpan().Where(out a0, out a1); } public static EcsSpan Where(this EcsSpan span, out A0 a0, out A1 a1) - where A0 : EcsAspect - where A1 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() { var result = span.Where(out CombinedAspect combined); (a0, a1) = combined; @@ -170,24 +131,24 @@ namespace DCFApixels.DragonECS #region Where 3 public static EcsSpan Where(this TCollection entities, out A0 a0, out A1 a1, out A2 a2) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().Where(out a0, out a1, out a2); } public static EcsSpan Where(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() { return group.ToSpan().Where(out a0, out a1, out a2); } public static EcsSpan Where(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() { var result = span.Where(out CombinedAspect combined); (a0, a1, a2) = combined; @@ -197,27 +158,27 @@ namespace DCFApixels.DragonECS #region Where 4 public static EcsSpan Where(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().Where(out a0, out a1, out a2, out a3); } public static EcsSpan Where(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() { return group.ToSpan().Where(out a0, out a1, out a2, out a3); } public static EcsSpan Where(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() { var result = span.Where(out CombinedAspect combined); (a0, a1, a2, a3) = combined; @@ -227,30 +188,30 @@ namespace DCFApixels.DragonECS #region Where 5 public static EcsSpan Where(this TCollection entities, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().Where(out a0, out a1, out a2, out a3, out a4); } public static EcsSpan Where(this EcsReadonlyGroup group, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() { return group.ToSpan().Where(out a0, out a1, out a2, out a3, out a4); } public static EcsSpan Where(this EcsSpan span, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() { var result = span.Where(out CombinedAspect combined); (a0, a1, a2, a3, a4) = combined; @@ -260,33 +221,33 @@ namespace DCFApixels.DragonECS #region Where 6 public static EcsSpan Where(this TCollection entities, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() + where A5 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().Where(out a0, out a1, out a2, out a3, out a4, out a5); } public static EcsSpan Where(this EcsReadonlyGroup group, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() + where A5 : EcsAspect, new() { return group.ToSpan().Where(out a0, out a1, out a2, out a3, out a4, out a5); } public static EcsSpan Where(this EcsSpan span, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() + where A5 : EcsAspect, new() { var result = span.Where(out CombinedAspect combined); (a0, a1, a2, a3, a4, a5) = combined; @@ -296,21 +257,21 @@ namespace DCFApixels.DragonECS #region WhereToGroup 2 public static EcsReadonlyGroup WhereToGroup(this TCollection entities, out A0 a0, out A1 a1) - where A0 : EcsAspect - where A1 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().WhereToGroup(out a0, out a1); } public static EcsReadonlyGroup WhereToGroup(this EcsReadonlyGroup group, out A0 a0, out A1 a1) - where A0 : EcsAspect - where A1 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() { return group.ToSpan().WhereToGroup(out a0, out a1); } public static EcsReadonlyGroup WhereToGroup(this EcsSpan span, out A0 a0, out A1 a1) - where A0 : EcsAspect - where A1 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() { var result = span.WhereToGroup(out CombinedAspect combined); (a0, a1) = combined; @@ -320,24 +281,24 @@ namespace DCFApixels.DragonECS #region WhereToGroup 3 public static EcsReadonlyGroup WhereToGroup(this TCollection entities, out A0 a0, out A1 a1, out A2 a2) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().WhereToGroup(out a0, out a1, out a2); } public static EcsReadonlyGroup WhereToGroup(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() { return group.ToSpan().WhereToGroup(out a0, out a1, out a2); } public static EcsReadonlyGroup WhereToGroup(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() { var result = span.WhereToGroup(out CombinedAspect combined); (a0, a1, a2) = combined; @@ -347,27 +308,27 @@ namespace DCFApixels.DragonECS #region WhereToGroup 4 public static EcsReadonlyGroup WhereToGroup(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3); } public static EcsReadonlyGroup WhereToGroup(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() { return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3); } public static EcsReadonlyGroup WhereToGroup(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3) - where A0 : EcsAspect - where A1 : EcsAspect - where A2 : EcsAspect - where A3 : EcsAspect + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() { var result = span.WhereToGroup(out CombinedAspect combined); (a0, a1, a2, a3) = combined; @@ -377,30 +338,30 @@ namespace DCFApixels.DragonECS #region WhereToGroup 5 public static EcsReadonlyGroup WhereToGroup(this TCollection entities, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4); } public static EcsReadonlyGroup WhereToGroup(this EcsReadonlyGroup group, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() { return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4); } public static EcsReadonlyGroup WhereToGroup(this EcsSpan span, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() { var result = span.WhereToGroup(out CombinedAspect combined); (a0, a1, a2, a3, a4) = combined; @@ -410,33 +371,33 @@ namespace DCFApixels.DragonECS #region WhereToGroup 6 public static EcsReadonlyGroup WhereToGroup(this TCollection entities, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() + where A5 : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4, out a5); } public static EcsReadonlyGroup WhereToGroup(this EcsReadonlyGroup group, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() + where A5 : EcsAspect, new() { return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4, out a5); } public static EcsReadonlyGroup WhereToGroup(this EcsSpan span, 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 + where A0 : EcsAspect, new() + where A1 : EcsAspect, new() + where A2 : EcsAspect, new() + where A3 : EcsAspect, new() + where A4 : EcsAspect, new() + where A5 : EcsAspect, new() { var result = span.WhereToGroup(out CombinedAspect combined); (a0, a1, a2, a3, a4, a5) = combined; diff --git a/src/EcsAspect.cs b/src/EcsAspect.cs index f285ee4..656f8b8 100644 --- a/src/EcsAspect.cs +++ b/src/EcsAspect.cs @@ -2,7 +2,6 @@ using DCFApixels.DragonECS.PoolsCore; using System; using System.Collections.Generic; -using System.Reflection; using System.Runtime.CompilerServices; namespace DCFApixels.DragonECS @@ -23,7 +22,18 @@ namespace DCFApixels.DragonECS } return _constructorBuildersStack; } - + protected static Builder CurrentBuilder + { + get + { + var buildersStack = GetBuildersStack(); + if (buildersStack.Count <= 0) + { + Throw.Aspect_CanOnlyBeUsedDuringInitialization(nameof(CurrentBuilder)); + } + return buildersStack.Peek(); + } + } protected static IncludeMarker Inc { get @@ -94,6 +104,7 @@ namespace DCFApixels.DragonECS { private EcsWorld _world; private EcsMask.Builder _maskBuilder; + public IncludeMarker Inc { get { return new IncludeMarker(this); } @@ -114,28 +125,16 @@ namespace DCFApixels.DragonECS _world = world; _maskBuilder = EcsMask.New(world); } - internal static unsafe TAspect New(EcsWorld world) where TAspect : EcsAspect + internal static unsafe TAspect New(EcsWorld world) where TAspect : EcsAspect, new() { Builder builder = new Builder(world); Type aspectType = typeof(TAspect); EcsAspect newAspect; - //TODO добавить оповещение что инициализация через конструктор не работает -#if !REFLECTION_DISABLED - ConstructorInfo constructorInfo = aspectType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(Builder) }, null); var buildersStack = GetBuildersStack(); buildersStack.Push(builder); - if (constructorInfo != null) - { - newAspect = (EcsAspect)constructorInfo.Invoke(new object[] { builder }); - } - else -#endif - { -#pragma warning disable IL2091 // Target generic argument does not satisfy 'DynamicallyAccessedMembersAttribute' in target method or type. The generic parameter of the source method or type does not have matching annotations. - newAspect = Activator.CreateInstance(); -#pragma warning restore IL2091 - } + + newAspect = new TAspect(); newAspect.Init(builder); buildersStack.Pop(); newAspect._source = world; @@ -193,13 +192,13 @@ namespace DCFApixels.DragonECS { _maskBuilder.Exclude(type); } - public TOtherAspect Combine(int order = 0) where TOtherAspect : EcsAspect + public TOtherAspect Combine(int order = 0) where TOtherAspect : EcsAspect, new() { var result = _world.GetAspect(); _maskBuilder.Combine(result.Mask); return result; } - public TOtherAspect Except(int order = 0) where TOtherAspect : EcsAspect + public TOtherAspect Except(int order = 0) where TOtherAspect : EcsAspect, new() { var result = _world.GetAspect(); _maskBuilder.Except(result.Mask); diff --git a/src/EcsWorld.cache.cs b/src/EcsWorld.cache.cs index d6cd397..57ad1ab 100644 --- a/src/EcsWorld.cache.cs +++ b/src/EcsWorld.cache.cs @@ -19,7 +19,7 @@ namespace DCFApixels.DragonECS } } internal readonly struct AspectCache : IEcsWorldComponent> - where T : EcsAspect + where T : EcsAspect, new() { public readonly T instance; public AspectCache(T instance) => this.instance = instance; diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index c6c48f4..8e63f57 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -211,7 +211,7 @@ namespace DCFApixels.DragonECS [UnityEngine.Scripting.Preserve] #endif [MethodImpl(MethodImplOptions.AggressiveInlining)] - public TAspect GetAspect() where TAspect : EcsAspect + public TAspect GetAspect() where TAspect : EcsAspect, new() { return Get>().instance; } diff --git a/src/Executors/EcsWhereExecutor.cs b/src/Executors/EcsWhereExecutor.cs index 38a981b..47d43ab 100644 --- a/src/Executors/EcsWhereExecutor.cs +++ b/src/Executors/EcsWhereExecutor.cs @@ -7,7 +7,7 @@ namespace DCFApixels.DragonECS [Il2CppSetOption(Option.NullChecks, false)] [Il2CppSetOption(Option.ArrayBoundsChecks, false)] #endif - public sealed class EcsWhereExecutor : EcsQueryExecutor where TAspect : EcsAspect + public sealed class EcsWhereExecutor : EcsQueryExecutor where TAspect : EcsAspect, new() { private TAspect _aspect; private int[] _filteredEntities; diff --git a/src/Executors/EcsWhereToGroupExecutor.cs b/src/Executors/EcsWhereToGroupExecutor.cs index 196face..f275cfe 100644 --- a/src/Executors/EcsWhereToGroupExecutor.cs +++ b/src/Executors/EcsWhereToGroupExecutor.cs @@ -7,7 +7,7 @@ namespace DCFApixels.DragonECS [Il2CppSetOption(Option.NullChecks, false)] [Il2CppSetOption(Option.ArrayBoundsChecks, false)] #endif - public sealed class EcsWhereToGroupExecutor : EcsQueryExecutor where TAspect : EcsAspect + public sealed class EcsWhereToGroupExecutor : EcsQueryExecutor where TAspect : EcsAspect, new() { private TAspect _aspect; private EcsGroup _filteredGroup; diff --git a/src/Executors/Queries.cs b/src/Executors/Queries.cs index afa4efb..9e3f9ee 100644 --- a/src/Executors/Queries.cs +++ b/src/Executors/Queries.cs @@ -8,18 +8,18 @@ { #region Where public static EcsSpan Where(this TCollection entities, out TAspect aspect) - where TAspect : EcsAspect + where TAspect : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().Where(out aspect); } public static EcsSpan Where(this EcsReadonlyGroup group, out TAspect aspect) - where TAspect : EcsAspect + where TAspect : EcsAspect, new() { return group.ToSpan().Where(out aspect); } public static EcsSpan Where(this EcsSpan span, out TAspect aspect) - where TAspect : EcsAspect + where TAspect : EcsAspect, new() { EcsWorld world = span.World; if (world.IsEnableReleaseDelEntBuffer) @@ -34,18 +34,18 @@ #region WhereToGroup public static EcsReadonlyGroup WhereToGroup(this TCollection entities, out TAspect aspect) - where TAspect : EcsAspect + where TAspect : EcsAspect, new() where TCollection : IEntityStorage { return entities.ToSpan().WhereToGroup(out aspect); } public static EcsReadonlyGroup WhereToGroup(this EcsReadonlyGroup group, out TAspect aspect) - where TAspect : EcsAspect + where TAspect : EcsAspect, new() { return group.ToSpan().WhereToGroup(out aspect); } public static EcsReadonlyGroup WhereToGroup(this EcsSpan span, out TAspect aspect) - where TAspect : EcsAspect + where TAspect : EcsAspect, new() { EcsWorld world = span.World; if (world.IsEnableReleaseDelEntBuffer)