“初始化俯视角工程,带puerts,未编过”
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making Puerts available.
|
||||
* Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* Puerts is licensed under the BSD 3-Clause License, except for the third-party components listed in the file 'LICENSE' which may be subject to their corresponding license terms.
|
||||
* This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package.
|
||||
*/
|
||||
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
let events = Object.create(null);
|
||||
let eventsCount = 0;
|
||||
|
||||
function checkListener(listener) {
|
||||
if (typeof listener !== 'function') {
|
||||
throw new Error('listener expect a function');
|
||||
}
|
||||
}
|
||||
|
||||
function on(type, listener, prepend) {
|
||||
checkListener(listener);
|
||||
|
||||
let existing = events[type];
|
||||
if (existing === undefined) {
|
||||
events[type] = listener;
|
||||
++eventsCount;
|
||||
} else {
|
||||
if (typeof existing === 'function') {
|
||||
events[type] = prepend ? [listener, existing] : [existing, listener];
|
||||
} else if (prepend) {
|
||||
existing.unshift(listener);
|
||||
} else {
|
||||
existing.push(listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function off(type, listener) {
|
||||
checkListener(listener);
|
||||
|
||||
const list = events[type];
|
||||
if (list === undefined)
|
||||
return;
|
||||
if (list === listener) {
|
||||
if (--eventsCount === 0)
|
||||
events = Object.create(null);
|
||||
else {
|
||||
events[type] = undefined;
|
||||
}
|
||||
} else if (typeof list !== 'function') {
|
||||
for (var i = list.length - 1; i >= 0; i--) {
|
||||
if (list[i] === listener) { //found
|
||||
if (i === 0)
|
||||
list.shift();
|
||||
else {
|
||||
spliceOne(list, i);
|
||||
}
|
||||
|
||||
if (list.length === 1)
|
||||
events[type] = list[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function emit(type, ...args) {
|
||||
const listener = events[type];
|
||||
|
||||
if (listener === undefined)
|
||||
return false;
|
||||
|
||||
if (typeof listener === 'function') {
|
||||
Reflect.apply(listener, this, args);
|
||||
} else {
|
||||
const len = listener.length;
|
||||
const listeners = arrayClone(listener, len);
|
||||
for (var i = 0; i < len; ++i)
|
||||
Reflect.apply(listeners[i], this, args);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function arrayClone(arr, n) {
|
||||
const copy = new Array(n);
|
||||
for (var i = 0; i < n; ++i)
|
||||
copy[i] = arr[i];
|
||||
return copy;
|
||||
}
|
||||
|
||||
function spliceOne(list, index) {
|
||||
for (; index + 1 < list.length; index++)
|
||||
list[index] = list[index + 1];
|
||||
list.pop();
|
||||
}
|
||||
|
||||
puerts.on = on;
|
||||
puerts.off = off;
|
||||
puerts.emit = emit;
|
||||
}());
|
||||
Reference in New Issue
Block a user