You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
774 B
Lua
56 lines
774 B
Lua
local ecs = require "ecs"
|
|
|
|
local w = ecs.world()
|
|
|
|
w:register {
|
|
name = "order",
|
|
order = true,
|
|
}
|
|
|
|
w:register {
|
|
name = "node",
|
|
"id:int",
|
|
"parent:int",
|
|
}
|
|
|
|
w:new {
|
|
node = { id = 1, parent = 0 } ,
|
|
order = true,
|
|
}
|
|
|
|
w:new {
|
|
node = { id = 2, parent = 0 },
|
|
order = true,
|
|
}
|
|
|
|
w:new {
|
|
node = { id = 0, parent = -1 },
|
|
}
|
|
|
|
w:new {
|
|
node = { id = 3, parent = 0 },
|
|
order = true,
|
|
}
|
|
|
|
for v in w:select "node:in order?new" do
|
|
assert(v.order == nil)
|
|
if v.node.parent < 0 then
|
|
-- add order
|
|
v.order = true
|
|
end
|
|
end
|
|
|
|
local cache = {}
|
|
|
|
for v in w:select "order node:update" do
|
|
local node = v.node
|
|
if node.parent < 0 or cache[node.parent] then
|
|
cache[node.id] = true
|
|
print(node.id, node.parent)
|
|
else
|
|
v.order = false
|
|
end
|
|
end
|
|
|
|
assert(pcall(w.select, w, "node order") == false)
|