Skip to content

Commit aaa0fc4

Browse files
committed
Add async version to Query
1 parent d2ef362 commit aaa0fc4

1 file changed

Lines changed: 34 additions & 14 deletions

File tree

Arch.System.SourceGenerator/Query.cs

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,9 @@ public static StringBuilder AppendQueryMethod(this StringBuilder sb, ref QueryMe
281281
var getFirstElements = new StringBuilder().GetFirstElements(queryMethod.Components);
282282
var getComponents = new StringBuilder().GetComponents(queryMethod.Components);
283283
var insertParams = new StringBuilder().InsertParams(queryMethod.Parameters);
284-
284+
var jobParameters = new StringBuilder().JobParameters(queryMethod.Parameters);
285+
var jobParametersAssigment = new StringBuilder().JobParametersAssigment(queryMethod.Parameters, queryMethod.IsStatic);
286+
285287
var allTypeArray = new StringBuilder().GetTypeArray(queryMethod.AllFilteredTypes);
286288
var anyTypeArray = new StringBuilder().GetTypeArray(queryMethod.AnyFilteredTypes);
287289
var noneTypeArray = new StringBuilder().GetTypeArray(queryMethod.NoneFilteredTypes);
@@ -296,6 +298,7 @@ public static StringBuilder AppendQueryMethod(this StringBuilder sb, ref QueryMe
296298
using Arch.Core;
297299
using Arch.Core.Extensions;
298300
using Arch.Core.Utils;
301+
using Schedulers;
299302
using ArrayExtensions = CommunityToolkit.HighPerformance.ArrayExtensions;
300303
using Component = Arch.Core.Component;
301304
{{(!queryMethod.IsGlobalNamespace ? $"namespace {queryMethod.Namespace} {{" : "")}}
@@ -310,27 +313,44 @@ partial class {{queryMethod.ClassName}}{
310313
311314
private {{staticModifier}} World? _{{queryMethod.MethodName}}_Initialized;
312315
private {{staticModifier}} Query? _{{queryMethod.MethodName}}_Query;
313-
314-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
315-
public {{staticModifier}} void {{queryMethod.MethodName}}Query(World world {{data}}){
316-
317-
if(!ReferenceEquals(_{{queryMethod.MethodName}}_Initialized, world)) {
318-
_{{queryMethod.MethodName}}_Query = world.Query(in {{queryMethod.MethodName}}_QueryDescription);
319-
_{{queryMethod.MethodName}}_Initialized = world;
320-
}
321-
322-
foreach(ref var chunk in _{{queryMethod.MethodName}}_Query){
323-
316+
private struct {{queryMethod.MethodName}}QueryJobChunk : IJob
317+
{
318+
{{jobParameters}}
319+
public {{queryMethod.ClassName}} self;
320+
public void Execute() {
321+
foreach(ref var chunk in self._{{queryMethod.MethodName}}_Query){
324322
{{(queryMethod.IsEntityQuery ? "ref var entityFirstElement = ref chunk.Entity(0);" : "")}}
325323
{{getFirstElements}}
326-
324+
327325
foreach(var entityIndex in chunk)
328326
{
329327
{{(queryMethod.IsEntityQuery ? $"ref readonly var {queryMethod.EntityParameter.Name.ToLower()} = ref Unsafe.Add(ref entityFirstElement, entityIndex);" : "")}}
330328
{{getComponents}}
331-
{{queryMethod.MethodName}}({{insertParams}});
329+
{{(queryMethod.IsStatic ? "" : "self.")}}{{queryMethod.MethodName}}({{insertParams}});
332330
}
333331
}
332+
}
333+
}
334+
335+
public {{staticModifier}} void {{queryMethod.MethodName}}Query(World world {{data}}){
336+
337+
if(!ReferenceEquals(_{{queryMethod.MethodName}}_Initialized, world)) {
338+
_{{queryMethod.MethodName}}_Query = world.Query(in {{queryMethod.MethodName}}_QueryDescription);
339+
_{{queryMethod.MethodName}}_Initialized = world;
340+
}
341+
var job = new {{queryMethod.MethodName}}QueryJobChunk() { {{jobParametersAssigment}} };
342+
job.Execute();
343+
}
344+
345+
public {{staticModifier}} JobHandle {{queryMethod.MethodName}}QueryAsync(World world {{data}}){
346+
347+
if(!ReferenceEquals(_{{queryMethod.MethodName}}_Initialized, world)) {
348+
_{{queryMethod.MethodName}}_Query = world.Query(in {{queryMethod.MethodName}}_QueryDescription);
349+
_{{queryMethod.MethodName}}_Initialized = world;
350+
}
351+
var job = new {{queryMethod.MethodName}}QueryJobChunk() { {{jobParametersAssigment}} };
352+
var handle = World.SharedJobScheduler.Schedule(job);
353+
return handle;
334354
}
335355
}
336356
{{(!queryMethod.IsGlobalNamespace ? "}" : "")}}

0 commit comments

Comments
 (0)