mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-11-04 10:59:18 +00:00 
			
		
		
		
	Merge 3a560393f1 into a703e2c361
				
					
				
			This commit is contained in:
		
						commit
						984416f2a8
					
				
					 1 changed files with 22 additions and 17 deletions
				
			
		
							
								
								
									
										39
									
								
								jecs.luau
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								jecs.luau
									
									
									
									
									
								
							| 
						 | 
					@ -1113,11 +1113,11 @@ do
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local delete = entity
 | 
							local delete = entity
 | 
				
			||||||
		local component_index = world.component_index
 | 
					 | 
				
			||||||
		local archetypes: Archetypes = world.archetypes
 | 
							local archetypes: Archetypes = world.archetypes
 | 
				
			||||||
		local tgt = ECS_PAIR(EcsWildcard, delete)
 | 
							local component_index = world.component_index
 | 
				
			||||||
		local idr_t = component_index[tgt]
 | 
					
 | 
				
			||||||
		local idr = component_index[delete]
 | 
							local idr = component_index[entity]
 | 
				
			||||||
 | 
							local idr_t = component_index[ECS_PAIR(EcsWildcard, entity)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if idr then
 | 
							if idr then
 | 
				
			||||||
			local flags = idr.flags
 | 
								local flags = idr.flags
 | 
				
			||||||
| 
						 | 
					@ -1152,21 +1152,16 @@ do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if idr_t then
 | 
							if idr_t then
 | 
				
			||||||
			for archetype_id in idr_t.columns do
 | 
								for archetype_id in idr_t.columns do
 | 
				
			||||||
				local children = {}
 | 
					 | 
				
			||||||
				local idr_t_archetype = archetypes[archetype_id]
 | 
									local idr_t_archetype = archetypes[archetype_id]
 | 
				
			||||||
 | 
					 | 
				
			||||||
				local idr_t_types = idr_t_archetype.types
 | 
									local idr_t_types = idr_t_archetype.types
 | 
				
			||||||
 | 
									local children = table.clone(idr_t_archetype.entities)
 | 
				
			||||||
				for _, child in idr_t_archetype.entities do
 | 
					 | 
				
			||||||
					table.insert(children, child)
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				local n = #children
 | 
									local n = #children
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				for _, id in idr_t_types do
 | 
									for _, id in idr_t_types do
 | 
				
			||||||
					if not ECS_IS_PAIR(id) then
 | 
										if not ECS_IS_PAIR(id) then
 | 
				
			||||||
						continue
 | 
											continue
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					local object = ecs_pair_second(world, id)
 | 
										local object = ecs_pair_second(world, id)
 | 
				
			||||||
					if object == delete then
 | 
										if object == delete then
 | 
				
			||||||
						local id_record = component_index[id]
 | 
											local id_record = component_index[id]
 | 
				
			||||||
| 
						 | 
					@ -1181,14 +1176,24 @@ do
 | 
				
			||||||
							local on_remove = id_record.hooks.on_remove
 | 
												local on_remove = id_record.hooks.on_remove
 | 
				
			||||||
							local to = archetype_traverse_remove(world, id, idr_t_archetype)
 | 
												local to = archetype_traverse_remove(world, id, idr_t_archetype)
 | 
				
			||||||
							local empty = #to.types == 0
 | 
												local empty = #to.types == 0
 | 
				
			||||||
							for i = n, 1, -1 do
 | 
					
 | 
				
			||||||
								local child = children[i]
 | 
												if on_remove then
 | 
				
			||||||
								if on_remove then
 | 
													for i = n, 1, -1 do
 | 
				
			||||||
 | 
														local child = children[i]
 | 
				
			||||||
									on_remove(child)
 | 
														on_remove(child)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
														if not empty then
 | 
				
			||||||
 | 
															local r = sparse_array[ECS_ENTITY_T_LO(child)]
 | 
				
			||||||
 | 
															entity_move(entity_index, child, r, to)
 | 
				
			||||||
 | 
														end
 | 
				
			||||||
								end
 | 
													end
 | 
				
			||||||
								local r = sparse_array[ECS_ENTITY_T_LO(child)]
 | 
												else
 | 
				
			||||||
								if not empty then
 | 
													if not empty then -- no on_remove hook set; fast path
 | 
				
			||||||
									entity_move(entity_index, child, r, to)
 | 
														for i = n, 1, -1 do
 | 
				
			||||||
 | 
															local child = children[i]
 | 
				
			||||||
 | 
															local r = sparse_array[ECS_ENTITY_T_LO(child)]
 | 
				
			||||||
 | 
															entity_move(entity_index, child, r, to)
 | 
				
			||||||
 | 
														end
 | 
				
			||||||
								end
 | 
													end
 | 
				
			||||||
							end
 | 
												end
 | 
				
			||||||
						end
 | 
											end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue