diff --git a/src/gaemstone.Client/Systems/Renderer.cs b/src/gaemstone.Client/Systems/Renderer.cs index 8d22363..c088063 100644 --- a/src/gaemstone.Client/Systems/Renderer.cs +++ b/src/gaemstone.Client/Systems/Renderer.cs @@ -98,7 +98,7 @@ public class Renderer (Mesh, $mesh), MeshHandle($mesh), ?(Texture, $tex), ?TextureHandle($tex) ")); - foreach (var iter in _renderEntityRule) { + foreach (var iter in _renderEntityRule.Iter()) { var transforms = iter.Field(1); var meshes = iter.Field(3); // var texPairs = iter.MaybeField(4); diff --git a/src/gaemstone/ECS/Filter.cs b/src/gaemstone/ECS/Filter.cs index b9c8f9f..c62f02a 100644 --- a/src/gaemstone/ECS/Filter.cs +++ b/src/gaemstone/ECS/Filter.cs @@ -1,5 +1,4 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; @@ -10,8 +9,7 @@ using static flecs_hub.flecs; namespace gaemstone.ECS; public unsafe sealed class Filter - : IEnumerable - , IDisposable + : IDisposable { public Universe Universe { get; } public ecs_filter_t* Handle { get; } @@ -29,21 +27,19 @@ public unsafe sealed class Filter var gen = IterActionGenerator.GetOrBuild(universe, action.Method); var desc = new FilterDesc(gen.Terms.ToArray()) { Name = action.Method.Name }; using var filter = new Filter(universe, desc); - foreach (var iter in filter) gen.RunWithTryCatch(action.Target, iter); + foreach (var iter in filter.Iter()) gen.RunWithTryCatch(action.Target, iter); } public void Dispose() => ecs_filter_fini(Handle); + public Iterator Iter() + => new(Universe, IteratorType.Filter, ecs_filter_iter(Universe, this)); + public override string ToString() => ecs_filter_str(Universe, Handle).FlecsToStringAndFree()!; public static implicit operator ecs_filter_t*(Filter q) => q.Handle; - - // IEnumerable implementation - public Iterator Iter() => new(Universe, IteratorType.Filter, ecs_filter_iter(Universe, this)); - public IEnumerator GetEnumerator() => Iter().GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } public class FilterDesc diff --git a/src/gaemstone/ECS/Query.cs b/src/gaemstone/ECS/Query.cs index 54232a1..2138b3c 100644 --- a/src/gaemstone/ECS/Query.cs +++ b/src/gaemstone/ECS/Query.cs @@ -1,14 +1,11 @@ using System; -using System.Collections; -using System.Collections.Generic; using gaemstone.Utility; using static flecs_hub.flecs; namespace gaemstone.ECS; public unsafe sealed class Query - : IEnumerable - , IDisposable + : IDisposable { public Universe Universe { get; } public ecs_query_t* Handle { get; } @@ -24,15 +21,13 @@ public unsafe sealed class Query public void Dispose() => ecs_query_fini(this); + public Iterator Iter() + => new(Universe, IteratorType.Query, ecs_query_iter(Universe, this)); + public override string ToString() => ecs_query_str(Handle).FlecsToStringAndFree()!; public static implicit operator ecs_query_t*(Query q) => q.Handle; - - // IEnumerable implementation - public Iterator Iter() => new(Universe, IteratorType.Query, ecs_query_iter(Universe, this)); - public IEnumerator GetEnumerator() => Iter().GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } public class QueryDesc : FilterDesc diff --git a/src/gaemstone/ECS/Rule.cs b/src/gaemstone/ECS/Rule.cs index 7c91a42..44b116a 100644 --- a/src/gaemstone/ECS/Rule.cs +++ b/src/gaemstone/ECS/Rule.cs @@ -1,14 +1,11 @@ using System; -using System.Collections; -using System.Collections.Generic; using gaemstone.Utility; using static flecs_hub.flecs; namespace gaemstone.ECS; public unsafe sealed class Rule - : IEnumerable - , IDisposable + : IDisposable { public Universe Universe { get; } public ecs_rule_t* Handle { get; } @@ -24,13 +21,11 @@ public unsafe sealed class Rule public void Dispose() => ecs_rule_fini(this); + public Iterator Iter() + => new(Universe, IteratorType.Rule, ecs_rule_iter(Universe, this)); + public override string ToString() => ecs_rule_str(Handle).FlecsToStringAndFree()!; public static implicit operator ecs_rule_t*(Rule q) => q.Handle; - - // IEnumerable implementation - public Iterator Iter() => new(Universe, IteratorType.Rule, ecs_rule_iter(Universe, this)); - public IEnumerator GetEnumerator() => Iter().GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } diff --git a/src/gaemstone/ECS/System.cs b/src/gaemstone/ECS/System.cs index 12133d7..4c0bc4c 100644 --- a/src/gaemstone/ECS/System.cs +++ b/src/gaemstone/ECS/System.cs @@ -112,7 +112,7 @@ public static class SystemExtensions var type = (&flecsIter->next == (delegate*)&ecs_query_next) ? IteratorType.Query : (IteratorType?)null; - var iter = new Iterator(callback.Universe, type, *flecsIter); + using var iter = new Iterator(callback.Universe, type, *flecsIter); callback.Prepare(iter);