mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-10-31 17:20:32 +00:00 
			
		
		
		
	kill a regression
This commit is contained in:
		
							parent
							
								
									354f100dd1
								
							
						
					
					
						commit
						c7113d6bc9
					
				
					 1 changed files with 20 additions and 16 deletions
				
			
		
							
								
								
									
										36
									
								
								lib/init.lua
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								lib/init.lua
									
									
									
									
									
								
							|  | @ -125,7 +125,7 @@ local function hash(arr): string | number | |||
| 	return table.concat(arr, "_") | ||||
| end | ||||
| 
 | ||||
| local function createArchetypeRecords(componentIndex: ComponentIndex, to: Archetype, from: Archetype?) | ||||
| local function createArchetypeRecords(componentIndex: ComponentIndex, to: Archetype, _from: Archetype?) | ||||
| 	local destinationIds = to.types | ||||
| 	local records = to.records | ||||
| 	local id = to.id | ||||
|  | @ -295,12 +295,11 @@ local function archetypeTraverseAdd(world: World, componentId: i53, from: Archet | |||
| end | ||||
| 
 | ||||
| local function ensureRecord(entityIndex, entityId: i53): Record | ||||
| 	local id = entityId | ||||
| 	local record = entityIndex[id] | ||||
| 	local record = entityIndex[entityId] | ||||
| 
 | ||||
| 	if not record then | ||||
| 		record = {} | ||||
| 		entityIndex[id] = record | ||||
| 		entityIndex[entityId] = record | ||||
| 	end | ||||
| 
 | ||||
| 	return record :: Record | ||||
|  | @ -395,8 +394,10 @@ function World.get(world: World, entityId: i53, a: i53, b: i53?, c: i53?, d: i53 | |||
| 	end | ||||
| end | ||||
| 
 | ||||
| -- the less creation the better | ||||
| local function actualNoOperation() end | ||||
| local function noop(_self: Query, ...: i53): () -> (number, ...any) | ||||
| 	return function() end :: any | ||||
| 	return actualNoOperation :: any | ||||
| end | ||||
| 
 | ||||
| local EmptyQuery = { | ||||
|  | @ -409,6 +410,11 @@ setmetatable(EmptyQuery, EmptyQuery) | |||
| export type Query = typeof(EmptyQuery) | ||||
| 
 | ||||
| function World.query(world: World, ...: i53): Query | ||||
| 	-- breaking? | ||||
| 	if (...) == nil then | ||||
| 		error("Missing components") | ||||
| 	end | ||||
| 
 | ||||
| 	local compatibleArchetypes = {} | ||||
| 	local length = 0 | ||||
| 
 | ||||
|  | @ -416,10 +422,6 @@ function World.query(world: World, ...: i53): Query | |||
| 	local archetypes = world.archetypes | ||||
| 	local queryLength = #components | ||||
| 
 | ||||
| 	if queryLength == 0 then | ||||
| 		error("Missing components") | ||||
| 	end | ||||
| 
 | ||||
| 	local firstArchetypeMap | ||||
| 	local componentIndex = world.componentIndex | ||||
| 
 | ||||
|  | @ -466,19 +468,21 @@ function World.query(world: World, ...: i53): Query | |||
| 	preparedQuery.__index = preparedQuery | ||||
| 
 | ||||
| 	function preparedQuery:without(...) | ||||
| 		local withoutComponents = {...} | ||||
| 		for index = #compatibleArchetypes, 1, -1 do | ||||
| 			local archetype = compatibleArchetypes[index][1] | ||||
| 		local components = {...} | ||||
| 		for i = #compatibleArchetypes, 1, -1 do | ||||
| 			local archetype = compatibleArchetypes[i][1] | ||||
| 			local records = archetype.records | ||||
| 			local shouldRemove = false | ||||
| 			for _, componentId in withoutComponents do | ||||
| 
 | ||||
| 			for _, componentId in components do | ||||
| 				if records[componentId] then | ||||
| 					shouldRemove = true | ||||
| 					break | ||||
| 				end | ||||
| 			end | ||||
| 
 | ||||
| 			if shouldRemove then | ||||
| 				table.remove(compatibleArchetypes, index) | ||||
| 				table.remove(compatibleArchetypes, i) | ||||
| 			end | ||||
| 		end | ||||
| 
 | ||||
|  | @ -557,8 +561,8 @@ function World.query(world: World, ...: i53): Query | |||
| 					columns[tr[8]][row] | ||||
| 			end | ||||
| 
 | ||||
| 			for index in components do | ||||
| 				queryOutput[index] = tr[index][row] | ||||
| 			for i in components do | ||||
| 				queryOutput[i] = tr[i][row] | ||||
| 			end | ||||
| 
 | ||||
| 			return entityId, unpack(queryOutput, 1, queryLength) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue