polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
71 lines (63 loc) • 2.08 kB
text/typescript
import {NodeContext} from '../../../poly/NodeContext';
import {TypedNode} from '../../_Base';
import {NodeTypeMap} from '../../../containers/utils/ContainerMap';
import {ConnectionPointTypeMap} from './connections/ConnectionMap';
interface DisconnectionOptions {
setInput?: boolean;
}
export class TypedNodeConnection<NC extends NodeContext> {
private static _next_id: number = 0;
private _id: number;
constructor(
private _node_src: TypedNode<NC, any>,
private _node_dest: TypedNode<NC, any>,
private _output_index: number = 0,
private _input_index: number = 0
) {
if (this._output_index == null) {
throw 'bad output index';
}
if (this._input_index == null) {
throw 'bad input index';
}
this._id = TypedNodeConnection._next_id++;
if (this._node_src.io.connections && this._node_dest.io.connections) {
this._node_src.io.connections.add_output_connection(this);
this._node_dest.io.connections.add_input_connection(this);
}
}
get id() {
return this._id;
}
get node_src(): NodeTypeMap[NC] {
return (<unknown>this._node_src) as NodeTypeMap[NC];
}
get node_dest(): NodeTypeMap[NC] {
return (<unknown>this._node_dest) as NodeTypeMap[NC];
}
get output_index() {
return this._output_index;
}
get input_index() {
return this._input_index;
}
src_connection_point(): ConnectionPointTypeMap[NC] {
const node_src = this._node_src;
const output_index = this._output_index;
return node_src.io.outputs.named_output_connection_points[output_index];
}
dest_connection_point(): ConnectionPointTypeMap[NC] {
const node_dest = this._node_dest;
const input_index = this._input_index;
return node_dest.io.inputs.named_input_connection_points[input_index];
}
disconnect(options: DisconnectionOptions = {}) {
if (this._node_src.io.connections && this._node_dest.io.connections) {
this._node_src.io.connections.remove_output_connection(this);
this._node_dest.io.connections.remove_input_connection(this);
}
if (options.setInput === true) {
this._node_dest.io.inputs.setInput(this._input_index, null);
}
}
}