Update framework
This commit is contained in:
45
framework/resonator/effect-chain.js
Normal file
45
framework/resonator/effect-chain.js
Normal file
@@ -0,0 +1,45 @@
|
||||
// A chain of effects that connect to the effect bus
|
||||
export default class EffectChain {
|
||||
constructor(context, graph, input, output) {
|
||||
this.effects = [];
|
||||
this.context = context;
|
||||
this.graph = graph;
|
||||
this.inputNode = input;
|
||||
this.outputNode = output;
|
||||
this.updateConnections();
|
||||
}
|
||||
applyEffect(effect) {
|
||||
this.effects.push(effect);
|
||||
this.updateConnections();
|
||||
}
|
||||
removeEffect(effect) {
|
||||
this.effects.forEach((currEffect) => {
|
||||
if (effect === currEffect) {
|
||||
currEffect.disconnect();
|
||||
}
|
||||
});
|
||||
this.effects = this.effects.filter((currEffect) => effect !== currEffect);
|
||||
this.updateConnections();
|
||||
}
|
||||
updateConnections() {
|
||||
if (this.effects.length == 0) {
|
||||
this.inputNode.connect(this.outputNode);
|
||||
return;
|
||||
}
|
||||
let current = null;
|
||||
let previous = null;
|
||||
this.effects.forEach((effect) => {
|
||||
current = effect;
|
||||
if (previous) {
|
||||
current.connectInput(previous.getOutput());
|
||||
}
|
||||
else {
|
||||
current.connectInput(this.inputNode);
|
||||
}
|
||||
previous = current;
|
||||
});
|
||||
if (current) {
|
||||
current.connectOutput(this.outputNode);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user