Component = require("ecs.component") 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, was " .. type(calculate)) @calculate = calculate join: (entity) => @net = @entity\get(@netc_name) @node = am.group! @node\action(() -> @forward! ) @@node\append(@node) super(entity) leave: (entity) => @@node\remove(@node) forward: () => for property, calculation in pairs(@calculate) @properties[property] = calculation(@) PredictedComponent