From b174b8c00026253fd40ec262e430b0bb764e31ea Mon Sep 17 00:00:00 2001 From: Alexander M Pickering Date: Sat, 25 Jan 2025 20:40:09 -0600 Subject: work --- src/ecs.moon | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/ecs.moon') diff --git a/src/ecs.moon b/src/ecs.moon index 182f09d..a865801 100644 --- a/src/ecs.moon +++ b/src/ecs.moon @@ -9,8 +9,12 @@ class Component @properties = properties or {} join: (e) => @ + post_join: (e) => + @ leave: (e) => @ + __tostring: () => + return string.format("%s<%s> {\n%s\n}",@@__name,@name or "no name given",tostring(@properties)) -- Base entity of our ECS class Entity @@ -34,10 +38,13 @@ class Entity @c_by_type[component.__class] = @c_by_type[component.__class] or {} @c_by_type[component.__class][name] = component for name, component in pairs(@components) + assert(component.join, "Component " .. name .. " does not have a join method.") component\join(@) + component\post_join(@) add: (cid, component) => component.entity = @ component\join(@) + component\post_join(@) if cid == nil cid = #@components while @components[cid] @@ -53,8 +60,14 @@ class Entity component @components[cid] = nil @c_by_type[component.__class][cid] = nil + destroy: () => + for name, component in pairs(@components) + @remove(name) + get: (cid) => @components[cid] + __tostring: () => + return string.format("%s {\n%s\n}",@@__name,tostring(@components)) class NetworkedComponent extends Component pack: () => @@ -69,6 +82,7 @@ class PredictedComponent extends Component new: (name, properties, netc_name, calculate) => super(name, properties) @netc_name = netc_name + assert(calculate and type(calculate) == "table", "Calculate must be a table") @calculate = calculate join: (entity) => @net = @entity\get(@netc_name) -- cgit v1.2.3-70-g09d2