From bc47eaa651f41c3ca0f91673761efc0ff383a7cb Mon Sep 17 00:00:00 2001 From: Tjakka5 Date: Wed, 11 Dec 2019 13:04:09 +0100 Subject: [PATCH] Allow for named components --- main.lua | 37 +++++++++++++++++++++++++++++++++++++ src/component.lua | 17 ++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/main.lua b/main.lua index ce78707..cd13075 100644 --- a/main.lua +++ b/main.lua @@ -1,4 +1,41 @@ +--[=[ local file = "examples.simpleDrawing" -- local file = "examples.baseLayout.main" require(file) +]=]-- + +local Concord = require("src") +local Component = require("src.component") + +local test_comp_1 = Concord.component("test_comp_1", function(e, x, y) + e.x = x + e.y = y +end) + +local test_comp_2 = Concord.component("test_comp_2", function(e, a) + e.a = a +end) + +local test_comp_3 = Concord.component("test_comp_3", function(e, b) + e.b = b +end) + +local test_system = Concord.system({Component.test_comp_1}) +function test_system:update(dt) + print(#self.pool) +end + +local world = Concord.world() + +local entity = Concord.entity() +entity:give(Component.test_comp_2, 100, 100) +entity:apply() + +world:addEntity(entity) + +world:addSystem(test_system(), "update") + +function love.update(dt) + world:emit("update", dt) +end \ No newline at end of file diff --git a/src/component.lua b/src/component.lua index 63cb1fb..5777743 100644 --- a/src/component.lua +++ b/src/component.lua @@ -6,8 +6,21 @@ Component.__index = Component --- Creates a new Component. -- @param populate A function that populates the Bag with values -- @return A Component object -function Component.new(populate) +function Component.new(name, populate) + if (type(name) ~= "string") then + error("bad argument #1 to 'Component.new' (string expected, got "..type(name)..")", 2) + end + + if not (populate == nil or type(populate) == "function") then + error("bad argument #2 to 'Component.new' (function/nil expected, got "..type(populate)..")", 2) + end + + if (Component[name] ~= nil) then + error("bad argument #2 to 'Component.new' (Component with name '"..name.."' already exists", 2) + end + local component = setmetatable({ + __name = name, __populate = populate, __isComponent = true, @@ -15,6 +28,8 @@ function Component.new(populate) component.__mt = {__index = component} + Component[name] = component + return component end