UNPKG

polygonjs-engine

Version:

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

118 lines (109 loc) 4.49 kB
// import {TypedEventNode} from './_Base'; // import {EventContext} from '../../scene/utils/events/_BaseEventsController'; // import {EventConnectionPoint, EventConnectionPointType} from '../utils/io/connections/Event'; // import {Poly} from '../../Poly'; // import {StringParamLanguage} from '../../params/utils/OptionsController'; // import {TranspiledFilter} from '../utils/code/controllers/TranspiledFilter'; // import {Vector2} from 'three/src/math/Vector2'; // import {Raycaster} from 'three/src/core/Raycaster'; // import * as THREE from 'three'; // three import required to give to the function builder // const DEFAULT_FUNCTION_CODE = ` // import {BaseCodeEventProcessor, EventContext} from 'polygonjs-engine' // export class EventProcessor extends BaseCodeEventProcessor { // initialize_processor(){ // } // process_mouse_event(event_context: EventContext<MouseEvent>){ // this._set_mouse_from_event_and_canvas(event_context.event, event_context.canvas); // console.log(this.node.scene.time); // console.log("processing event", this.mouse.x, this.mouse.y); // } // } // `; // export class BaseCodeEventProcessor { // // it looks like I still need to import raycaster and vector2 without the three namespace // // otherwise they are seen as 'any' in the editor // protected raycaster = new Raycaster(); // protected mouse = new Vector2(); // constructor(protected node: CodeEventNode) { // this.initialize_processor(); // } // process_event(event_context: EventContext<Event>) { // if (event_context.event instanceof MouseEvent) { // this.process_mouse_event(event_context as EventContext<MouseEvent>); // } else if (event instanceof KeyboardEvent) { // this.process_keyboard_event(event_context as EventContext<KeyboardEvent>); // } // } // process_mouse_event(event_context: EventContext<MouseEvent>) {} // process_keyboard_event(event_context: EventContext<KeyboardEvent>) {} // set_node(node: CodeEventNode) { // this.node = node; // } // initialize_processor() {} // protected _set_mouse_from_event_and_canvas(event: MouseEvent, canvas: HTMLCanvasElement) { // this.mouse.x = (event.offsetX / canvas.offsetWidth) * 2 - 1; // this.mouse.y = -(event.offsetY / canvas.offsetHeight) * 2 + 1; // } // } // // type EvaluatedFunction = ( // // base_event_processor_class: typeof BaseCodeEventProcessor, // // THREE: any // // ) => typeof BaseCodeEventProcessor | undefined; // import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig'; // class CodeEventParamsConfig extends NodeParamsConfig { // code_typescript = ParamConfig.STRING(DEFAULT_FUNCTION_CODE, { // // show_label: false, // language: StringParamLanguage.TYPESCRIPT, // }); // code_javascript = ParamConfig.STRING('', {hidden: true}); // } // const ParamsConfig = new CodeEventParamsConfig(); // export class CodeEventNode extends TypedEventNode<CodeEventParamsConfig> { // params_config = ParamsConfig; // private _last_compiled_code: string | undefined; // private _processor: BaseCodeEventProcessor | undefined; // static type() { // return 'code'; // } // initializeNode() { // this.io.inputs.setNamedInputConnectionPoints([ // new EventConnectionPoint('trigger', EventConnectionPointType.BASE), // ]); // } // process_event(event_context: EventContext<Event>) { // this._compile_if_required(); // if (this._processor) { // this._processor.process_event(event_context); // } // } // private _compile_if_required() { // if (!this._processor || this._last_compiled_code != this.pv.code_javascript) { // this._compile(); // } // } // private _compile() { // try { // const function_body = `try { // ${TranspiledFilter.filter(this.pv.code_javascript)} // } catch(e) { // this.states.error.set(e) // }`; // const processor_creator_function: Function = new Function('BaseCodeEventProcessor', 'THREE', function_body); // const processor_class: typeof BaseCodeEventProcessor | undefined = processor_creator_function( // BaseCodeEventProcessor, // THREE // ); // if (processor_class) { // this._processor = new processor_class(this); // this._last_compiled_code = this.pv.code_javascript; // } else { // this.states.error.set(`cannot generate function`); // this._processor = undefined; // } // } catch (e) { // Poly.warn(e); // this.states.error.set(`cannot generate function (${e})`); // this._processor = undefined; // } // } // }