mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-11-04 02:49:18 +00:00 
			
		
		
		
	Merge with main branch
This commit is contained in:
		
						commit
						611101b309
					
				
					 1 changed files with 18 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -16,7 +16,6 @@ type ArchetypeEdge = {
 | 
			
		|||
	remove: Archetype,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
type Archetype = {
 | 
			
		||||
	id: number,
 | 
			
		||||
	edges: { [i53]: ArchetypeEdge },
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +36,7 @@ type EntityIndex = { dense: { [i24]: i53 }, sparse: { [i53]: Record } }
 | 
			
		|||
 | 
			
		||||
type ArchetypeRecord = {
 | 
			
		||||
	count: number,
 | 
			
		||||
	column: number
 | 
			
		||||
	column: number,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ArchetypeMap = {
 | 
			
		||||
| 
						 | 
				
			
			@ -723,6 +722,7 @@ local Arm = function(self: Query, ...)
 | 
			
		|||
end
 | 
			
		||||
local world_query
 | 
			
		||||
do
 | 
			
		||||
    local empty_list = {}
 | 
			
		||||
    local EmptyQuery: Query = {
 | 
			
		||||
       	__iter = function(): Item
 | 
			
		||||
            return noop
 | 
			
		||||
| 
						 | 
				
			
			@ -733,7 +733,7 @@ do
 | 
			
		|||
        with = Arm,
 | 
			
		||||
       	without = Arm,
 | 
			
		||||
        archetypes = function()
 | 
			
		||||
            return {}
 | 
			
		||||
            return empty_list
 | 
			
		||||
        end
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -998,7 +998,7 @@ do
 | 
			
		|||
 | 
			
		||||
        local function query_init(query)
 | 
			
		||||
            if init and drain then
 | 
			
		||||
                return
 | 
			
		||||
                return true
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            init = true
 | 
			
		||||
| 
						 | 
				
			
			@ -1065,18 +1065,19 @@ do
 | 
			
		|||
        end
 | 
			
		||||
 | 
			
		||||
        local function world_query_without(query, ...)
 | 
			
		||||
                local withoutComponents = { ... }
 | 
			
		||||
                local N = select("#", ...)
 | 
			
		||||
          		for i = #compatible_archetypes, 1, -1 do
 | 
			
		||||
         			local archetype = compatible_archetypes[i]
 | 
			
		||||
         			local records = archetype.records
 | 
			
		||||
         			local tr = archetype.records
 | 
			
		||||
         			local shouldRemove = false
 | 
			
		||||
 | 
			
		||||
         			for _, componentId in withoutComponents do
 | 
			
		||||
                        if records[componentId] then
 | 
			
		||||
           					shouldRemove = true
 | 
			
		||||
           					break
 | 
			
		||||
                        end
 | 
			
		||||
         			end
 | 
			
		||||
                    for j = 1, N do
 | 
			
		||||
                        local id = select(i, ...)
 | 
			
		||||
                        if tr[id] then
 | 
			
		||||
            				shouldRemove = true
 | 
			
		||||
            				break
 | 
			
		||||
         			    end
 | 
			
		||||
                    end
 | 
			
		||||
 | 
			
		||||
         			if shouldRemove then
 | 
			
		||||
                        local last = #compatible_archetypes
 | 
			
		||||
| 
						 | 
				
			
			@ -1139,18 +1140,19 @@ do
 | 
			
		|||
        end
 | 
			
		||||
 | 
			
		||||
        local function world_query_with(query, ...)
 | 
			
		||||
                local with = { ... }
 | 
			
		||||
                local N = select("#", ...)
 | 
			
		||||
                for i = #compatible_archetypes, 1, -1 do
 | 
			
		||||
         			local archetype = compatible_archetypes[i]
 | 
			
		||||
         			local tr = archetype.records
 | 
			
		||||
         			local shouldRemove = false
 | 
			
		||||
 | 
			
		||||
         			for _, id in with do
 | 
			
		||||
         			    if not tr[id] then
 | 
			
		||||
                    for j = 1, N do
 | 
			
		||||
                        local id = select(i, ...)
 | 
			
		||||
                        if not tr[id] then
 | 
			
		||||
            				shouldRemove = true
 | 
			
		||||
            				break
 | 
			
		||||
         			    end
 | 
			
		||||
         			end
 | 
			
		||||
                    end
 | 
			
		||||
 | 
			
		||||
         			if shouldRemove then
 | 
			
		||||
                        local last = #compatible_archetypes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue