summaryrefslogtreecommitdiff
path: root/src/ecs.moon
diff options
context:
space:
mode:
Diffstat (limited to 'src/ecs.moon')
-rw-r--r--src/ecs.moon14
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)