UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

119 lines (118 loc) 3.54 kB
"use strict"; export class ConnectionsController { constructor(_node) { this._node = _node; this._outputConnections = /* @__PURE__ */ new Map(); } initInputs() { const count = this._node.io.inputs.maxInputsCount(); this._inputConnections = this._inputConnections || new Array(count); while (this._inputConnections.length < count) { this._inputConnections.push(void 0); } } dispose() { if (this._inputConnections) { this._inputConnections.splice(0, this._inputConnections.length); } if (this._outputConnections) { this._outputConnections.clear(); } } // // // INPUT CONNECTIONS // // addInputConnection(connection) { if (this._inputConnections) { this._inputConnections[connection.inputIndex()] = connection; } else { console.warn(`input connections array not initialized`); } } removeInputConnection(connection) { if (this._inputConnections) { if (connection.inputIndex() < this._inputConnections.length) { this._inputConnections[connection.inputIndex()] = void 0; let all_connections_after_are_undefined = true; for (let i = connection.inputIndex(); i < this._inputConnections.length; i++) { if (this._inputConnections[i]) { all_connections_after_are_undefined = false; } } if (all_connections_after_are_undefined) { this._inputConnections = this._inputConnections.slice(0, connection.inputIndex()); } } else { console.warn(`attempt to remove an input connection at index ${connection.inputIndex()}`); } } else { console.warn(`input connections array not initialized`); } } inputConnection(index) { if (this._inputConnections) { return this._inputConnections[index]; } } firstInputConnection() { if (this._inputConnections) { for (const connection of this._inputConnections) { if (connection) { return connection; } } } return null; } inputConnections() { return this._inputConnections; } existingInputConnections() { const current_connections = this._inputConnections; if (current_connections) { while (current_connections.length > 1 && current_connections[current_connections.length - 1] === void 0) { current_connections.pop(); } } return current_connections; } // // // OUTPUT CONNECTIONS // // addOutputConnection(connection) { const output_index = connection.outputIndex(); const id = connection.id(); let connections_by_id = this._outputConnections.get(output_index); if (!connections_by_id) { connections_by_id = /* @__PURE__ */ new Map(); this._outputConnections.set(output_index, connections_by_id); } connections_by_id.set(id, connection); } removeOutputConnection(connection) { const output_index = connection.outputIndex(); const id = connection.id(); let connections_by_id = this._outputConnections.get(output_index); if (connections_by_id) { connections_by_id.delete(id); } } outputConnectionsByOutputIndex(outputIndex) { return this._outputConnections.get(outputIndex); } outputConnections(target) { target.length = 0; this._outputConnections.forEach((connections_by_id, output_index) => { connections_by_id.forEach((connection, id) => { if (connection) { target.push(connection); } }); }); return target; } }