cleanup reflection

This commit is contained in:
Mikhail 2024-07-05 22:13:17 +08:00
parent dc51ae758b
commit dbdc34f3cf
7 changed files with 188 additions and 229 deletions

View File

@ -6,23 +6,14 @@ namespace DCFApixels.DragonECS
public sealed class SingleAspect<TPool> : EcsAspect where TPool : IEcsPoolImplementation, new() public sealed class SingleAspect<TPool> : EcsAspect where TPool : IEcsPoolImplementation, new()
{ {
public readonly TPool pool; public readonly TPool pool = CurrentBuilder.IncludePool<TPool>();
public SingleAspect(Builder b)
{
pool = b.IncludePool<TPool>();
}
} }
public sealed class CombinedAspect<A0, A1> : EcsAspect public sealed class CombinedAspect<A0, A1> : EcsAspect
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
{ {
public readonly A0 a0; public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1; public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public CombinedAspect(Builder b)
{
a0 = b.Combine<A0>(0);
a1 = b.Combine<A1>(1);
}
public void Deconstruct(out A0 a0, out A1 a1) public void Deconstruct(out A0 a0, out A1 a1)
{ {
a0 = this.a0; a0 = this.a0;
@ -31,19 +22,13 @@ namespace DCFApixels.DragonECS
} }
public sealed class CombinedAspect<A0, A1, A2> : EcsAspect public sealed class CombinedAspect<A0, A1, A2> : EcsAspect
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
{ {
public readonly A0 a0; public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1; public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public readonly A2 a2; public readonly A2 a2 = CurrentBuilder.Combine<A2>();
public CombinedAspect(Builder b)
{
a0 = b.Combine<A0>(0);
a1 = b.Combine<A1>(1);
a2 = b.Combine<A2>(2);
}
public void Deconstruct(out A0 a0, out A1 a1, out A2 a2) public void Deconstruct(out A0 a0, out A1 a1, out A2 a2)
{ {
a0 = this.a0; a0 = this.a0;
@ -53,22 +38,15 @@ namespace DCFApixels.DragonECS
} }
public sealed class CombinedAspect<A0, A1, A2, A3> : EcsAspect public sealed class CombinedAspect<A0, A1, A2, A3> : EcsAspect
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
{ {
public readonly A0 a0; public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1; public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public readonly A2 a2; public readonly A2 a2 = CurrentBuilder.Combine<A2>();
public readonly A3 a3; public readonly A3 a3 = CurrentBuilder.Combine<A3>();
public CombinedAspect(Builder b)
{
a0 = b.Combine<A0>(0);
a1 = b.Combine<A1>(1);
a2 = b.Combine<A2>(2);
a3 = b.Combine<A3>(3);
}
public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3) public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3)
{ {
a0 = this.a0; a0 = this.a0;
@ -79,25 +57,17 @@ namespace DCFApixels.DragonECS
} }
public sealed class CombinedAspect<A0, A1, A2, A3, A4> : EcsAspect public sealed class CombinedAspect<A0, A1, A2, A3, A4> : EcsAspect
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
{ {
public readonly A0 a0; public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1; public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public readonly A2 a2; public readonly A2 a2 = CurrentBuilder.Combine<A2>();
public readonly A3 a3; public readonly A3 a3 = CurrentBuilder.Combine<A3>();
public readonly A4 a4; public readonly A4 a4 = CurrentBuilder.Combine<A4>();
public CombinedAspect(Builder b)
{
a0 = b.Combine<A0>(0);
a1 = b.Combine<A1>(1);
a2 = b.Combine<A2>(2);
a3 = b.Combine<A3>(3);
a4 = b.Combine<A4>(4);
}
public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4)
{ {
a0 = this.a0; a0 = this.a0;
@ -109,28 +79,19 @@ namespace DCFApixels.DragonECS
} }
public sealed class CombinedAspect<A0, A1, A2, A3, A4, A5> : EcsAspect public sealed class CombinedAspect<A0, A1, A2, A3, A4, A5> : EcsAspect
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where A5 : EcsAspect where A5 : EcsAspect, new()
{ {
public readonly A0 a0; public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1; public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public readonly A2 a2; public readonly A2 a2 = CurrentBuilder.Combine<A2>();
public readonly A3 a3; public readonly A3 a3 = CurrentBuilder.Combine<A3>();
public readonly A4 a4; public readonly A4 a4 = CurrentBuilder.Combine<A4>();
public readonly A5 a5; public readonly A5 a5 = CurrentBuilder.Combine<A5>();
public CombinedAspect(Builder b)
{
a0 = b.Combine<A0>(0);
a1 = b.Combine<A1>(1);
a2 = b.Combine<A2>(2);
a3 = b.Combine<A3>(3);
a4 = b.Combine<A4>(4);
a5 = b.Combine<A5>(5);
}
public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) public void Deconstruct(out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5)
{ {
a0 = this.a0; a0 = this.a0;
@ -146,21 +107,21 @@ namespace DCFApixels.DragonECS
{ {
#region Where 2 #region Where 2
public static EcsSpan Where<TCollection, A0, A1>(this TCollection entities, out A0 a0, out A1 a1) public static EcsSpan Where<TCollection, A0, A1>(this TCollection entities, out A0 a0, out A1 a1)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().Where(out a0, out a1); return entities.ToSpan().Where(out a0, out a1);
} }
public static EcsSpan Where<A0, A1>(this EcsReadonlyGroup group, out A0 a0, out A1 a1) public static EcsSpan Where<A0, A1>(this EcsReadonlyGroup group, out A0 a0, out A1 a1)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
{ {
return group.ToSpan().Where(out a0, out a1); return group.ToSpan().Where(out a0, out a1);
} }
public static EcsSpan Where<A0, A1>(this EcsSpan span, out A0 a0, out A1 a1) public static EcsSpan Where<A0, A1>(this EcsSpan span, out A0 a0, out A1 a1)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
{ {
var result = span.Where(out CombinedAspect<A0, A1> combined); var result = span.Where(out CombinedAspect<A0, A1> combined);
(a0, a1) = combined; (a0, a1) = combined;
@ -170,24 +131,24 @@ namespace DCFApixels.DragonECS
#region Where 3 #region Where 3
public static EcsSpan Where<TCollection, A0, A1, A2>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2) public static EcsSpan Where<TCollection, A0, A1, A2>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().Where(out a0, out a1, out a2); return entities.ToSpan().Where(out a0, out a1, out a2);
} }
public static EcsSpan Where<A0, A1, A2>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2) public static EcsSpan Where<A0, A1, A2>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
{ {
return group.ToSpan().Where(out a0, out a1, out a2); return group.ToSpan().Where(out a0, out a1, out a2);
} }
public static EcsSpan Where<A0, A1, A2>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2) public static EcsSpan Where<A0, A1, A2>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
{ {
var result = span.Where(out CombinedAspect<A0, A1, A2> combined); var result = span.Where(out CombinedAspect<A0, A1, A2> combined);
(a0, a1, a2) = combined; (a0, a1, a2) = combined;
@ -197,27 +158,27 @@ namespace DCFApixels.DragonECS
#region Where 4 #region Where 4
public static EcsSpan Where<TCollection, A0, A1, A2, A3>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3) public static EcsSpan Where<TCollection, A0, A1, A2, A3>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().Where(out a0, out a1, out a2, out a3); return entities.ToSpan().Where(out a0, out a1, out a2, out a3);
} }
public static EcsSpan Where<A0, A1, A2, A3>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3) public static EcsSpan Where<A0, A1, A2, A3>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
{ {
return group.ToSpan().Where(out a0, out a1, out a2, out a3); return group.ToSpan().Where(out a0, out a1, out a2, out a3);
} }
public static EcsSpan Where<A0, A1, A2, A3>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3) public static EcsSpan Where<A0, A1, A2, A3>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
{ {
var result = span.Where(out CombinedAspect<A0, A1, A2, A3> combined); var result = span.Where(out CombinedAspect<A0, A1, A2, A3> combined);
(a0, a1, a2, a3) = combined; (a0, a1, a2, a3) = combined;
@ -227,30 +188,30 @@ namespace DCFApixels.DragonECS
#region Where 5 #region Where 5
public static EcsSpan Where<TCollection, A0, A1, A2, A3, A4>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) public static EcsSpan Where<TCollection, A0, A1, A2, A3, A4>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().Where(out a0, out a1, out a2, out a3, out a4); return entities.ToSpan().Where(out a0, out a1, out a2, out a3, out a4);
} }
public static EcsSpan Where<A0, A1, A2, A3, A4>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) public static EcsSpan Where<A0, A1, A2, A3, A4>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
{ {
return group.ToSpan().Where(out a0, out a1, out a2, out a3, out a4); return group.ToSpan().Where(out a0, out a1, out a2, out a3, out a4);
} }
public static EcsSpan Where<A0, A1, A2, A3, A4>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) public static EcsSpan Where<A0, A1, A2, A3, A4>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
{ {
var result = span.Where(out CombinedAspect<A0, A1, A2, A3, A4> combined); var result = span.Where(out CombinedAspect<A0, A1, A2, A3, A4> combined);
(a0, a1, a2, a3, a4) = combined; (a0, a1, a2, a3, a4) = combined;
@ -260,33 +221,33 @@ namespace DCFApixels.DragonECS
#region Where 6 #region Where 6
public static EcsSpan Where<TCollection, A0, A1, A2, A3, A4, A5>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) public static EcsSpan Where<TCollection, A0, A1, A2, A3, A4, A5>(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 A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where A5 : EcsAspect where A5 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().Where(out a0, out a1, out a2, out a3, out a4, out a5); return entities.ToSpan().Where(out a0, out a1, out a2, out a3, out a4, out a5);
} }
public static EcsSpan Where<A0, A1, A2, A3, A4, A5>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) public static EcsSpan Where<A0, A1, A2, A3, A4, A5>(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 A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where A5 : EcsAspect where A5 : EcsAspect, new()
{ {
return group.ToSpan().Where(out a0, out a1, out a2, out a3, out a4, out a5); return group.ToSpan().Where(out a0, out a1, out a2, out a3, out a4, out a5);
} }
public static EcsSpan Where<A0, A1, A2, A3, A4, A5>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) public static EcsSpan Where<A0, A1, A2, A3, A4, A5>(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 A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where A5 : EcsAspect where A5 : EcsAspect, new()
{ {
var result = span.Where(out CombinedAspect<A0, A1, A2, A3, A4, A5> combined); var result = span.Where(out CombinedAspect<A0, A1, A2, A3, A4, A5> combined);
(a0, a1, a2, a3, a4, a5) = combined; (a0, a1, a2, a3, a4, a5) = combined;
@ -296,21 +257,21 @@ namespace DCFApixels.DragonECS
#region WhereToGroup 2 #region WhereToGroup 2
public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1>(this TCollection entities, out A0 a0, out A1 a1) public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1>(this TCollection entities, out A0 a0, out A1 a1)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().WhereToGroup(out a0, out a1); return entities.ToSpan().WhereToGroup(out a0, out a1);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1>(this EcsReadonlyGroup group, out A0 a0, out A1 a1) public static EcsReadonlyGroup WhereToGroup<A0, A1>(this EcsReadonlyGroup group, out A0 a0, out A1 a1)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
{ {
return group.ToSpan().WhereToGroup(out a0, out a1); return group.ToSpan().WhereToGroup(out a0, out a1);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1>(this EcsSpan span, out A0 a0, out A1 a1) public static EcsReadonlyGroup WhereToGroup<A0, A1>(this EcsSpan span, out A0 a0, out A1 a1)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
{ {
var result = span.WhereToGroup(out CombinedAspect<A0, A1> combined); var result = span.WhereToGroup(out CombinedAspect<A0, A1> combined);
(a0, a1) = combined; (a0, a1) = combined;
@ -320,24 +281,24 @@ namespace DCFApixels.DragonECS
#region WhereToGroup 3 #region WhereToGroup 3
public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2) public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().WhereToGroup(out a0, out a1, out a2); return entities.ToSpan().WhereToGroup(out a0, out a1, out a2);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1, A2>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2) public static EcsReadonlyGroup WhereToGroup<A0, A1, A2>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
{ {
return group.ToSpan().WhereToGroup(out a0, out a1, out a2); return group.ToSpan().WhereToGroup(out a0, out a1, out a2);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1, A2>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2) public static EcsReadonlyGroup WhereToGroup<A0, A1, A2>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
{ {
var result = span.WhereToGroup(out CombinedAspect<A0, A1, A2> combined); var result = span.WhereToGroup(out CombinedAspect<A0, A1, A2> combined);
(a0, a1, a2) = combined; (a0, a1, a2) = combined;
@ -347,27 +308,27 @@ namespace DCFApixels.DragonECS
#region WhereToGroup 4 #region WhereToGroup 4
public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2, A3>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3) public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2, A3>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3); return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3) public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
{ {
return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3); return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3) public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
{ {
var result = span.WhereToGroup(out CombinedAspect<A0, A1, A2, A3> combined); var result = span.WhereToGroup(out CombinedAspect<A0, A1, A2, A3> combined);
(a0, a1, a2, a3) = combined; (a0, a1, a2, a3) = combined;
@ -377,30 +338,30 @@ namespace DCFApixels.DragonECS
#region WhereToGroup 5 #region WhereToGroup 5
public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2, A3, A4>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2, A3, A4>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4); return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3, A4>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3, A4>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
{ {
return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4); return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3, A4>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4) public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3, A4>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4)
where A0 : EcsAspect where A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
{ {
var result = span.WhereToGroup(out CombinedAspect<A0, A1, A2, A3, A4> combined); var result = span.WhereToGroup(out CombinedAspect<A0, A1, A2, A3, A4> combined);
(a0, a1, a2, a3, a4) = combined; (a0, a1, a2, a3, a4) = combined;
@ -410,33 +371,33 @@ namespace DCFApixels.DragonECS
#region WhereToGroup 6 #region WhereToGroup 6
public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2, A3, A4, A5>(this TCollection entities, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2, A3, A4, A5>(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 A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where A5 : EcsAspect where A5 : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4, out a5); return entities.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4, out a5);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3, A4, A5>(this EcsReadonlyGroup group, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3, A4, A5>(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 A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where A5 : EcsAspect where A5 : EcsAspect, new()
{ {
return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4, out a5); return group.ToSpan().WhereToGroup(out a0, out a1, out a2, out a3, out a4, out a5);
} }
public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3, A4, A5>(this EcsSpan span, out A0 a0, out A1 a1, out A2 a2, out A3 a3, out A4 a4, out A5 a5) public static EcsReadonlyGroup WhereToGroup<A0, A1, A2, A3, A4, A5>(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 A0 : EcsAspect, new()
where A1 : EcsAspect where A1 : EcsAspect, new()
where A2 : EcsAspect where A2 : EcsAspect, new()
where A3 : EcsAspect where A3 : EcsAspect, new()
where A4 : EcsAspect where A4 : EcsAspect, new()
where A5 : EcsAspect where A5 : EcsAspect, new()
{ {
var result = span.WhereToGroup(out CombinedAspect<A0, A1, A2, A3, A4, A5> combined); var result = span.WhereToGroup(out CombinedAspect<A0, A1, A2, A3, A4, A5> combined);
(a0, a1, a2, a3, a4, a5) = combined; (a0, a1, a2, a3, a4, a5) = combined;

View File

@ -2,7 +2,6 @@
using DCFApixels.DragonECS.PoolsCore; using DCFApixels.DragonECS.PoolsCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
namespace DCFApixels.DragonECS namespace DCFApixels.DragonECS
@ -23,7 +22,18 @@ namespace DCFApixels.DragonECS
} }
return _constructorBuildersStack; 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 protected static IncludeMarker Inc
{ {
get get
@ -94,6 +104,7 @@ namespace DCFApixels.DragonECS
{ {
private EcsWorld _world; private EcsWorld _world;
private EcsMask.Builder _maskBuilder; private EcsMask.Builder _maskBuilder;
public IncludeMarker Inc public IncludeMarker Inc
{ {
get { return new IncludeMarker(this); } get { return new IncludeMarker(this); }
@ -114,7 +125,7 @@ namespace DCFApixels.DragonECS
_world = world; _world = world;
_maskBuilder = EcsMask.New(world); _maskBuilder = EcsMask.New(world);
} }
internal static unsafe TAspect New<TAspect>(EcsWorld world) where TAspect : EcsAspect internal static unsafe TAspect New<TAspect>(EcsWorld world) where TAspect : EcsAspect, new()
{ {
Builder builder = new Builder(world); Builder builder = new Builder(world);
Type aspectType = typeof(TAspect); Type aspectType = typeof(TAspect);
@ -123,20 +134,7 @@ namespace DCFApixels.DragonECS
var buildersStack = GetBuildersStack(); var buildersStack = GetBuildersStack();
buildersStack.Push(builder); buildersStack.Push(builder);
//TODO добавить оповещение что инициализация через конструктор не работает newAspect = new TAspect();
#if !REFLECTION_DISABLED
ConstructorInfo constructorInfo = aspectType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(Builder) }, null);
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<TAspect>();
#pragma warning restore IL2091
}
newAspect.Init(builder); newAspect.Init(builder);
buildersStack.Pop(); buildersStack.Pop();
newAspect._source = world; newAspect._source = world;
@ -194,13 +192,13 @@ namespace DCFApixels.DragonECS
{ {
_maskBuilder.Exclude(type); _maskBuilder.Exclude(type);
} }
public TOtherAspect Combine<TOtherAspect>(int order = 0) where TOtherAspect : EcsAspect public TOtherAspect Combine<TOtherAspect>(int order = 0) where TOtherAspect : EcsAspect, new()
{ {
var result = _world.GetAspect<TOtherAspect>(); var result = _world.GetAspect<TOtherAspect>();
_maskBuilder.Combine(result.Mask); _maskBuilder.Combine(result.Mask);
return result; return result;
} }
public TOtherAspect Except<TOtherAspect>(int order = 0) where TOtherAspect : EcsAspect public TOtherAspect Except<TOtherAspect>(int order = 0) where TOtherAspect : EcsAspect, new()
{ {
var result = _world.GetAspect<TOtherAspect>(); var result = _world.GetAspect<TOtherAspect>();
_maskBuilder.Except(result.Mask); _maskBuilder.Except(result.Mask);

View File

@ -19,7 +19,7 @@ namespace DCFApixels.DragonECS
} }
} }
internal readonly struct AspectCache<T> : IEcsWorldComponent<AspectCache<T>> internal readonly struct AspectCache<T> : IEcsWorldComponent<AspectCache<T>>
where T : EcsAspect where T : EcsAspect, new()
{ {
public readonly T instance; public readonly T instance;
public AspectCache(T instance) => this.instance = instance; public AspectCache(T instance) => this.instance = instance;

View File

@ -211,7 +211,7 @@ namespace DCFApixels.DragonECS
[UnityEngine.Scripting.Preserve] [UnityEngine.Scripting.Preserve]
#endif #endif
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TAspect GetAspect<TAspect>() where TAspect : EcsAspect public TAspect GetAspect<TAspect>() where TAspect : EcsAspect, new()
{ {
return Get<AspectCache<TAspect>>().instance; return Get<AspectCache<TAspect>>().instance;
} }

View File

@ -7,7 +7,7 @@ namespace DCFApixels.DragonECS
[Il2CppSetOption(Option.NullChecks, false)] [Il2CppSetOption(Option.NullChecks, false)]
[Il2CppSetOption(Option.ArrayBoundsChecks, false)] [Il2CppSetOption(Option.ArrayBoundsChecks, false)]
#endif #endif
public sealed class EcsWhereExecutor<TAspect> : EcsQueryExecutor where TAspect : EcsAspect public sealed class EcsWhereExecutor<TAspect> : EcsQueryExecutor where TAspect : EcsAspect, new()
{ {
private TAspect _aspect; private TAspect _aspect;
private int[] _filteredEntities; private int[] _filteredEntities;

View File

@ -7,7 +7,7 @@ namespace DCFApixels.DragonECS
[Il2CppSetOption(Option.NullChecks, false)] [Il2CppSetOption(Option.NullChecks, false)]
[Il2CppSetOption(Option.ArrayBoundsChecks, false)] [Il2CppSetOption(Option.ArrayBoundsChecks, false)]
#endif #endif
public sealed class EcsWhereToGroupExecutor<TAspect> : EcsQueryExecutor where TAspect : EcsAspect public sealed class EcsWhereToGroupExecutor<TAspect> : EcsQueryExecutor where TAspect : EcsAspect, new()
{ {
private TAspect _aspect; private TAspect _aspect;
private EcsGroup _filteredGroup; private EcsGroup _filteredGroup;

View File

@ -8,18 +8,18 @@
{ {
#region Where #region Where
public static EcsSpan Where<TCollection, TAspect>(this TCollection entities, out TAspect aspect) public static EcsSpan Where<TCollection, TAspect>(this TCollection entities, out TAspect aspect)
where TAspect : EcsAspect where TAspect : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().Where(out aspect); return entities.ToSpan().Where(out aspect);
} }
public static EcsSpan Where<TAspect>(this EcsReadonlyGroup group, out TAspect aspect) public static EcsSpan Where<TAspect>(this EcsReadonlyGroup group, out TAspect aspect)
where TAspect : EcsAspect where TAspect : EcsAspect, new()
{ {
return group.ToSpan().Where(out aspect); return group.ToSpan().Where(out aspect);
} }
public static EcsSpan Where<TAspect>(this EcsSpan span, out TAspect aspect) public static EcsSpan Where<TAspect>(this EcsSpan span, out TAspect aspect)
where TAspect : EcsAspect where TAspect : EcsAspect, new()
{ {
EcsWorld world = span.World; EcsWorld world = span.World;
if (world.IsEnableReleaseDelEntBuffer) if (world.IsEnableReleaseDelEntBuffer)
@ -34,18 +34,18 @@
#region WhereToGroup #region WhereToGroup
public static EcsReadonlyGroup WhereToGroup<TCollection, TAspect>(this TCollection entities, out TAspect aspect) public static EcsReadonlyGroup WhereToGroup<TCollection, TAspect>(this TCollection entities, out TAspect aspect)
where TAspect : EcsAspect where TAspect : EcsAspect, new()
where TCollection : IEntityStorage where TCollection : IEntityStorage
{ {
return entities.ToSpan().WhereToGroup(out aspect); return entities.ToSpan().WhereToGroup(out aspect);
} }
public static EcsReadonlyGroup WhereToGroup<TAspect>(this EcsReadonlyGroup group, out TAspect aspect) public static EcsReadonlyGroup WhereToGroup<TAspect>(this EcsReadonlyGroup group, out TAspect aspect)
where TAspect : EcsAspect where TAspect : EcsAspect, new()
{ {
return group.ToSpan().WhereToGroup(out aspect); return group.ToSpan().WhereToGroup(out aspect);
} }
public static EcsReadonlyGroup WhereToGroup<TAspect>(this EcsSpan span, out TAspect aspect) public static EcsReadonlyGroup WhereToGroup<TAspect>(this EcsSpan span, out TAspect aspect)
where TAspect : EcsAspect where TAspect : EcsAspect, new()
{ {
EcsWorld world = span.World; EcsWorld world = span.World;
if (world.IsEnableReleaseDelEntBuffer) if (world.IsEnableReleaseDelEntBuffer)