mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-10-31 01:09:16 +00:00 
			
		
		
		
	Clear ID will remove ID from all entities
This commit is contained in:
		
							parent
							
								
									4d6c2ccbb8
								
							
						
					
					
						commit
						75f2584bf4
					
				
					 3 changed files with 43 additions and 0 deletions
				
			
		
							
								
								
									
										16
									
								
								jecs.luau
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								jecs.luau
									
									
									
									
									
								
							|  | @ -1073,6 +1073,22 @@ local function world_clear(world: ecs_world_t, entity: i53) | |||
| 	local archetype = record.archetype | ||||
| 	local row = record.row | ||||
| 
 | ||||
| 	local idr = world.component_index[entity] | ||||
| 	if idr then | ||||
| 		local count = 0 | ||||
| 		local queue = {} | ||||
| 		for archetype_id in idr.cache do | ||||
| 			local idr_archetype = world.archetypes[archetype_id] | ||||
| 			local entities = idr_archetype.entities | ||||
| 			local n = #entities | ||||
| 			count += n | ||||
| 			table.move(entities, 1, n, #queue + 1, queue) | ||||
| 		end | ||||
| 		for _, e in queue do | ||||
| 			world_remove(world, e, entity) | ||||
| 		end | ||||
| 	end | ||||
| 
 | ||||
| 	if archetype then | ||||
| 		-- In the future should have a destruct mode for | ||||
| 		-- deleting archetypes themselves. Maybe requires recycling | ||||
|  |  | |||
|  | @ -1093,6 +1093,33 @@ TEST("world:children", function() | |||
| end) | ||||
| 
 | ||||
| TEST("world:clear()", function() | ||||
| 	do | ||||
| 			CASE("should remove its components") | ||||
| 			local world = jecs.World.new() :: World | ||||
| 			local A = world:component() | ||||
| 			local B = world:component() | ||||
| 			local C = world:component() | ||||
| 			local D = world:component() | ||||
| 
 | ||||
| 			local e = world:entity() | ||||
| 			local e1 = world:entity() | ||||
| 			local e2 = world:entity() | ||||
| 
 | ||||
| 			world:set(e, A, true) | ||||
| 			world:set(e, B, true) | ||||
| 
 | ||||
| 			world:set(e1, A, true) | ||||
| 			world:set(e1, B, true) | ||||
| 
 | ||||
| 			CHECK(world:get(e, A)) | ||||
| 			CHECK(world:get(e, B)) | ||||
| 
 | ||||
| 			world:clear(A) | ||||
| 			CHECK(world:get(e, A) == nil) | ||||
| 			CHECK(world:get(e, B)) | ||||
| 			CHECK(world:get(e1, A) == nil) | ||||
| 			CHECK(world:get(e1, B)) | ||||
| 		end | ||||
| 	do | ||||
| 		CASE("should remove its components") | ||||
| 		local world = jecs.World.new() :: World | ||||
|  |  | |||
							
								
								
									
										0
									
								
								text.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								text.txt
									
									
									
									
									
										Normal file
									
								
							
		Loading…
	
		Reference in a new issue