UNPKG

@polygonjs/polygonjs

Version:

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

78 lines (77 loc) 2.46 kB
"use strict"; import { ObjectNamedFunction0, ObjectNamedFunction1, ObjectNamedFunction2, ObjectNamedFunction3 } from "./_Base"; import { ref } from "../../core/reactivity/CoreReactivity"; import { ObjectEvent } from "../../core/geometry/Event"; const EVENT = { type: "" }; const lastEventByObject = /* @__PURE__ */ new Map(); function getOrCreateRef(object3D) { return getObjectRef(object3D) || _createObjectRef(object3D); } function getObjectRef(object3D) { return lastEventByObject.get(object3D); } function _createObjectRef(object3D) { let _ref = lastEventByObject.get(object3D); if (_ref) { return _ref; } _ref = ref(""); lastEventByObject.set(object3D, _ref); return _ref; } function setLastEventName(object3D, eventName) { getOrCreateRef(object3D).value = eventName; } export function onObjectDispatchFunctionNameByEventName(eventName) { return `onObjectDispatchEvent_${eventName}`; } export class objectDispatchEvent extends ObjectNamedFunction1 { static type() { return "objectDispatchEvent"; } func(object3D, eventName) { EVENT.type = eventName; object3D.dispatchEvent(EVENT); setLastEventName(object3D, eventName); } } export class getObjectLastDispatchedEventName extends ObjectNamedFunction0 { static type() { return "getObjectLastDispatchedEventName"; } func(object3D) { return getOrCreateRef(object3D).value; } } function addListeners(evaluator, object3D, eventNames, boundListener) { for (let eventName of eventNames) { if (boundListener) { object3D.addEventListener(eventName, boundListener); } } evaluator.onDispose(() => { for (let eventName of eventNames) { object3D.removeEventListener(eventName, boundListener); } }); } export class objectAddEventListeners extends ObjectNamedFunction3 { static type() { return "objectAddEventListeners"; } func(object3D, eventNamesList, evaluator, boundListener) { const eventNames = eventNamesList.split(" "); addListeners(evaluator, object3D, eventNames, boundListener); return getOrCreateRef(object3D).value; } } export class objectAddOnBeforeDeleteEventListener extends ObjectNamedFunction2 { static type() { return "objectAddOnBeforeDeleteEventListener"; } func(object3D, evaluator, boundListener) { const eventNames = [ObjectEvent.BEFORE_DELETE]; addListeners(evaluator, object3D, eventNames, boundListener); return getOrCreateRef(object3D).value; } }