From d6c81296763c1e9f6d0558bd4d4e259a062c6c83 Mon Sep 17 00:00:00 2001 From: copygirl Date: Fri, 20 Jan 2023 17:42:01 +0100 Subject: [PATCH] Allow passing multiple events to InitObserver --- src/gaemstone.ECS/Observer.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gaemstone.ECS/Observer.cs b/src/gaemstone.ECS/Observer.cs index 849ab42..b3945a0 100644 --- a/src/gaemstone.ECS/Observer.cs +++ b/src/gaemstone.ECS/Observer.cs @@ -8,8 +8,11 @@ namespace gaemstone.ECS; public static class ObserverExtensions { public static unsafe EntityRef InitObserver(this EntityRef entity, - Entity @event, FilterDesc filter, Action callback) + FilterDesc filter, Action callback, params Entity[] events) { + if (events.Length == 0) throw new ArgumentException("Must specify at least 1 event", nameof(events)); + if (events.Length > 8) throw new ArgumentException("Must specify at most 8 events", nameof(events)); + var world = entity.World; using var alloc = TempAllocator.Use(); var desc = new ecs_observer_desc_t { @@ -19,7 +22,9 @@ public static class ObserverExtensions binding_ctx_free = new() { Data = new() { Pointer = &FreeContext } }, callback = new() { Data = new() { Pointer = &Callback } }, }; - desc.events[0] = @event; + var span = desc.events; + for (var i = 0; i < events.Length; i++) + span[i] = events[i]; return new(world, new(ecs_observer_init(world, &desc))); }