import * as THREE from "../../libs/three.js/build/three.module.js"; export class ExtendEventDispatcher extends THREE.EventDispatcher { constructor () { super(); } addEventListener(type, listener, importance=0){ //add importance if ( this._listeners === undefined ) this._listeners = {}; const listeners = this._listeners; if ( listeners[ type ] === undefined ) { listeners[ type ] = []; } if ( !listeners[ type ].some(e=>e.listener == listener ) ) { //listeners[ type ].push( listener ); listeners[type].push({ listener, importance}); listeners[type] = listeners[type].sort((e,a)=> a.importance - e.importance)//add } } hasEventListener(type, listener){ if ( this._listeners === undefined ) return false; const listeners = this._listeners; return listeners[ type ] !== undefined && listeners[ type ].some(e=>e.listener == listener ) } removeEventListener(type, listener){ if ( this._listeners === undefined ) return; const listeners = this._listeners; const listenerArray = listeners[ type ]; if ( listenerArray !== undefined ) { /* const index = listenerArray.indexOf( listener ); if ( index !== - 1 ) { listenerArray.splice( index, 1 ); } */ let item = listenerArray.find(e=>e.listener == listener) item && listenerArray.splice(listenerArray.indexOf(item), 1); } } removeEventListeners(type){ //add if(this._listeners && this._listeners[type] !== undefined){ delete this._listeners[type]; } } removeAllListeners(){ //add this._listeners = {}; } dispatchEvent(event){ if(typeof event == 'string'){//add event = {type:event} } if ( this._listeners === undefined ) return; const listeners = this._listeners; const listenerArray = listeners[ event.type ]; if ( listenerArray !== undefined ) { event.target = this; // Make a copy, in case listeners are removed while iterating. for(let {listener} of listenerArray.slice(0)){ let result = listener.call(this, event); //add stopContinue if(result && result.stopContinue){ break } } } } traverse(callback){ let result = callback( this ); if(result && result.stopContinue){//xzw add return } const children = this.children; for ( let i = 0, l = children.length; i < l; i ++ ) { children[ i ].traverse( callback ); } } };