mirror of
https://github.com/Keyslam-Group/Concord.git
synced 2025-09-02 04:13:58 -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 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")
|
||||
|
|
|
@ -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
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.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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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, {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue