@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
119 lines (118 loc) • 3.54 kB
JavaScript
"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;
}
}