diff options
Diffstat (limited to 'src/ecs.moon')
| -rw-r--r-- | src/ecs.moon | 14 |
1 files changed, 14 insertions, 0 deletions
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) |
