Browse Source

gamepadManager will raise the onGamepadConnected for all gamepads ALREADY connected

David Catuhe 8 years ago
parent
commit
6177ffe83b

File diff suppressed because it is too large
+ 7426 - 7419
dist/preview release/babylon.d.ts


File diff suppressed because it is too large
+ 39 - 39
dist/preview release/babylon.js


+ 29 - 2
dist/preview release/babylon.max.js

@@ -5347,9 +5347,10 @@ var BABYLON;
      * 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.
      */
     var Observable = (function () {
-        function Observable() {
+        function Observable(onObserverAdded) {
             this._observers = new Array();
             this._eventState = new EventState(0);
+            this._onObserverAdded = onObserverAdded;
         }
         /**
          * Create a new Observer with the specified callback
@@ -5370,6 +5371,9 @@ var BABYLON;
             else {
                 this._observers.push(observer);
             }
+            if (this._onObserverAdded) {
+                this._onObserverAdded(observer);
+            }
             return observer;
         };
         /**
@@ -5420,6 +5424,18 @@ var BABYLON;
             return true;
         };
         /**
+         * Notify a specific observer
+         * @param eventData
+         * @param mask
+         */
+        Observable.prototype.notifyObserver = function (observer, eventData, mask) {
+            if (mask === void 0) { mask = -1; }
+            var state = this._eventState;
+            state.mask = mask;
+            state.skipNextObservers = false;
+            observer.callback(eventData, state);
+        };
+        /**
          * return true is the Observable has at least one Observer registered
          */
         Observable.prototype.hasObservers = function () {
@@ -5430,6 +5446,7 @@ var BABYLON;
         */
         Observable.prototype.clear = function () {
             this._observers = new Array();
+            this._onObserverAdded = null;
         };
         /**
         * Clone the current observable
@@ -51628,8 +51645,16 @@ var BABYLON;
             this._gamepadEventSupported = 'GamepadEvent' in window;
             this._gamepadSupport = (navigator.getGamepads ||
                 navigator.webkitGetGamepads || navigator.msGetGamepads || navigator.webkitGamepads);
-            this.onGamepadConnectedObservable = new BABYLON.Observable();
             this.onGamepadDisconnectedObservable = new BABYLON.Observable();
+            this.onGamepadConnectedObservable = new BABYLON.Observable(function (observer) {
+                // This will be used to raise the onGamepadConnected for all gamepads ALREADY connected
+                for (var i in _this._babylonGamepads) {
+                    var gamepad = _this._babylonGamepads[i];
+                    if (gamepad && gamepad._isConnected) {
+                        _this.onGamepadConnectedObservable.notifyObserver(observer, gamepad);
+                    }
+                }
+            });
             this._onGamepadConnectedEvent = function (evt) {
                 var gamepad = evt.gamepad;
                 if (gamepad.index in _this._babylonGamepads) {
@@ -51705,6 +51730,8 @@ var BABYLON;
                 var gamepad = _a[_i];
                 gamepad.dispose();
             }
+            this.onGamepadConnectedObservable.clear();
+            this.onGamepadDisconnectedObservable.clear();
             this._oneGamepadConnected = false;
             this._stopMonitoringGamepads();
             this._babylonGamepads = [];

File diff suppressed because it is too large
+ 7426 - 7419
dist/preview release/babylon.module.d.ts


File diff suppressed because it is too large
+ 39 - 39
dist/preview release/babylon.worker.js


File diff suppressed because it is too large
+ 3752 - 3745
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts


File diff suppressed because it is too large
+ 39 - 39
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js


+ 29 - 2
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js

@@ -5347,9 +5347,10 @@ var BABYLON;
      * 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.
      */
     var Observable = (function () {
-        function Observable() {
+        function Observable(onObserverAdded) {
             this._observers = new Array();
             this._eventState = new EventState(0);
+            this._onObserverAdded = onObserverAdded;
         }
         /**
          * Create a new Observer with the specified callback
@@ -5370,6 +5371,9 @@ var BABYLON;
             else {
                 this._observers.push(observer);
             }
+            if (this._onObserverAdded) {
+                this._onObserverAdded(observer);
+            }
             return observer;
         };
         /**
@@ -5420,6 +5424,18 @@ var BABYLON;
             return true;
         };
         /**
+         * Notify a specific observer
+         * @param eventData
+         * @param mask
+         */
+        Observable.prototype.notifyObserver = function (observer, eventData, mask) {
+            if (mask === void 0) { mask = -1; }
+            var state = this._eventState;
+            state.mask = mask;
+            state.skipNextObservers = false;
+            observer.callback(eventData, state);
+        };
+        /**
          * return true is the Observable has at least one Observer registered
          */
         Observable.prototype.hasObservers = function () {
@@ -5430,6 +5446,7 @@ var BABYLON;
         */
         Observable.prototype.clear = function () {
             this._observers = new Array();
+            this._onObserverAdded = null;
         };
         /**
         * Clone the current observable
@@ -51628,8 +51645,16 @@ var BABYLON;
             this._gamepadEventSupported = 'GamepadEvent' in window;
             this._gamepadSupport = (navigator.getGamepads ||
                 navigator.webkitGetGamepads || navigator.msGetGamepads || navigator.webkitGamepads);
-            this.onGamepadConnectedObservable = new BABYLON.Observable();
             this.onGamepadDisconnectedObservable = new BABYLON.Observable();
+            this.onGamepadConnectedObservable = new BABYLON.Observable(function (observer) {
+                // This will be used to raise the onGamepadConnected for all gamepads ALREADY connected
+                for (var i in _this._babylonGamepads) {
+                    var gamepad = _this._babylonGamepads[i];
+                    if (gamepad && gamepad._isConnected) {
+                        _this.onGamepadConnectedObservable.notifyObserver(observer, gamepad);
+                    }
+                }
+            });
             this._onGamepadConnectedEvent = function (evt) {
                 var gamepad = evt.gamepad;
                 if (gamepad.index in _this._babylonGamepads) {
@@ -51705,6 +51730,8 @@ var BABYLON;
                 var gamepad = _a[_i];
                 gamepad.dispose();
             }
+            this.onGamepadConnectedObservable.clear();
+            this.onGamepadDisconnectedObservable.clear();
             this._oneGamepadConnected = false;
             this._stopMonitoringGamepads();
             this._babylonGamepads = [];

File diff suppressed because it is too large
+ 3752 - 3745
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.module.d.ts


+ 14 - 1
src/Gamepad/babylon.gamepadManager.ts

@@ -8,13 +8,23 @@
         private _gamepadSupport: () => Array<any> = (navigator.getGamepads ||
             navigator.webkitGetGamepads || navigator.msGetGamepads || navigator.webkitGamepads);
 
-        public onGamepadConnectedObservable = new Observable<Gamepad>();
+        public onGamepadConnectedObservable: Observable<Gamepad>;
         public onGamepadDisconnectedObservable = new Observable<Gamepad>();
 
         private _onGamepadConnectedEvent: (evt) => void;
         private _onGamepadDisconnectedEvent: (evt) => void;
 
         constructor() {
+            this.onGamepadConnectedObservable = new Observable<Gamepad>((observer) => {
+                // This will be used to raise the onGamepadConnected for all gamepads ALREADY connected
+                for (var i in this._babylonGamepads) {
+                    let gamepad = this._babylonGamepads[i];
+                    if (gamepad && gamepad._isConnected) {                      
+                        this.onGamepadConnectedObservable.notifyObserver(observer, gamepad);
+                    }
+                }   
+            });
+
             this._onGamepadConnectedEvent = (evt) => {
                 let gamepad = evt.gamepad;
 
@@ -95,6 +105,9 @@
                 gamepad.dispose();
             }
 
+            this.onGamepadConnectedObservable.clear();
+            this.onGamepadDisconnectedObservable.clear();
+
             this._oneGamepadConnected = false;
             this._stopMonitoringGamepads();
             this._babylonGamepads = [];

+ 23 - 1
src/Tools/babylon.observable.ts

@@ -49,8 +49,12 @@
 
         private _eventState: EventState;
 
-        constructor() {
+        private _onObserverAdded: (observer: Observer<T>) => void;
+
+        constructor(onObserverAdded?: (observer: Observer<T>) => void) {
             this._eventState = new EventState(0);
+
+            this._onObserverAdded = onObserverAdded;
         }
 
         /**
@@ -72,6 +76,10 @@
                 this._observers.push(observer);
             }
 
+            if (this._onObserverAdded) {
+                this._onObserverAdded(observer);
+            }
+
             return observer;
         }
 
@@ -131,6 +139,19 @@
         }
 
         /**
+         * Notify a specific observer
+         * @param eventData
+         * @param mask
+         */
+        public notifyObserver(observer: Observer<T>, eventData: T, mask: number = -1): void {
+            let state = this._eventState;
+            state.mask = mask;
+            state.skipNextObservers = false;
+
+            observer.callback(eventData, state);
+        }        
+
+        /**
          * return true is the Observable has at least one Observer registered
          */
         public hasObservers(): boolean {
@@ -142,6 +163,7 @@
         */
         public clear(): void {
             this._observers = new Array<Observer<T>>();
+            this._onObserverAdded = null;
         }
 
         /**