Browse Source

Update Process Event to take sprites in account.

sebastien 7 năm trước cách đây
mục cha
commit
41cbb65420

+ 10 - 4
src/Sprites/babylon.spriteSceneComponent.ts

@@ -2,7 +2,7 @@
     export interface ActionManager {
 
     }
-    
+
     export interface Scene {
         /** @hidden */
         _pointerOverSprite: Nullable<Sprite>;
@@ -227,7 +227,7 @@
             return result;
         }
 
-        private _pointerMove(unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, isMeshPicked: boolean, canvas: HTMLCanvasElement): void {
+        private _pointerMove(unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, isMeshPicked: boolean, canvas: HTMLCanvasElement): Nullable<PickingInfo> {
             var scene = this.scene;
             if (isMeshPicked) {
                 scene.setPointerOverSprite(null);
@@ -247,9 +247,11 @@
                     canvas.style.cursor = scene.defaultCursor;
                 }
             }
+
+            return pickResult;
         }
 
-        private _pointerDown(unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, evt: PointerEvent): void {
+        private _pointerDown(unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, evt: PointerEvent): Nullable<PickingInfo> {
             var scene = this.scene;
             scene._pickedDownSprite = null;
             if (scene.spriteManagers.length > 0) {
@@ -275,9 +277,11 @@
                     }
                 }
             }
+
+            return pickResult;
         }
 
-        private _pointerUp(unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, evt: PointerEvent): void {
+        private _pointerUp(unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, evt: PointerEvent): Nullable<PickingInfo> {
             var scene = this.scene;
             if (scene.spriteManagers.length > 0) {
                 let spritePickResult = scene.pickSprite(unTranslatedPointerX, unTranslatedPointerY, this._spritePredicate, false, scene.cameraToUseForPointers || undefined);
@@ -298,6 +302,8 @@
                     }
                 }
             }
+
+            return pickResult;
         }
     }
 }

+ 14 - 11
src/babylon.scene.ts

@@ -1571,7 +1571,7 @@
             }
 
             for (let step of this._pointerMoveStage) {
-                step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, isMeshPicked, canvas);
+                pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, isMeshPicked, canvas);
             }
 
             if (pickResult) {
@@ -1659,6 +1659,11 @@
                     }
                 }
             }
+            else {
+                for (let step of this._pointerDownStage) {
+                    pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);
+                }
+            }
 
             if (pickResult) {
                 let type = PointerEventTypes.POINTERDOWN;
@@ -1723,6 +1728,14 @@
                     }
                 }
             }
+            else {
+                if (!clickInfo.ignore) {
+                    for (let step of this._pointerUpStage) {
+                        pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);
+                    }
+                }
+            }
+
             if (this._pickedDownMesh &&
                 this._pickedDownMesh.actionManager &&
                 this._pickedDownMesh.actionManager.hasSpecificTrigger(ActionManager.OnPickOutTrigger) &&
@@ -1975,10 +1988,6 @@
                 var pickResult = this.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, this.pointerDownPredicate, false, this.cameraToUseForPointers);
 
                 this._processPointerDown(pickResult, evt);
-
-                for (let step of this._pointerDownStage) {
-                    step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);
-                }
             };
 
             this._onPointerUp = (evt: PointerEvent) => {
@@ -2037,12 +2046,6 @@
 
                     this._processPointerUp(pickResult, evt, clickInfo);
 
-                    if (!clickInfo.ignore) {
-                        for (let step of this._pointerUpStage) {
-                            step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);
-                        }
-                    }
-
                     this._previousPickResult = this._currentPickResult;
                 });
             };

+ 2 - 2
src/babylon.sceneComponent.ts

@@ -148,12 +148,12 @@
     /** 
      * Strong typing of a pointer move action.
      */
-    export type PointerMoveStageAction = (unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, isMeshPicked: boolean, canvas: HTMLCanvasElement) => void;
+    export type PointerMoveStageAction = (unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, isMeshPicked: boolean, canvas: HTMLCanvasElement) => Nullable<PickingInfo>;
 
     /** 
      * Strong typing of a pointer up/down action.
      */
-    export type PointerUpDownStageAction = (unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, evt: PointerEvent) => void;
+    export type PointerUpDownStageAction = (unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, evt: PointerEvent) => Nullable<PickingInfo>;
 
     /** 
      * Repressentation of a stage in the scene (Basically a list of ordered steps)