Allow named assemblages

This commit is contained in:
Tjakka5 2019-12-19 20:19:02 +01:00
parent d0e227485e
commit 276a053b7f
6 changed files with 56 additions and 9 deletions

View file

@ -15,7 +15,8 @@ local Systems = Concord.systems
local Entity = Concord.entity
local World = Concord.world
local World = Concord.world
local Worlds = Concord.worlds
Component("test_comp_1", function(e, x, y)
e.x = x
@ -58,12 +59,12 @@ function test_system:update2(dt) -- luacheck: ignore
end
local world = World()
local world = World("testWorld")
local entity = Entity()
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", "update2")

View file

@ -1,14 +1,25 @@
--- Assemblage
local PATH = (...):gsub('%.[^%.]+$', '')
local Assemblages = require(PATH..".world")
local 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({
__assemble = assemble,
__name = name,
__isAssemblage = true,
}, Assemblage)
Assemblages.register(name, assemblage)
return assemblage
end

29
src/assemblages.lua Normal file
View 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
})

View file

@ -32,11 +32,17 @@ local Concord = {
}
Concord.entity = require(PATH..".entity")
Concord.component = require(PATH..".component")
Concord.components = require(PATH..".components")
Concord.system = require(PATH..".system")
Concord.systems = require(PATH..".systems")
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

View file

@ -2,7 +2,7 @@
local PATH = (...):gsub('%.[^%.]+$', '')
local Worlds = require(PATH..".world")
local Worlds = require(PATH..".worlds")
local Type = require(PATH..".type")
local List = require(PATH..".list")
@ -13,7 +13,7 @@ World.__index = World
-- @return The new World
function World.new(name)
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
local world = setmetatable({
@ -31,7 +31,7 @@ function World.new(name)
__isWorld = true,
}, World)
Worlds.register(world)
Worlds.register(name, world)
return world
end

View file

@ -19,7 +19,7 @@ function Worlds.register(name, world)
error("bad argument #2 to 'Worlds.register' (World with name '"..name.."' is already registerd)", 3)
end
Worlds[name] = component
Worlds[name] = world
end
return setmetatable(Worlds, {