|  |  | @ -1,6 +1,5 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | using System; |  |  |  | using System; | 
			
		
	
		
		
			
				
					
					|  |  |  | using System.Runtime.InteropServices; |  |  |  | using System.Runtime.InteropServices; | 
			
		
	
		
		
			
				
					
					|  |  |  | using gaemstone.ECS.Internal; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | using gaemstone.ECS.Utility; |  |  |  | using gaemstone.ECS.Utility; | 
			
		
	
		
		
			
				
					
					|  |  |  | using static flecs_hub.flecs; |  |  |  | using static flecs_hub.flecs; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -15,11 +14,12 @@ public static class ObserverExtensions | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (events.Length >  8) throw new ArgumentException("Must specify at most 8 events", nameof(events)); |  |  |  | 		if (events.Length >  8) throw new ArgumentException("Must specify at most 8 events", nameof(events)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		var world = entity.World; |  |  |  | 		var world = entity.World; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		var internalCallback = (nint iterPtr) => callback(new((ecs_iter_t*)iterPtr)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		using var alloc = TempAllocator.Use(); |  |  |  | 		using var alloc = TempAllocator.Use(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		var desc = new ecs_observer_desc_t { |  |  |  | 		var desc = new ecs_observer_desc_t { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			entity = entity, |  |  |  | 			entity = entity, | 
			
		
	
		
		
			
				
					
					|  |  |  | 			filter = filter.ToFlecs(alloc), |  |  |  | 			filter = filter.ToFlecs(alloc), | 
			
		
	
		
		
			
				
					
					|  |  |  | 			binding_ctx      = (void*)CallbackContextHelper.Create((world, callback)), |  |  |  | 			binding_ctx      = (void*)CallbackContextHelper.Create(internalCallback), | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			binding_ctx_free = new() { Data = new() { Pointer = &FreeContext } }, |  |  |  | 			binding_ctx_free = new() { Data = new() { Pointer = &FreeContext } }, | 
			
		
	
		
		
			
				
					
					|  |  |  | 			callback         = new() { Data = new() { Pointer = &Callback } }, |  |  |  | 			callback         = new() { Data = new() { Pointer = &Callback } }, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		}; |  |  |  | 		}; | 
			
		
	
	
		
		
			
				
					|  |  | @ -33,11 +33,9 @@ public static class ObserverExtensions | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	[UnmanagedCallersOnly] |  |  |  | 	[UnmanagedCallersOnly] | 
			
		
	
		
		
			
				
					
					|  |  |  | 	private static unsafe void Callback(ecs_iter_t* iter) |  |  |  | 	private static unsafe void Callback(ecs_iter_t* iter) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 		=> CallbackContextHelper | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		var (world, callback) = CallbackContextHelper |  |  |  | 			.Get<Action<nint>>((nint)iter->binding_ctx) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			.Get<(World, Action<Iterator>)>((nint)iter->binding_ctx); |  |  |  | 			.Invoke((nint)iter); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		callback(new Iterator(iter)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	[UnmanagedCallersOnly] |  |  |  | 	[UnmanagedCallersOnly] | 
			
		
	
		
		
			
				
					
					|  |  |  | 	private static unsafe void FreeContext(void* context) |  |  |  | 	private static unsafe void FreeContext(void* context) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |