From ba8c4d0600b22ca70a07c448c845e12a81be4093 Mon Sep 17 00:00:00 2001
From: Mikhail <99481254+DCFApixels@users.noreply.github.com>
Date: Thu, 27 Jun 2024 00:26:05 +0800
Subject: [PATCH 1/4] fix REFLECTION_DISABLED
---
src/EcsAspect.cs | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/EcsAspect.cs b/src/EcsAspect.cs
index f285ee4..fe19f7a 100644
--- a/src/EcsAspect.cs
+++ b/src/EcsAspect.cs
@@ -119,12 +119,13 @@ namespace DCFApixels.DragonECS
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);
+
+ //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 });
From dc51ae758bd21b6d913f7034261dd0dea0e631ed Mon Sep 17 00:00:00 2001
From: Mikhail <99481254+DCFApixels@users.noreply.github.com>
Date: Thu, 27 Jun 2024 00:27:59 +0800
Subject: [PATCH 2/4] up version to 0.8.38
---
DragonECS.csproj | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/DragonECS.csproj b/DragonECS.csproj
index cb1670d..c2436c0 100644
--- a/DragonECS.csproj
+++ b/DragonECS.csproj
@@ -10,7 +10,7 @@
DCFApixels.DragonECS
DragonECS
- 0.8.37
+ 0.8.38
DCFApixels
ECS Framework for Game Engines with C# and .Net Platform
DCFApixels
diff --git a/package.json b/package.json
index 50d14d4..fad28fa 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.38",
"repository": {
"type": "git",
"url": "https://github.com/DCFApixels/DragonECS.git"
From dbdc34f3cf44e3e3b0c0d3737d9ef48fd30c4faa Mon Sep 17 00:00:00 2001
From: Mikhail <99481254+DCFApixels@users.noreply.github.com>
Date: Fri, 5 Jul 2024 22:13:17 +0800
Subject: [PATCH 3/4] cleanup reflection
---
src/Builtin/Aspects.cs | 361 ++++++++++-------------
src/EcsAspect.cs | 36 ++-
src/EcsWorld.cache.cs | 2 +-
src/EcsWorld.cs | 2 +-
src/Executors/EcsWhereExecutor.cs | 2 +-
src/Executors/EcsWhereToGroupExecutor.cs | 2 +-
src/Executors/Queries.cs | 12 +-
7 files changed, 188 insertions(+), 229 deletions(-)
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 fe19f7a..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,7 +125,7 @@ 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);
@@ -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();
-#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(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)
From 753250025f8a35ec7ea26959dd8ebad446df86c9 Mon Sep 17 00:00:00 2001
From: Mikhail <99481254+DCFApixels@users.noreply.github.com>
Date: Sun, 7 Jul 2024 18:41:11 +0800
Subject: [PATCH 4/4] up version 0.8.39
---
DragonECS.csproj | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/DragonECS.csproj b/DragonECS.csproj
index c2436c0..129c906 100644
--- a/DragonECS.csproj
+++ b/DragonECS.csproj
@@ -10,7 +10,7 @@
DCFApixels.DragonECS
DragonECS
- 0.8.38
+ 0.8.39
DCFApixels
ECS Framework for Game Engines with C# and .Net Platform
DCFApixels
diff --git a/package.json b/package.json
index fad28fa..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.38",
+ "version": "0.8.39",
"repository": {
"type": "git",
"url": "https://github.com/DCFApixels/DragonECS.git"