123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 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 );
-
- }
- }
-
- };
|