jecs/benches/visual/query.bench.luau

173 lines
3.7 KiB
Text
Raw Normal View History

2024-04-23 15:10:49 +00:00
--!optimize 2
--!native
local ReplicatedStorage = game:GetService("ReplicatedStorage")
2025-06-25 16:59:06 +00:00
local Matter = require(ReplicatedStorage.DevPackages.Matter)
2024-04-23 15:10:49 +00:00
local newWorld = Matter.World.new()
2024-04-24 15:32:07 +00:00
2025-06-25 11:31:25 +00:00
local jecs = require(ReplicatedStorage.Lib:Clone())
local mirror = require(ReplicatedStorage.mirror:Clone())
local mcs = mirror.world()
local ecs = jecs.world()
2024-04-23 15:10:49 +00:00
local A1 = Matter.component()
local A2 = Matter.component()
local A3 = Matter.component()
local A4 = Matter.component()
local A5 = Matter.component()
local A6 = Matter.component()
local A7 = Matter.component()
local A8 = Matter.component()
2024-04-30 23:09:15 +00:00
local D1 = ecs:component()
local D2 = ecs:component()
local D3 = ecs:component()
local D4 = ecs:component()
local D5 = ecs:component()
local D6 = ecs:component()
local D7 = ecs:component()
local D8 = ecs:component()
2024-04-24 15:32:07 +00:00
2025-06-25 11:31:25 +00:00
local E1 = mcs:component()
local E2 = mcs:component()
local E3 = mcs:component()
local E4 = mcs:component()
local E5 = mcs:component()
local E6 = mcs:component()
local E7 = mcs:component()
local E8 = mcs:component()
2024-04-25 05:26:38 +00:00
2024-07-15 18:29:06 +00:00
local function flip()
2024-09-26 13:40:50 +00:00
return math.random() >= 0.25
2024-04-23 15:10:49 +00:00
end
local N = 2 ^ 16 - 2
2024-04-23 15:10:49 +00:00
local archetypes = {}
2024-04-25 14:26:30 +00:00
2025-06-25 16:59:06 +00:00
for i = 1, 1000 do
ecs:entity()
mcs:entity()
end
2024-04-25 14:26:30 +00:00
local hm = 0
2024-07-15 18:29:06 +00:00
for i = 1, N do
2024-04-23 15:10:49 +00:00
local combination = ""
local n = newWorld:spawn()
local entity = ecs:entity()
2024-04-25 05:26:38 +00:00
local m = mcs:entity()
2024-04-23 15:10:49 +00:00
2024-09-26 13:40:50 +00:00
if flip() then
2025-06-25 16:59:06 +00:00
ecs:add(entity, math.random(1, 1000) + jecs.Rest + 1)
mcs:add(m, math.random(1, 1000) + jecs.Rest + 1)
end
if flip() then
ecs:set(entity, D1, { value = true })
newWorld:insert(n, A1({ value = true }))
mcs:set(m, E1, { value = 2 })
2024-09-26 13:40:50 +00:00
end
2024-07-15 18:29:06 +00:00
if flip() then
2024-04-23 15:10:49 +00:00
combination ..= "B"
ecs:set(entity, D2, { value = true })
mcs:set(m, E2, { value = 2 })
newWorld:insert(n, A2({ value = true }))
2024-04-23 15:10:49 +00:00
end
2024-07-15 18:29:06 +00:00
if flip() then
2024-04-23 15:10:49 +00:00
combination ..= "C"
ecs:set(entity, D3, { value = true })
mcs:set(m, E3, { value = 2 })
newWorld:insert(n, A3({ value = true }))
2024-04-23 15:10:49 +00:00
end
2024-07-15 18:29:06 +00:00
if flip() then
2024-04-23 15:10:49 +00:00
combination ..= "D"
ecs:set(entity, D4, { value = true })
mcs:set(m, E4, { value = 2 })
2024-04-25 05:26:38 +00:00
newWorld:insert(n, A4({ value = true }))
2024-04-23 15:10:49 +00:00
end
2024-07-15 18:29:06 +00:00
if flip() then
2024-04-23 15:10:49 +00:00
combination ..= "E"
ecs:set(entity, D5, { value = true })
mcs:set(m, E5, { value = 2 })
2024-04-25 05:26:38 +00:00
newWorld:insert(n, A5({ value = true }))
2024-04-23 15:10:49 +00:00
end
2024-07-15 18:29:06 +00:00
if flip() then
2024-04-23 15:10:49 +00:00
combination ..= "F"
ecs:set(entity, D6, { value = true })
mcs:set(m, E6, { value = 2 })
newWorld:insert(n, A6({ value = true }))
2024-04-23 15:10:49 +00:00
end
2024-07-15 18:29:06 +00:00
if flip() then
2024-04-23 15:10:49 +00:00
combination ..= "G"
ecs:set(entity, D7, { value = true })
mcs:set(m, E7, { value = 2 })
newWorld:insert(n, A7({ value = true }))
2024-04-23 15:10:49 +00:00
end
2024-07-15 18:29:06 +00:00
if flip() then
2024-04-23 15:10:49 +00:00
combination ..= "H"
newWorld:insert(n, A8({ value = true }))
ecs:set(entity, D8, { value = true })
mcs:set(m, E8, { value = 2 })
2024-04-23 15:10:49 +00:00
end
2024-07-15 18:29:06 +00:00
if combination:find("BCDF") then
if not archetypes[combination] then
print(combination)
2024-07-15 18:29:06 +00:00
end
2024-04-25 14:26:30 +00:00
hm += 1
end
2024-04-23 15:10:49 +00:00
archetypes[combination] = true
end
2024-04-25 14:26:30 +00:00
print("TEST", hm)
2024-04-23 15:10:49 +00:00
2024-09-26 13:40:50 +00:00
local count = 0
2025-06-25 16:59:06 +00:00
for _, archetype in ecs:query(D2, D4):archetypes() do
count += 1
2024-04-23 15:10:49 +00:00
end
2024-09-26 13:40:50 +00:00
print(count)
2024-04-23 15:10:49 +00:00
2025-06-25 16:59:06 +00:00
local mq = ecs:query(E2, E4, D6, D8, 500):cached()
local jq = ecs:query(D2, D4, D6, D8, 500):cached()
2024-04-23 15:10:49 +00:00
return {
ParameterGenerator = function()
return
2024-07-15 18:29:06 +00:00
end,
2024-04-23 15:10:49 +00:00
Functions = {
2025-06-25 11:31:25 +00:00
-- Matter = function()
-- for entityId, firstComponent in newWorld:query(A2, A4, A6, A8) do
-- end
-- end,
-- ECR = function()
-- for entityId, firstComponent in registry2:view(B2, B4, B6, B8) do
-- end
-- end,
--
Mirror = function()
2025-06-25 16:59:06 +00:00
for _, archetype in mq:archetypes() do
if mirror.query_match(mq, archetype) then
end
end
2025-06-25 16:59:06 +00:00
-- for entityId, firstComponent in mcs:query(E2, E4) do
-- end
end,
2024-09-26 13:40:50 +00:00
2025-06-25 16:59:06 +00:00
Jecs = function()
for _, archetype in jq:archetypes() do
if jecs.query_match(jq, archetype) then
end
2025-06-25 16:59:06 +00:00
end
-- for entityId, firstComponent in ecs:query(D2, D4) do
-- end
end,
2024-04-23 15:10:49 +00:00
},
}