mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-11-03 18:39:19 +00:00 
			
		
		
		
	Monitors and observers need to able to accept pair terms
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	
This commit is contained in:
		
							parent
							
								
									4230a0a797
								
							
						
					
					
						commit
						4153a7cdfe
					
				
					 4 changed files with 27 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -69,6 +69,9 @@ local function observers_new<T...>(
 | 
			
		|||
	end
 | 
			
		||||
 | 
			
		||||
	for _, term in terms do
 | 
			
		||||
		if jecs.IS_PAIR(term) then
 | 
			
		||||
			term = jecs.ECS_PAIR_FIRST(term)
 | 
			
		||||
		end
 | 
			
		||||
		world:added(term, emplaced)
 | 
			
		||||
		world:changed(term, emplaced)
 | 
			
		||||
 	end
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +154,7 @@ local function monitors_new<T...>(
 | 
			
		|||
			i += 1
 | 
			
		||||
			entities[i] = entity
 | 
			
		||||
			if callback ~= nil then
 | 
			
		||||
				callback(entity, id, value)
 | 
			
		||||
				callback(entity, jecs.OnAdd)
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
| 
						 | 
				
			
			@ -164,6 +167,9 @@ local function monitors_new<T...>(
 | 
			
		|||
	end
 | 
			
		||||
 | 
			
		||||
	for _, term in terms do
 | 
			
		||||
		if jecs.IS_PAIR(term) then
 | 
			
		||||
			term = jecs.ECS_PAIR_FIRST(term)
 | 
			
		||||
		end
 | 
			
		||||
		world:added(term, emplaced)
 | 
			
		||||
		world:removed(term, removed)
 | 
			
		||||
 	end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +1,11 @@
 | 
			
		|||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
			
		||||
local jecs = require(ReplicatedStorage.ecs)
 | 
			
		||||
local schedule = require(ReplicatedStorage.schedule)
 | 
			
		||||
local observers_add = require(ReplicatedStorage.observers_add)
 | 
			
		||||
 | 
			
		||||
local SYSTEM = schedule.SYSTEM
 | 
			
		||||
local RUN = schedule.RUN
 | 
			
		||||
require(ReplicatedStorage.components)
 | 
			
		||||
local world = observers_add(jecs.world())
 | 
			
		||||
local world = jecs.world()
 | 
			
		||||
 | 
			
		||||
local systems = ReplicatedStorage.systems
 | 
			
		||||
SYSTEM(world, systems.receive_replication)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
local jecs = require(game:GetService("ReplicatedStorage").ecs)
 | 
			
		||||
local observers_add = require("../ReplicatedStorage/observers_add")
 | 
			
		||||
 | 
			
		||||
export type World = typeof(observers_add(jecs.world()))
 | 
			
		||||
export type World = typeof(jecs.world())
 | 
			
		||||
export type Entity = jecs.Entity
 | 
			
		||||
export type Id<T> = jecs.Id<T>
 | 
			
		||||
export type Snapshot = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,11 +2,28 @@ local jecs = require("@jecs")
 | 
			
		|||
local testkit = require("@testkit")
 | 
			
		||||
local test = testkit.test()
 | 
			
		||||
local CASE, TEST, FINISH, CHECK = test.CASE, test.TEST, test.FINISH, test.CHECK
 | 
			
		||||
local FOCUS = test.FOCUS
 | 
			
		||||
local ob = require("@addons/ob")
 | 
			
		||||
 | 
			
		||||
TEST("addons/observers", function()
 | 
			
		||||
	local world = jecs.world()
 | 
			
		||||
 | 
			
		||||
	local world = jecs.world()
 | 
			
		||||
	do CASE "monitors should accept pairs"
 | 
			
		||||
		local A = world:component()
 | 
			
		||||
		local B = world:component()
 | 
			
		||||
 | 
			
		||||
		local c = 1
 | 
			
		||||
		ob.monitor(world:query(jecs.pair(A, B)), function (_, event)
 | 
			
		||||
			c += 1
 | 
			
		||||
		end)
 | 
			
		||||
 | 
			
		||||
		local child = world:entity()
 | 
			
		||||
		world:add(child, jecs.pair(A, B))
 | 
			
		||||
		CHECK(c == 2)
 | 
			
		||||
 | 
			
		||||
		world:remove(child, jecs.pair(A, B))
 | 
			
		||||
		CHECK(c == 3)
 | 
			
		||||
	end
 | 
			
		||||
	do CASE "Ensure ordering between signals and observers"
 | 
			
		||||
		local A = world:component()
 | 
			
		||||
		local B = world:component()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue