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 readonly TPool pool;
public SingleAspect(Builder b)
{
pool = b.IncludePool<TPool>();
}
public readonly TPool pool = CurrentBuilder.IncludePool<TPool>();
}
public sealed class CombinedAspect<A0, A1> : 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<A0>(0);
a1 = b.Combine<A1>(1);
}
public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public void Deconstruct(out A0 a0, out A1 a1)
{
a0 = this.a0;
@ -31,19 +22,13 @@ namespace DCFApixels.DragonECS
}
public sealed class CombinedAspect<A0, A1, A2> : 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<A0>(0);
a1 = b.Combine<A1>(1);
a2 = b.Combine<A2>(2);
}
public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public readonly A2 a2 = CurrentBuilder.Combine<A2>();
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<A0, A1, A2, A3> : 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<A0>(0);
a1 = b.Combine<A1>(1);
a2 = b.Combine<A2>(2);
a3 = b.Combine<A3>(3);
}
public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public readonly A2 a2 = CurrentBuilder.Combine<A2>();
public readonly A3 a3 = CurrentBuilder.Combine<A3>();
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<A0, A1, A2, A3, A4> : 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<A0>(0);
a1 = b.Combine<A1>(1);
a2 = b.Combine<A2>(2);
a3 = b.Combine<A3>(3);
a4 = b.Combine<A4>(4);
}
public readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public readonly A2 a2 = CurrentBuilder.Combine<A2>();
public readonly A3 a3 = CurrentBuilder.Combine<A3>();
public readonly A4 a4 = CurrentBuilder.Combine<A4>();
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<A0, A1, A2, A3, A4, A5> : 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<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 readonly A0 a0 = CurrentBuilder.Combine<A0>();
public readonly A1 a1 = CurrentBuilder.Combine<A1>();
public readonly A2 a2 = CurrentBuilder.Combine<A2>();
public readonly A3 a3 = CurrentBuilder.Combine<A3>();
public readonly A4 a4 = CurrentBuilder.Combine<A4>();
public readonly A5 a5 = CurrentBuilder.Combine<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;
@ -146,21 +107,21 @@ namespace DCFApixels.DragonECS
{
#region Where 2
public static EcsSpan Where<TCollection, A0, A1>(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<A0, A1>(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<A0, A1>(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<A0, A1> combined);
(a0, a1) = combined;
@ -170,24 +131,24 @@ namespace DCFApixels.DragonECS
#region Where 3
public static EcsSpan Where<TCollection, A0, A1, A2>(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<A0, A1, A2>(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<A0, A1, A2>(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<A0, A1, A2> combined);
(a0, a1, a2) = combined;
@ -197,27 +158,27 @@ namespace DCFApixels.DragonECS
#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)
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<A0, A1, A2, A3>(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<A0, A1, A2, A3>(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<A0, A1, A2, A3> combined);
(a0, a1, a2, a3) = combined;
@ -227,30 +188,30 @@ namespace DCFApixels.DragonECS
#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)
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<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 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<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 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<A0, A1, A2, A3, A4> combined);
(a0, a1, a2, a3, a4) = combined;
@ -260,33 +221,33 @@ namespace DCFApixels.DragonECS
#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)
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<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 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<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 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<A0, A1, A2, A3, A4, A5> combined);
(a0, a1, a2, a3, a4, a5) = combined;
@ -296,21 +257,21 @@ namespace DCFApixels.DragonECS
#region WhereToGroup 2
public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1>(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<A0, A1>(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<A0, A1>(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<A0, A1> combined);
(a0, a1) = combined;
@ -320,24 +281,24 @@ namespace DCFApixels.DragonECS
#region WhereToGroup 3
public static EcsReadonlyGroup WhereToGroup<TCollection, A0, A1, A2>(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<A0, A1, A2>(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<A0, A1, A2>(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<A0, A1, A2> combined);
(a0, a1, a2) = combined;
@ -347,27 +308,27 @@ namespace DCFApixels.DragonECS
#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)
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<A0, A1, A2, A3>(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<A0, A1, A2, A3>(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<A0, A1, A2, A3> combined);
(a0, a1, a2, a3) = combined;
@ -377,30 +338,30 @@ namespace DCFApixels.DragonECS
#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)
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<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 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<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 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<A0, A1, A2, A3, A4> combined);
(a0, a1, a2, a3, a4) = combined;
@ -410,33 +371,33 @@ namespace DCFApixels.DragonECS
#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)
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<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 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<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 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<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 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,7 +125,7 @@ namespace DCFApixels.DragonECS
_world = 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);
Type aspectType = typeof(TAspect);
@ -123,20 +134,7 @@ namespace DCFApixels.DragonECS
var buildersStack = GetBuildersStack();
buildersStack.Push(builder);
//TODO добавить оповещение что инициализация через конструктор не работает
#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 = new TAspect();
newAspect.Init(builder);
buildersStack.Pop();
newAspect._source = world;
@ -194,13 +192,13 @@ namespace DCFApixels.DragonECS
{
_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>();
_maskBuilder.Combine(result.Mask);
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>();
_maskBuilder.Except(result.Mask);

View File

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

View File

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

View File

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

View File

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

View File

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