Skip to content

Commit

Permalink
Added World.Set template.
Browse files Browse the repository at this point in the history
  • Loading branch information
genaray committed Jan 30, 2025
1 parent fd6bc73 commit 18d8079
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 40 deletions.
38 changes: 0 additions & 38 deletions src/Arch.SourceGen/Fundamentals/Set.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,44 +119,6 @@ public static StringBuilder AppendArchetypeSetRange(this StringBuilder sb, int a
return sb.AppendLine(template);
}

public static StringBuilder AppendWorldSets(this StringBuilder sb, int amount)
{
for (var index = 1; index < amount; index++)
{
sb.AppendWorldSet(index);
}

return sb;
}

public static StringBuilder AppendWorldSet(this StringBuilder sb, int amount)
{
var generics = new StringBuilder().GenericWithoutBrackets(amount);
var parameters = new StringBuilder().GenericInParams(amount);
var insertParams = new StringBuilder().InsertGenericInParams(amount);

var events = new StringBuilder();
for (var index = 0; index <= amount; index++)
{
events.AppendLine($"OnComponentSet<T{index}>(entity);");
}

var template =
$$"""
public void Set<{{generics}}>(Entity entity, {{parameters}})
{
var entitySlot = EntityInfo.GetEntitySlot(entity.Id);
var slot = entitySlot.Slot;
var archetype = entitySlot.Archetype;
archetype.Set<{{generics}}>(ref slot, {{insertParams}});
{{events}}
}
""";

return sb.AppendLine(template);
}

public static StringBuilder AppendEntitySets(this StringBuilder sb, int amount)
{
for (var index = 1; index < amount; index++)
Expand Down
2 changes: 0 additions & 2 deletions src/Arch/Templates/World.Remove.tt
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ public partial class World
for (var index = 2; index <= Amount; index++)
{
var generics = AppendGenerics(index);
var types = AppendTypes(index);

var removes = new StringBuilder();
var events = new StringBuilder();
for (var i = 0; i < index; i++)
Expand Down
41 changes: 41 additions & 0 deletions src/Arch/Templates/World.Set.tt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<#@ template language="C#" #>
<#@ output extension=".cs" #>
<#@ import namespace="System.Text" #>
<#@ include file="Helpers.ttinclude" #>

using System;
using System.Runtime.CompilerServices;
using CommunityToolkit.HighPerformance;
using Arch.Core.Utils;

namespace Arch.Core;
public partial class World
{
<#
for (var index = 2; index <= Amount; index++)
{
var generics = AppendGenerics(index);
var parameters = AppendGenericInDefaultParams(index);
var inParameters = InsertGenericInParams(index);

var events = new StringBuilder();
for (var i = 0; i < index; i++)
{
events.AppendLine($" OnComponentSet<T{i}>(entity);");
}
#>

public void Set<<#= generics #>>(Entity entity, <#= parameters #>)
{
var entitySlot = EntityInfo.GetEntitySlot(entity.Id);
var slot = entitySlot.Slot;
var archetype = entitySlot.Archetype;
archetype.Set<<#= generics #>>(ref slot, <#= inParameters #>);

<#= events.ToString() #>
}
<#
}
#>
}

0 comments on commit 18d8079

Please sign in to comment.