mirror of
https://github.com/Keyslam-Group/Concord.git
synced 2025-09-01 20:03:55 -04:00
Allow named assemblages
This commit is contained in:
parent
d0e227485e
commit
276a053b7f
6 changed files with 56 additions and 9 deletions
7
main.lua
7
main.lua
|
@ -15,7 +15,8 @@ local Systems = Concord.systems
|
||||||
|
|
||||||
local Entity = Concord.entity
|
local Entity = Concord.entity
|
||||||
|
|
||||||
local World = Concord.world
|
local World = Concord.world
|
||||||
|
local Worlds = Concord.worlds
|
||||||
|
|
||||||
Component("test_comp_1", function(e, x, y)
|
Component("test_comp_1", function(e, x, y)
|
||||||
e.x = x
|
e.x = x
|
||||||
|
@ -58,12 +59,12 @@ function test_system:update2(dt) -- luacheck: ignore
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local world = World()
|
local world = World("testWorld")
|
||||||
|
|
||||||
local entity = Entity()
|
local entity = Entity()
|
||||||
entity:give(Components.test_comp_1, 100, 100)
|
entity:give(Components.test_comp_1, 100, 100)
|
||||||
|
|
||||||
world:addEntity(entity)
|
Worlds.testWorld:addEntity(entity)
|
||||||
|
|
||||||
world:addSystem(Systems.test_system, "update")
|
world:addSystem(Systems.test_system, "update")
|
||||||
world:addSystem(Systems.test_system, "update", "update2")
|
world:addSystem(Systems.test_system, "update", "update2")
|
||||||
|
|
|
@ -1,14 +1,25 @@
|
||||||
--- Assemblage
|
--- Assemblage
|
||||||
|
|
||||||
|
local PATH = (...):gsub('%.[^%.]+$', '')
|
||||||
|
|
||||||
|
local Assemblages = require(PATH..".world")
|
||||||
|
|
||||||
local Assemblage = {}
|
local Assemblage = {}
|
||||||
Assemblage.__index = Assemblage
|
Assemblage.__index = Assemblage
|
||||||
|
|
||||||
function Assemblage.new(assemble)
|
function Assemblage.new(name, assemble)
|
||||||
|
if (type(name) ~= "string") then
|
||||||
|
error("bad argument #1 to 'Assemblage.new' (string expected, got "..type(name)..")", 2)
|
||||||
|
end
|
||||||
|
|
||||||
local assemblage = setmetatable({
|
local assemblage = setmetatable({
|
||||||
__assemble = assemble,
|
__assemble = assemble,
|
||||||
|
|
||||||
|
__name = name,
|
||||||
__isAssemblage = true,
|
__isAssemblage = true,
|
||||||
}, Assemblage)
|
}, Assemblage)
|
||||||
|
|
||||||
|
Assemblages.register(name, assemblage)
|
||||||
|
|
||||||
return assemblage
|
return assemblage
|
||||||
end
|
end
|
||||||
|
|
29
src/assemblages.lua
Normal file
29
src/assemblages.lua
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
-- Assemblages
|
||||||
|
|
||||||
|
local PATH = (...):gsub('%.[^%.]+$', '')
|
||||||
|
|
||||||
|
local Type = require(PATH..".type")
|
||||||
|
|
||||||
|
local Assemblages = {}
|
||||||
|
|
||||||
|
function Assemblages.register(name, assemblage)
|
||||||
|
if (type(name) ~= "string") then
|
||||||
|
error("bad argument #1 to 'Assemblages.register' (string expected, got "..type(name)..")", 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
if (not Type.isAssemblage(assemblage)) then
|
||||||
|
error("bad argument #2 to 'Assemblages.register' (assemblage expected, got "..type(world)..")", 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
if (rawget(Assemblages, name)) then
|
||||||
|
error("bad argument #2 to 'Assemblages.register' (Assemblage with name '"..name.."' is already registerd)", 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
Assemblages[name] = assemblage
|
||||||
|
end
|
||||||
|
|
||||||
|
return setmetatable(Assemblages, {
|
||||||
|
__index = function(_, name)
|
||||||
|
error("Attempt to index assemblage '"..tostring(name).."' that does not exist / was not registered", 2)
|
||||||
|
end
|
||||||
|
})
|
|
@ -32,11 +32,17 @@ local Concord = {
|
||||||
}
|
}
|
||||||
|
|
||||||
Concord.entity = require(PATH..".entity")
|
Concord.entity = require(PATH..".entity")
|
||||||
|
|
||||||
Concord.component = require(PATH..".component")
|
Concord.component = require(PATH..".component")
|
||||||
Concord.components = require(PATH..".components")
|
Concord.components = require(PATH..".components")
|
||||||
|
|
||||||
Concord.system = require(PATH..".system")
|
Concord.system = require(PATH..".system")
|
||||||
Concord.systems = require(PATH..".systems")
|
Concord.systems = require(PATH..".systems")
|
||||||
|
|
||||||
Concord.world = require(PATH..".world")
|
Concord.world = require(PATH..".world")
|
||||||
Concord.assemblage = require(PATH..".assemblage")
|
Concord.worlds = require(PATH..".worlds")
|
||||||
|
|
||||||
|
Concord.assemblage = require(PATH..".assemblage")
|
||||||
|
Concord.assemblages = require(PATH..".assemblages")
|
||||||
|
|
||||||
return Concord
|
return Concord
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
local PATH = (...):gsub('%.[^%.]+$', '')
|
local PATH = (...):gsub('%.[^%.]+$', '')
|
||||||
|
|
||||||
local Worlds = require(PATH..".world")
|
local Worlds = require(PATH..".worlds")
|
||||||
local Type = require(PATH..".type")
|
local Type = require(PATH..".type")
|
||||||
local List = require(PATH..".list")
|
local List = require(PATH..".list")
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ World.__index = World
|
||||||
-- @return The new World
|
-- @return The new World
|
||||||
function World.new(name)
|
function World.new(name)
|
||||||
if (type(name) ~= "string") then
|
if (type(name) ~= "string") then
|
||||||
error("bad argument #1 to 'Component.new' (string expected, got "..type(name)..")", 2)
|
error("bad argument #1 to 'World.new' (string expected, got "..type(name)..")", 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
local world = setmetatable({
|
local world = setmetatable({
|
||||||
|
@ -31,7 +31,7 @@ function World.new(name)
|
||||||
__isWorld = true,
|
__isWorld = true,
|
||||||
}, World)
|
}, World)
|
||||||
|
|
||||||
Worlds.register(world)
|
Worlds.register(name, world)
|
||||||
|
|
||||||
return world
|
return world
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,7 +19,7 @@ function Worlds.register(name, world)
|
||||||
error("bad argument #2 to 'Worlds.register' (World with name '"..name.."' is already registerd)", 3)
|
error("bad argument #2 to 'Worlds.register' (World with name '"..name.."' is already registerd)", 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
Worlds[name] = component
|
Worlds[name] = world
|
||||||
end
|
end
|
||||||
|
|
||||||
return setmetatable(Worlds, {
|
return setmetatable(Worlds, {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue