diff --git a/Arch.SourceGenerator/Fundamentals/StructuralChangesExtensions.cs b/Arch.SourceGenerator/Fundamentals/StructuralChangesExtensions.cs index 4cbcb638..725ee8af 100644 --- a/Arch.SourceGenerator/Fundamentals/StructuralChangesExtensions.cs +++ b/Arch.SourceGenerator/Fundamentals/StructuralChangesExtensions.cs @@ -90,6 +90,56 @@ public static StringBuilder AppendWorldRemove(this StringBuilder sb, int amount) Move(in entity, oldArchetype, newArchetype); }} +"; + + return sb.AppendLine(template); + } + + public static StringBuilder AppendEntityAdds(this StringBuilder sb, int amount) + { + for (var index = 1; index < amount; index++) + sb.AppendEntityAdd(index); + + return sb; + } + + public static StringBuilder AppendEntityAdd(this StringBuilder sb, int amount) + { + + var generics = new StringBuilder().GenericWithoutBrackets(amount); + var parameters = new StringBuilder().GenericInDefaultParams(amount); + + var template = $@" +[MethodImpl(MethodImplOptions.AggressiveInlining)] +public static void Add<{generics}>(this in Entity entity, {parameters}) +{{ + var world = World.Worlds[entity.WorldId]; + world.Add<{generics}>(in entity); +}} +"; + + return sb.AppendLine(template); + } + + public static StringBuilder AppendEntityRemoves(this StringBuilder sb, int amount) + { + for (var index = 1; index < amount; index++) + sb.AppendEntityRemove(index); + + return sb; + } + + public static StringBuilder AppendEntityRemove(this StringBuilder sb, int amount) + { + + var generics = new StringBuilder().GenericWithoutBrackets(amount); + var template = $@" +[MethodImpl(MethodImplOptions.AggressiveInlining)] +public static void Remove<{generics}>(this in Entity entity) +{{ + var world = World.Worlds[entity.WorldId]; + world.Remove<{generics}>(in entity); +}} "; return sb.AppendLine(template); diff --git a/Arch.SourceGenerator/QueryGenerator.cs b/Arch.SourceGenerator/QueryGenerator.cs index b3025224..53614028 100644 --- a/Arch.SourceGenerator/QueryGenerator.cs +++ b/Arch.SourceGenerator/QueryGenerator.cs @@ -104,6 +104,8 @@ public static partial class EntityExtensions{{ {new StringBuilder().AppendEntityHases(10)} {new StringBuilder().AppendEntitySets(10)} {new StringBuilder().AppendEntityGets(10)} + {new StringBuilder().AppendEntityAdds(10)} + {new StringBuilder().AppendEntityRemoves(10)} }} ");