35 lines
995 B
JavaScript
35 lines
995 B
JavaScript
var diagram = require("./diagram.js");
|
|
var events = require("./events.js");
|
|
var blocks = require("./blocks");
|
|
|
|
function resolveOutput(block, cache){
|
|
var inputValues = {};
|
|
for(var input in block.inputs){
|
|
if(block.inputs[input] in cache){
|
|
inputValues[input] = cache[block.inputs[input]];
|
|
}
|
|
else{
|
|
var inputBlock = diagram.state.filter((diagramBlock)=>(diagramBlock.id == block.inputs[input]))[0];
|
|
inputValues[input] = resolveOutput(inputBlock, cache);
|
|
}
|
|
}
|
|
|
|
var output = blocks[block.type].execute(inputValues, block);
|
|
cache[block.id] = output;
|
|
|
|
return output;
|
|
}
|
|
|
|
function calculateOutputBlocks(){
|
|
var cache = {};
|
|
var outputBlocks = diagram.state.filter((block)=>((block.type == "output") || (block.type == "frequency")));
|
|
for(var block of outputBlocks){
|
|
resolveOutput(block, cache);
|
|
}
|
|
}
|
|
|
|
events.subscribe("inputChanged", calculateOutputBlocks);
|
|
events.subscribe("newJoin", calculateOutputBlocks);
|
|
|
|
window.calculate = calculateOutputBlocks;
|