let Queue = require('./Queue');
cc.Class({
extends: cc.Component,
properties: {
eventCount: 0, //被观察者总数目
count: 0,
},
onLoad() {
window.GameEvent = this;
this.observerDic = new Array(3);
for(let i = 0; i < 3; i++){
this.observerDic[i] = {};
}
this.eventDic = new Array(3);
for(let i = 0; i < 3; i++){
this.eventDic[i] = new Queue();
}
this.maxPerFrame = 3;
},
update(dt) {
this.eventCount = this.eventDic[0].size() + this.eventDic[1].size() + this.eventDic[2].size();
if (this.eventCount <= 0) return;
this.count = 0;
for (let i = 0; i < this.eventCount; i++) {
if (this.eventDic[0].size() > 0) {
let event = this.eventDic[0].dequeue();
if (this.observerDic[0][event.eventType]) {
this.observerDic[0][event.eventType](event.data);
this.count++;
}
} else if (this.eventDic[1].size() > 0) {
let event = this.eventDic[1].dequeue();
if (this.observerDic[1][event.eventType]) {
this.observerDic[1][event.eventType](event.data);
this.count++;
}
} else {
let event = this.eventDic[2].dequeue();
if (this.observerDic[2][event.eventType]) {
this.observerDic[2][event.eventType](event.data);
this.count++;
}
}
if (this.count >= this.maxPerFrame) {
break;
}
}
},
addObserver(eventType, observer, priority = 0) {
this.observerDic[priority][eventType] = observer;
},
removeObserver(eventType, priority = 0) {
this.observerDic[priority][eventType] = null;
delete this.observerDic[priority][eventType];
},
addEvent(eventType, data, priority = 0) {
this.eventDic[priority].enqueue({
eventType: eventType,
data: data
});
},
});
let Queue = function () {
this.dataStore = [];
}
//向队末尾添加一个元素
Queue.prototype.enqueue = function (element) {
// console.log("element"+element);
this.dataStore.push(element)
}
Queue.prototype.dequeue = function () {
return this.dataStore.shift();
}
Queue.prototype.clear = function () {
return this.dataStore =[];
}
Queue.prototype.front = function () { //读取队首和队末的 元素
return this.dataStore[0];
}
Queue.prototype.back = function () { 读取队首和队末的元素
return this.dataStore[this.dataStore.length - 1]
}
//显示队列内的所有元素
Queue.prototype.toString = function () {
var retStr = "";
for (var i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + "\n";
}
return retStr
}
//队列是否为空
Queue.prototype.empty = function () {
if (this.dataStore.length == 0) {
return true;
} else {
return false;
}
}
Queue.prototype.size = function () {
return this.dataStore.length;
}
module.exports = Queue;