瀏覽代碼

Fixed a bug with OnPickUp trigger which was not triggered everytime

David Catuhe 9 年之前
父節點
當前提交
e0e937b8f6

文件差異過大導致無法顯示
+ 11 - 11
dist/preview release/babylon.core.js


文件差異過大導致無法顯示
+ 1038 - 1036
dist/preview release/babylon.d.ts


文件差異過大導致無法顯示
+ 17 - 17
dist/preview release/babylon.js


+ 11 - 1
dist/preview release/babylon.max.js

@@ -12563,6 +12563,7 @@ var BABYLON;
                 _this._startingPointerTime = new Date().getTime();
                 var predicate = null;
                 // Meshes
+                _this._pickedDownMesh = null;
                 if (!_this.onPointerDown && !_this.onPointerPick) {
                     predicate = function (mesh) {
                         return mesh.isPickable && mesh.isVisible && mesh.isReady() && mesh.actionManager && mesh.actionManager.hasPointerTriggers;
@@ -12570,8 +12571,8 @@ var BABYLON;
                 }
                 var pickResult = _this.pick(_this._pointerX, _this._pointerY, predicate, false, _this.cameraToUseForPointers);
                 if (pickResult.hit && pickResult.pickedMesh) {
-                    _this._pickedMeshName = pickResult.pickedMesh.name;
                     if (pickResult.pickedMesh.actionManager) {
+                        _this._pickedMeshName = pickResult.pickedMesh.name;
                         if (pickResult.pickedMesh.actionManager.hasPickTriggers) {
                             switch (evt.button) {
                                 case 0:
@@ -12592,6 +12593,7 @@ var BABYLON;
                                 var pickResult = that.pick(that._pointerX, that._pointerY, function (mesh) { return mesh.isPickable && mesh.isVisible && mesh.isReady() && mesh.actionManager && mesh.actionManager.hasSpecificTrigger(BABYLON.ActionManager.OnLongPressTrigger); }, false, that.cameraToUseForPointers);
                                 if (pickResult.hit && pickResult.pickedMesh) {
                                     if (pickResult.pickedMesh.actionManager) {
+                                        this._pickedDownMesh = pickResult.pickedMesh;
                                         if (that._startingPointerTime !== 0 && ((new Date().getTime() - that._startingPointerTime) > BABYLON.ActionManager.LongPressDelay) && (Math.abs(that._startingPointerPosition.x - that._pointerX) < BABYLON.ActionManager.DragMovementThreshold && Math.abs(that._startingPointerPosition.y - that._pointerY) < BABYLON.ActionManager.DragMovementThreshold)) {
                                             that._startingPointerTime = 0;
                                             pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnLongPressTrigger, BABYLON.ActionEvent.CreateNew(pickResult.pickedMesh, evt));
@@ -12606,10 +12608,12 @@ var BABYLON;
                     _this.onPointerDown(evt, pickResult);
                 }
                 // Sprites
+                _this._pickedDownSprite = null;
                 if (_this.spriteManagers.length > 0) {
                     pickResult = _this.pickSprite(_this._pointerX, _this._pointerY, spritePredicate, false, _this.cameraToUseForPointers);
                     if (pickResult.hit && pickResult.pickedSprite) {
                         if (pickResult.pickedSprite.actionManager) {
+                            _this._pickedDownSprite = pickResult.pickedSprite;
                             switch (evt.button) {
                                 case 0:
                                     pickResult.pickedSprite.actionManager.processTrigger(BABYLON.ActionManager.OnLeftPickTrigger, BABYLON.ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, _this, evt));
@@ -12650,6 +12654,9 @@ var BABYLON;
                         }
                     }
                 }
+                if (_this._pickedDownMesh && _this._pickedDownMesh !== pickResult.pickedMesh) {
+                    _this._pickedDownMesh.actionManager.processTrigger(BABYLON.ActionManager.OnPickUpTrigger, BABYLON.ActionEvent.CreateNew(_this._pickedDownMesh, evt));
+                }
                 if (_this.onPointerUp) {
                     _this.onPointerUp(evt, pickResult);
                 }
@@ -12665,6 +12672,9 @@ var BABYLON;
                             }
                         }
                     }
+                    if (_this._pickedDownSprite && _this._pickedDownSprite !== pickResult.pickedSprite) {
+                        _this._pickedDownSprite.actionManager.processTrigger(BABYLON.ActionManager.OnPickUpTrigger, BABYLON.ActionEvent.CreateNewFromSprite(_this._pickedDownSprite, _this, evt));
+                    }
                 }
             };
             this._onKeyDown = function (evt) {

文件差異過大導致無法顯示
+ 20 - 20
dist/preview release/babylon.noworker.js


+ 1 - 0
dist/preview release/what's new.md

@@ -5,4 +5,5 @@
     - New OnPickTrigger support for spritesManager ([deltakosh](https://github.com/deltakosh))
     - New SPS method `digest()` ([jerome](https://github.com/jbousquie))
   - **Bug fixes**
+    - Fixed a bug with OnPickUp trigger which was not triggered everytime ([deltakosh](https://github.com/deltakosh))
   - **Breaking changes**

+ 11 - 1
src/babylon.scene.js

@@ -367,6 +367,7 @@ var BABYLON;
                 _this._startingPointerTime = new Date().getTime();
                 var predicate = null;
                 // Meshes
+                _this._pickedDownMesh = null;
                 if (!_this.onPointerDown && !_this.onPointerPick) {
                     predicate = function (mesh) {
                         return mesh.isPickable && mesh.isVisible && mesh.isReady() && mesh.actionManager && mesh.actionManager.hasPointerTriggers;
@@ -374,8 +375,8 @@ var BABYLON;
                 }
                 var pickResult = _this.pick(_this._pointerX, _this._pointerY, predicate, false, _this.cameraToUseForPointers);
                 if (pickResult.hit && pickResult.pickedMesh) {
-                    _this._pickedMeshName = pickResult.pickedMesh.name;
                     if (pickResult.pickedMesh.actionManager) {
+                        _this._pickedMeshName = pickResult.pickedMesh.name;
                         if (pickResult.pickedMesh.actionManager.hasPickTriggers) {
                             switch (evt.button) {
                                 case 0:
@@ -396,6 +397,7 @@ var BABYLON;
                                 var pickResult = that.pick(that._pointerX, that._pointerY, function (mesh) { return mesh.isPickable && mesh.isVisible && mesh.isReady() && mesh.actionManager && mesh.actionManager.hasSpecificTrigger(BABYLON.ActionManager.OnLongPressTrigger); }, false, that.cameraToUseForPointers);
                                 if (pickResult.hit && pickResult.pickedMesh) {
                                     if (pickResult.pickedMesh.actionManager) {
+                                        this._pickedDownMesh = pickResult.pickedMesh;
                                         if (that._startingPointerTime !== 0 && ((new Date().getTime() - that._startingPointerTime) > BABYLON.ActionManager.LongPressDelay) && (Math.abs(that._startingPointerPosition.x - that._pointerX) < BABYLON.ActionManager.DragMovementThreshold && Math.abs(that._startingPointerPosition.y - that._pointerY) < BABYLON.ActionManager.DragMovementThreshold)) {
                                             that._startingPointerTime = 0;
                                             pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnLongPressTrigger, BABYLON.ActionEvent.CreateNew(pickResult.pickedMesh, evt));
@@ -410,10 +412,12 @@ var BABYLON;
                     _this.onPointerDown(evt, pickResult);
                 }
                 // Sprites
+                _this._pickedDownSprite = null;
                 if (_this.spriteManagers.length > 0) {
                     pickResult = _this.pickSprite(_this._pointerX, _this._pointerY, spritePredicate, false, _this.cameraToUseForPointers);
                     if (pickResult.hit && pickResult.pickedSprite) {
                         if (pickResult.pickedSprite.actionManager) {
+                            _this._pickedDownSprite = pickResult.pickedSprite;
                             switch (evt.button) {
                                 case 0:
                                     pickResult.pickedSprite.actionManager.processTrigger(BABYLON.ActionManager.OnLeftPickTrigger, BABYLON.ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, _this, evt));
@@ -454,6 +458,9 @@ var BABYLON;
                         }
                     }
                 }
+                if (_this._pickedDownMesh && _this._pickedDownMesh !== pickResult.pickedMesh) {
+                    _this._pickedDownMesh.actionManager.processTrigger(BABYLON.ActionManager.OnPickUpTrigger, BABYLON.ActionEvent.CreateNew(_this._pickedDownMesh, evt));
+                }
                 if (_this.onPointerUp) {
                     _this.onPointerUp(evt, pickResult);
                 }
@@ -469,6 +476,9 @@ var BABYLON;
                             }
                         }
                     }
+                    if (_this._pickedDownSprite && _this._pickedDownSprite !== pickResult.pickedSprite) {
+                        _this._pickedDownSprite.actionManager.processTrigger(BABYLON.ActionManager.OnPickUpTrigger, BABYLON.ActionEvent.CreateNewFromSprite(_this._pickedDownSprite, _this, evt));
+                    }
                 }
             };
             this._onKeyDown = function (evt) {

+ 15 - 1
src/babylon.scene.ts

@@ -280,6 +280,8 @@
         private _uniqueIdCounter = 0;
 
         private _pickedMeshName: string = null;
+        private _pickedDownMesh: AbstractMesh;
+        private _pickedDownSprite: Sprite;
 
         /**
          * @constructor
@@ -520,6 +522,7 @@
                 var predicate = null;
 
                 // Meshes
+                this._pickedDownMesh = null;
                 if (!this.onPointerDown && !this.onPointerPick) {
                     predicate = (mesh: AbstractMesh): boolean => {
                         return mesh.isPickable && mesh.isVisible && mesh.isReady() && mesh.actionManager && mesh.actionManager.hasPointerTriggers;
@@ -528,8 +531,8 @@
                 var pickResult = this.pick(this._pointerX, this._pointerY, predicate, false, this.cameraToUseForPointers);
 
                 if (pickResult.hit && pickResult.pickedMesh) {
-                    this._pickedMeshName = pickResult.pickedMesh.name;
                     if (pickResult.pickedMesh.actionManager) {
+                        this._pickedMeshName = pickResult.pickedMesh.name;
                         if (pickResult.pickedMesh.actionManager.hasPickTriggers) {
                             switch (evt.button) {
                                 case 0:
@@ -554,6 +557,7 @@
 
                                 if (pickResult.hit && pickResult.pickedMesh) {
                                     if (pickResult.pickedMesh.actionManager) {
+                                        this._pickedDownMesh = pickResult.pickedMesh;
                                         if (that._startingPointerTime !== 0 && ((new Date().getTime() - that._startingPointerTime) > ActionManager.LongPressDelay) && (Math.abs(that._startingPointerPosition.x - that._pointerX) < ActionManager.DragMovementThreshold && Math.abs(that._startingPointerPosition.y - that._pointerY) < ActionManager.DragMovementThreshold)) {
                                             that._startingPointerTime = 0;
                                             pickResult.pickedMesh.actionManager.processTrigger(ActionManager.OnLongPressTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt));
@@ -570,11 +574,13 @@
                 }
 
                 // Sprites
+                this._pickedDownSprite = null;
                 if (this.spriteManagers.length > 0) {
                     pickResult = this.pickSprite(this._pointerX, this._pointerY, spritePredicate, false, this.cameraToUseForPointers);
 
                     if (pickResult.hit && pickResult.pickedSprite) {
                         if (pickResult.pickedSprite.actionManager) {
+                            this._pickedDownSprite = pickResult.pickedSprite;
                             switch (evt.button) {
                                 case 0:
                                     pickResult.pickedSprite.actionManager.processTrigger(ActionManager.OnLeftPickTrigger, ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, this, evt));
@@ -622,6 +628,10 @@
                         }
                     }
                 }
+                if (this._pickedDownMesh && this._pickedDownMesh !== pickResult.pickedMesh) {
+                    this._pickedDownMesh.actionManager.processTrigger(ActionManager.OnPickUpTrigger, ActionEvent.CreateNew(this._pickedDownMesh, evt));
+                }
+                
 
                 if (this.onPointerUp) {
                     this.onPointerUp(evt, pickResult);
@@ -642,6 +652,10 @@
                             }
                         }
                     }
+                    if (this._pickedDownSprite && this._pickedDownSprite !== pickResult.pickedSprite) {
+                        this._pickedDownSprite.actionManager.processTrigger(ActionManager.OnPickUpTrigger, ActionEvent.CreateNewFromSprite(this._pickedDownSprite, this, evt));
+                    }
+
                 }
             };