package arm.node; class LogicNode { var tree: LogicTree; var inputs: Array = []; var outputs: Array> = []; public function new(tree: LogicTree) { this.tree = tree; } public function addInput(node: LogicNode, from: Int) { inputs.push(new LogicNodeInput(node, from)); } public function addOutputs(nodes: Array) { outputs.push(nodes); } /** Called when this node is activated. @param from impulse index **/ function run(from: Int) {} /** Call to activate node connected to the output. @param i output index **/ function runOutput(i: Int) { if (i >= outputs.length) return; for (o in outputs[i]) { // Check which input activated the node for (j in 0...o.inputs.length) { if (o.inputs[j].node == this) { o.run(j); break; } } } } @:allow(arm.node.LogicNodeInput) function get(from: Int): Dynamic { return this; } @:allow(arm.node.LogicNodeInput) function set(value: Dynamic) {} } class LogicNodeInput { @:allow(arm.node.LogicNode) var node: LogicNode; var from: Int; // Socket index public function new(node: LogicNode, from: Int) { this.node = node; this.from = from; } @:allow(arm.node.LogicNode) function get(): Dynamic { return node.get(from); } @:allow(arm.node.LogicNode) function set(value: Dynamic) { node.set(value); } }