|
@@ -9,8 +9,13 @@
|
|
|
* If the callback of a given Observer set skipNextObservers to true the following observers will be ignored
|
|
|
*/
|
|
|
constructor(mask: number, skipNextObservers = false) {
|
|
|
+ this.initalize(mask, skipNextObservers);
|
|
|
+ }
|
|
|
+
|
|
|
+ public initalize(mask: number, skipNextObservers = false): EventState {
|
|
|
this.mask = mask;
|
|
|
this.skipNextObservers = skipNextObservers;
|
|
|
+ return this;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -40,6 +45,8 @@
|
|
|
* A given observer can register itself with only Move and Stop (mask = 0x03), then it will only be notified when one of these two occurs and will never be for Turn Left/Right.
|
|
|
*/
|
|
|
export class Observable<T> {
|
|
|
+ private static _pooledEventState: EventState = null;
|
|
|
+
|
|
|
_observers = new Array<Observer<T>>();
|
|
|
|
|
|
/**
|
|
@@ -103,7 +110,8 @@
|
|
|
* @param mask
|
|
|
*/
|
|
|
public notifyObservers(eventData: T, mask: number = -1): void {
|
|
|
- var state = new EventState(mask);
|
|
|
+ var state = Observable._pooledEventState ? Observable._pooledEventState.initalize(mask) : new EventState(mask);
|
|
|
+ Observable._pooledEventState = null;
|
|
|
|
|
|
for (var obs of this._observers) {
|
|
|
if (obs.mask & mask) {
|
|
@@ -113,6 +121,8 @@
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ Observable._pooledEventState = state;
|
|
|
}
|
|
|
|
|
|
/**
|