mirror of
https://github.com/litruv/lit.ruv.wtf.git
synced 2026-07-24 02:36:02 +10:00
66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
/**
|
|
* @file NodeRegistry.js
|
|
* Static registry mapping node type strings to their handler instances.
|
|
*/
|
|
|
|
import { NodeBase } from './NodeBase.js';
|
|
|
|
/**
|
|
* Static registry for all Blueprint node types.
|
|
* Node classes self-register by calling UCLASS_Register during module init.
|
|
*/
|
|
export class NodeRegistry {
|
|
/** @type {Map<string, NodeBase>} */
|
|
static #registry = new Map();
|
|
|
|
/**
|
|
* Registers a node class by its static NodeType.
|
|
* Call once per class, typically at the bottom of the class file.
|
|
*
|
|
* @UFUNCTION(BlueprintCallable)
|
|
* @param {typeof NodeBase} NodeClass
|
|
*/
|
|
static UCLASS_Register(NodeClass) {
|
|
if (!NodeClass.NodeType) {
|
|
throw new Error(`[NodeRegistry] "${NodeClass.name}" is missing a static NodeType.`);
|
|
}
|
|
this.#registry.set(NodeClass.NodeType, new NodeClass());
|
|
}
|
|
|
|
/**
|
|
* Returns the handler instance for a given node type, or null.
|
|
*
|
|
* @UFUNCTION(BlueprintPure)
|
|
* @param {string} nodeType
|
|
* @returns {NodeBase | null}
|
|
*/
|
|
static BlueprintPure_Get(nodeType) {
|
|
return this.#registry.get(nodeType) ?? null;
|
|
}
|
|
|
|
/**
|
|
* Returns all currently registered type strings.
|
|
*
|
|
* @UFUNCTION(BlueprintPure)
|
|
* @returns {string[]}
|
|
*/
|
|
static BlueprintPure_GetRegisteredTypes() {
|
|
return [...this.#registry.keys()];
|
|
}
|
|
|
|
/**
|
|
* Returns default pin configuration for a node type by delegating to the node class.
|
|
*
|
|
* @UFUNCTION(BlueprintPure)
|
|
* @param {string} nodeType
|
|
* @returns {{ inputs: Array<{id: string, name: string, direction: string, kind: string, defaultValue?: string}>, outputs: Array<{id: string, name: string, direction: string, kind: string}> }}
|
|
*/
|
|
static BlueprintPure_GetDefaultPins(nodeType) {
|
|
const handler = this.BlueprintPure_Get(nodeType);
|
|
if (!handler) {
|
|
return { inputs: [], outputs: [] };
|
|
}
|
|
return handler.constructor.BlueprintPure_GetDefaultPins();
|
|
}
|
|
}
|