@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
85 lines (77 loc) • 2.74 kB
text/typescript
/**
* A subnet to create actor nodes
*
*/
import {ParamLessBaseNetworkCopNode} from './_BaseManager';
import {NodeContext, NetworkNodeType} from '../../poly/NodeContext';
import {JsNodeChildrenMap} from '../../poly/registers/nodes/Js';
import {BaseJsNodeType} from '../js/_Base';
import {Constructor, valueof} from '../../../types/GlobalTypes';
import {NodeCreateOptions} from '../utils/hierarchy/ChildrenController';
import {ActorPersistedConfig} from '../js/code/assemblers/actor/ActorPersistedConfig';
import {AssemblerName} from '../../poly/registers/assemblers/_BaseRegister';
import {JsAssemblerController} from '../js/code/Controller';
import {JsAssemblerActor} from '../js/code/assemblers/actor/ActorAssembler';
import {ActorCompilationController} from '../../../core/actor/ActorCompilationController';
import {Poly} from '../../Poly';
export class ActorsNetworkCopNode extends ParamLessBaseNetworkCopNode {
static override type() {
return NetworkNodeType.ACTOR;
}
protected override _childrenControllerContext = NodeContext.JS;
override createNode<S extends keyof JsNodeChildrenMap>(
node_class: S,
options?: NodeCreateOptions
): JsNodeChildrenMap[S];
override createNode<K extends valueof<JsNodeChildrenMap>>(
node_class: Constructor<K>,
options?: NodeCreateOptions
): K;
override createNode<K extends valueof<JsNodeChildrenMap>>(
node_class: Constructor<K>,
options?: NodeCreateOptions
): K {
return super.createNode(node_class, options) as K;
}
override children() {
return super.children() as BaseJsNodeType[];
}
override nodesByType<K extends keyof JsNodeChildrenMap>(type: K): JsNodeChildrenMap[K][] {
return super.nodesByType(type) as JsNodeChildrenMap[K][];
}
//
override childrenAllowed() {
if (this.assemblerController()) {
return super.childrenAllowed();
}
return false;
}
override sceneReadonly() {
return this.assemblerController() == null;
}
//
// ASSEMBLERS
//
override readonly persisted_config: ActorPersistedConfig = new ActorPersistedConfig(this);
assemblerController() {
return this._assemblerController;
}
public override usedAssembler(): Readonly<AssemblerName.JS_ACTOR> {
return AssemblerName.JS_ACTOR;
}
protected _assemblerController = this._createAssemblerController();
private _createAssemblerController(): JsAssemblerController<JsAssemblerActor> | undefined {
return Poly.assemblersRegister.assembler(this, this.usedAssembler());
}
//
// compilation
//
public readonly compilationController: ActorCompilationController = new ActorCompilationController(this);
compile() {
this.compilationController.compile();
}
override cook() {
this.compilationController.compileIfRequired();
this.cookController.endCook();
}
}