UNPKG

@polygonjs/polygonjs

Version:

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

206 lines (201 loc) 7.01 kB
import {Object3D} from 'three'; import {PolyScene} from '../scene/PolyScene'; import {BaseNodeType} from '../nodes/_Base'; import {BaseJsNodeType} from '../nodes/js/_Base'; import {JsLinesCollectionController} from '../nodes/js/code/utils/JsLinesCollectionController'; import {NodeContext} from '../poly/NodeContext'; import {AssemblerControllerNode} from '../nodes/js/code/Controller'; import {TimeController} from '../scene/utils/TimeController'; import {BaseJsShaderAssembler} from '../nodes/js/code/assemblers/_Base'; import { Tuple1, Tuple2, Tuple3, Tuple4, Tuple5, Tuple6, Tuple7, Tuple8, Tuple9, Tuple10, Tuple11, Tuple12, Tuple13, Tuple14, Tuple15, Tuple16, Tuple17, Tuple18, Tuple19, Tuple20, Tuple21, Tuple22, } from '../../types/GlobalTypes'; export abstract class BaseNamedFunction { // abstract type: string; static type(): string { throw 'type to be overriden'; } type() { const c = this.constructor as typeof BaseNamedFunction; return c.type(); } public readonly scene: PolyScene; public readonly jsNode?: BaseJsNodeType; public readonly functionNode: AssemblerControllerNode<BaseJsShaderAssembler>; public readonly timeController: TimeController; constructor( public readonly node: BaseNodeType, public readonly shadersCollectionController?: JsLinesCollectionController ) { this.scene = node.scene(); this.timeController = this.scene.timeController; if (node.context() == NodeContext.JS) { this.jsNode = node as BaseJsNodeType; this.functionNode = this.jsNode.functionNode()!; } else { this.jsNode = undefined; this.functionNode = node as AssemblerControllerNode<BaseJsShaderAssembler>; } } abstract func(...args: any): any; asString(...args: any): string { if (this.shadersCollectionController) { if (this.jsNode) { this.shadersCollectionController.addFunction(this.jsNode, this); } } else { console.warn('no shadersCollectionController in func', this.type()); } return ''; } } export abstract class NamedFunction<ARGS extends Array<any>, ARGS_STR extends Array<string>> extends BaseNamedFunction { abstract override func(...args: ARGS): any; public async = false; override asString(...args: ARGS_STR): string { super.asString(...args); const functionCall = `${this.type()}(${args.join(', ')})`; return this.async ? `await ${functionCall}` : functionCall; } } export abstract class NamedFunction0 extends NamedFunction<[], []> {} export abstract class NamedFunction1<ARGS extends Tuple1<any>> extends NamedFunction<ARGS, Tuple1<any>> {} export abstract class NamedFunction2<ARGS extends Tuple2<any>> extends NamedFunction<ARGS, Tuple2<string>> {} export abstract class NamedFunction3<ARGS extends Tuple3<any>> extends NamedFunction<ARGS, Tuple3<string>> {} export abstract class NamedFunction4<ARGS extends Tuple4<any>> extends NamedFunction<ARGS, Tuple4<string>> {} export abstract class NamedFunction5<ARGS extends Tuple5<any>> extends NamedFunction<ARGS, Tuple5<string>> {} export abstract class NamedFunction6<ARGS extends Tuple6<any>> extends NamedFunction<ARGS, Tuple6<string>> {} export abstract class NamedFunction7<ARGS extends Tuple7<any>> extends NamedFunction<ARGS, Tuple7<string>> {} export abstract class NamedFunction8<ARGS extends Tuple8<any>> extends NamedFunction<ARGS, Tuple8<string>> {} export abstract class NamedFunction9<ARGS extends Tuple9<any>> extends NamedFunction<ARGS, Tuple9<string>> {} // // // OBJECT // // abstract class ObjectNamedFunction<ARGS extends Array<any>, ARGS_STR extends Array<string>> extends BaseNamedFunction { abstract override func(object: Object3D, ...args: ARGS): any; override asString(...args: ARGS_STR): string { super.asString(...args); return `${this.type()}(${args.join(', ')})`; } } export abstract class ObjectNamedFunction0 extends ObjectNamedFunction<[], Tuple1<string>> {} export abstract class ObjectNamedFunction1<ARGS extends Tuple1<any>> extends ObjectNamedFunction< ARGS, Tuple2<string> > {} export abstract class ObjectNamedFunction2<ARGS extends Tuple2<any>> extends ObjectNamedFunction< ARGS, Tuple3<string> > {} export abstract class ObjectNamedFunction3<ARGS extends Tuple3<any>> extends ObjectNamedFunction< ARGS, Tuple4<string> > {} export abstract class ObjectNamedFunction4<ARGS extends Tuple4<any>> extends ObjectNamedFunction< ARGS, Tuple5<string> > {} export abstract class ObjectNamedFunction5<ARGS extends Tuple5<any>> extends ObjectNamedFunction< ARGS, Tuple6<string> > {} export abstract class ObjectNamedFunction6<ARGS extends Tuple6<any>> extends ObjectNamedFunction< ARGS, Tuple7<string> > {} export abstract class ObjectNamedFunction7<ARGS extends Tuple7<any>> extends ObjectNamedFunction< ARGS, Tuple8<string> > {} export abstract class ObjectNamedFunction8<ARGS extends Tuple8<any>> extends ObjectNamedFunction< ARGS, Tuple9<string> > {} export abstract class ObjectNamedFunction9<ARGS extends Tuple9<any>> extends ObjectNamedFunction< ARGS, Tuple10<string> > {} export abstract class ObjectNamedFunction10<ARGS extends Tuple10<any>> extends ObjectNamedFunction< ARGS, Tuple11<string> > {} export abstract class ObjectNamedFunction11<ARGS extends Tuple11<any>> extends ObjectNamedFunction< ARGS, Tuple12<string> > {} export abstract class ObjectNamedFunction12<ARGS extends Tuple12<any>> extends ObjectNamedFunction< ARGS, Tuple13<string> > {} export abstract class ObjectNamedFunction13<ARGS extends Tuple13<any>> extends ObjectNamedFunction< ARGS, Tuple14<string> > {} export abstract class ObjectNamedFunction14<ARGS extends Tuple14<any>> extends ObjectNamedFunction< ARGS, Tuple15<string> > {} export abstract class ObjectNamedFunction15<ARGS extends Tuple15<any>> extends ObjectNamedFunction< ARGS, Tuple16<string> > {} export abstract class ObjectNamedFunction16<ARGS extends Tuple16<any>> extends ObjectNamedFunction< ARGS, Tuple17<string> > {} export abstract class ObjectNamedFunction17<ARGS extends Tuple17<any>> extends ObjectNamedFunction< ARGS, Tuple18<string> > {} export abstract class ObjectNamedFunction18<ARGS extends Tuple18<any>> extends ObjectNamedFunction< ARGS, Tuple19<string> > {} export abstract class ObjectNamedFunction19<ARGS extends Tuple19<any>> extends ObjectNamedFunction< ARGS, Tuple20<string> > {} export abstract class ObjectNamedFunction20<ARGS extends Tuple20<any>> extends ObjectNamedFunction< ARGS, Tuple21<string> > {} export abstract class ObjectNamedFunction21<ARGS extends Tuple21<any>> extends ObjectNamedFunction< ARGS, Tuple22<string> > {} // // // SCENE // // // abstract class SceneNamedFunction<ARGS extends Array<any>, ARGS_STR extends Array<string>> extends BaseNamedFunction { // abstract override func(object: PolyScene, ...args: ARGS): any; // override asString(...args: ARGS_STR): string { // super.asString(...args); // return `${this.type()}(${EvaluatorConstant.SCENE}, ${args.join(', ')})`; // } // } // export abstract class SceneNamedFunction0 extends SceneNamedFunction<[], []> {}