Merge with main

This commit is contained in:
Ukendio 2024-08-02 00:19:09 +02:00
commit 219d0e08c4

View file

@ -777,16 +777,12 @@ local function diff(a, b)
return false
end
local ChangeTracker: <T>(world: World, component: Entity<T>) -> Tracker<T>
do
local world
local T
local PreviousT
local add
local is_trivial
local function ChangeTracker<T>(world, T: Entity<T>): Tracker<T>
local PreviousT = jecs.pair(jecs.Rest, T)
local add = {}
local added
local removed
local is_trivial
local function changes_added()
added = true
@ -797,16 +793,7 @@ do
return nil
end
if is_trivial == nil then
is_trivial = typeof(data) ~= "table"
<<<<<<< HEAD
end
if not is_trivial then
data = table.clone(data)
=======
>>>>>>> af8e15ef45d312ac36eb925a41d05863d707bbfe
end
add[id] = data
@ -824,12 +811,11 @@ do
return nil
end
if is_trivial and new ~= old then
<<<<<<< HEAD
=======
if not is_trivial then
if diff(new, old) then
break
>>>>>>> af8e15ef45d312ac36eb925a41d05863d707bbfe
elseif diff(new, old) then
end
elseif new ~= old then
break
end
@ -884,17 +870,8 @@ do
local tracker = { track = track }
function ChangeTracker<T>(worldToTrack, component: Entity<T>): Tracker<T>
world = worldToTrack
T = component
-- We just use jecs.Rest because people will probably not use it anyways
PreviousT = jecs.pair(jecs.Rest, T)
add = {}
return tracker
end
end
TEST("changetracker:track()", function()
local world = jecs.World.new()
@ -978,6 +955,33 @@ TEST("changetracker:track()", function()
end)
end
do CASE "multiple change trackers"
local A = world:component()
local B = world:component()
local trackerA = ChangeTracker(world, A)
local trackerB = ChangeTracker(world, B)
local e1 = world:entity()
world:set(e1, A, "a1")
local e2 = world:entity()
world:set(e2, B, "b1")
trackerA.track(function() end)
trackerB.track(function() end)
world:set(e2, B, "b2")
trackerA.track(function(changes)
for _, old, new in changes.changed() do
end
end)
trackerB.track(function(changes)
for _, old, new in changes.changed() do
CHECK(new == "b2")
end
end)
end
end)
FINISH()