Просмотр исходного кода

New ```OnKeyDown``` and ```OnKeyUp``` triggers. See [actions wiki](https://github.com/BabylonJS/Babylon.js/wiki/How-to-use-Actions) for more info

David Catuhe 11 лет назад
Родитель
Сommit
d657daae9b

+ 34 - 1
Babylon/Actions/babylon.actionManager.js

@@ -1,16 +1,21 @@
 var BABYLON;
 (function (BABYLON) {
     var ActionEvent = (function () {
-        function ActionEvent(source, pointerX, pointerY, meshUnderPointer) {
+        function ActionEvent(source, pointerX, pointerY, meshUnderPointer, sourceEvent) {
             this.source = source;
             this.pointerX = pointerX;
             this.pointerY = pointerY;
             this.meshUnderPointer = meshUnderPointer;
+            this.sourceEvent = sourceEvent;
         }
         ActionEvent.CreateNew = function (source) {
             var scene = source.getScene();
             return new ActionEvent(source, scene.pointerX, scene.pointerY, scene.meshUnderPointer);
         };
+
+        ActionEvent.CreateNewFromScene = function (scene, evt) {
+            return new ActionEvent(null, scene.pointerX, scene.pointerY, scene.meshUnderPointer, evt);
+        };
         return ActionEvent;
     })();
     BABYLON.ActionEvent = ActionEvent;
@@ -103,6 +108,22 @@
             configurable: true
         });
 
+        Object.defineProperty(ActionManager, "OnKeyDownTrigger", {
+            get: function () {
+                return ActionManager._OnKeyDownTrigger;
+            },
+            enumerable: true,
+            configurable: true
+        });
+
+        Object.defineProperty(ActionManager, "OnKeyUpTrigger", {
+            get: function () {
+                return ActionManager._OnKeyUpTrigger;
+            },
+            enumerable: true,
+            configurable: true
+        });
+
         // Methods
         ActionManager.prototype.dispose = function () {
             var index = this._scene._actionManagers.indexOf(this);
@@ -181,6 +202,16 @@
                 var action = this.actions[index];
 
                 if (action.trigger === trigger) {
+                    if (trigger == ActionManager.OnKeyUpTrigger || trigger == ActionManager.OnKeyDownTrigger) {
+                        var parameter = action.getTriggerParameter();
+
+                        if (parameter) {
+                            if (evt.sourceEvent.key !== parameter) {
+                                continue;
+                            }
+                        }
+                    }
+
                     action._executeCurrent(evt);
                 }
             }
@@ -211,6 +242,8 @@
         ActionManager._OnEveryFrameTrigger = 7;
         ActionManager._OnIntersectionEnterTrigger = 8;
         ActionManager._OnIntersectionExitTrigger = 9;
+        ActionManager._OnKeyDownTrigger = 10;
+        ActionManager._OnKeyUpTrigger = 11;
         return ActionManager;
     })();
     BABYLON.ActionManager = ActionManager;

+ 24 - 1
Babylon/Actions/babylon.actionManager.ts

@@ -1,7 +1,7 @@
 module BABYLON {
 
     export class ActionEvent {
-        constructor(public source: AbstractMesh, public pointerX: number, public pointerY: number, public meshUnderPointer: AbstractMesh) {
+        constructor(public source: AbstractMesh, public pointerX: number, public pointerY: number, public meshUnderPointer: AbstractMesh, public sourceEvent?: any) {
             
         }
 
@@ -9,6 +9,10 @@
             var scene = source.getScene();
             return new ActionEvent(source, scene.pointerX, scene.pointerY, scene.meshUnderPointer);
         }
+
+        public static CreateNewFromScene(scene: Scene, evt:Event): ActionEvent {
+            return new ActionEvent(null, scene.pointerX, scene.pointerY, scene.meshUnderPointer, evt);
+        }
     }
 
     export class ActionManager {
@@ -23,6 +27,8 @@
         private static _OnEveryFrameTrigger = 7;
         private static _OnIntersectionEnterTrigger = 8;
         private static _OnIntersectionExitTrigger = 9;
+        private static _OnKeyDownTrigger = 10;
+        private static _OnKeyUpTrigger = 11;
 
         public static get NothingTrigger(): number {
             return ActionManager._NothingTrigger;
@@ -64,6 +70,13 @@
             return ActionManager._OnIntersectionExitTrigger;
         }
 
+        public static get OnKeyDownTrigger(): number {
+            return ActionManager._OnKeyDownTrigger;
+        }
+
+        public static get OnKeyUpTrigger(): number {
+            return ActionManager._OnKeyUpTrigger;
+        }
         // Members
         public actions = new Array<Action>();
 
@@ -146,6 +159,16 @@
                 var action = this.actions[index];
 
                 if (action.trigger === trigger) {
+                    if (trigger == ActionManager.OnKeyUpTrigger || trigger == ActionManager.OnKeyDownTrigger) {
+                        var parameter = action.getTriggerParameter();
+
+                        if (parameter) {
+                            if (evt.sourceEvent.key !== parameter) {
+                                continue;
+                            }
+                        }
+                    }
+
                     action._executeCurrent(evt);
                 }
             }

+ 18 - 0
Babylon/babylon.scene.js

@@ -246,15 +246,33 @@
                 }
             };
 
+            this._onKeyDown = function (evt) {
+                if (_this.actionManager) {
+                    _this.actionManager.processTrigger(BABYLON.ActionManager.OnKeyDownTrigger, BABYLON.ActionEvent.CreateNewFromScene(_this, evt));
+                }
+            };
+
+            this._onKeyUp = function (evt) {
+                if (_this.actionManager) {
+                    _this.actionManager.processTrigger(BABYLON.ActionManager.OnKeyUpTrigger, BABYLON.ActionEvent.CreateNewFromScene(_this, evt));
+                }
+            };
+
             var eventPrefix = BABYLON.Tools.GetPointerPrefix();
             this._engine.getRenderingCanvas().addEventListener(eventPrefix + "move", this._onPointerMove, false);
             this._engine.getRenderingCanvas().addEventListener(eventPrefix + "down", this._onPointerDown, false);
+
+            window.addEventListener("keydown", this._onKeyDown, false);
+            window.addEventListener("keyup", this._onKeyUp, false);
         };
 
         Scene.prototype.detachControl = function () {
             var eventPrefix = BABYLON.Tools.GetPointerPrefix();
             this._engine.getRenderingCanvas().removeEventListener(eventPrefix + "move", this._onPointerMove);
             this._engine.getRenderingCanvas().removeEventListener(eventPrefix + "down", this._onPointerDown);
+
+            window.removeEventListener("keydown", this._onKeyDown);
+            window.removeEventListener("keyup", this._onKeyUp);
         };
 
         // Ready

+ 22 - 0
Babylon/babylon.scene.ts

@@ -34,6 +34,10 @@
         private _pointerY: number;
         private _meshUnderPointer: AbstractMesh;
 
+        // Keyboard
+        private _onKeyDown: (evt: Event) => void;
+        private _onKeyUp: (evt: Event) => void;
+
         // Fog
         public fogMode = BABYLON.Scene.FOGMODE_NONE;
         public fogColor = new Color3(0.2, 0.2, 0.3);
@@ -317,16 +321,34 @@
                 }
             };
 
+            this._onKeyDown = (evt: Event) => {
+                if (this.actionManager) {
+                    this.actionManager.processTrigger(BABYLON.ActionManager.OnKeyDownTrigger, ActionEvent.CreateNewFromScene(this, evt));
+                }
+            };
+
+            this._onKeyUp = (evt: Event) => {
+                if (this.actionManager) {
+                    this.actionManager.processTrigger(BABYLON.ActionManager.OnKeyUpTrigger, ActionEvent.CreateNewFromScene(this, evt));
+                }
+            };
+
 
             var eventPrefix = Tools.GetPointerPrefix();
             this._engine.getRenderingCanvas().addEventListener(eventPrefix + "move", this._onPointerMove, false);
             this._engine.getRenderingCanvas().addEventListener(eventPrefix + "down", this._onPointerDown, false);
+
+            window.addEventListener("keydown", this._onKeyDown, false);
+            window.addEventListener("keyup", this._onKeyUp, false);
         }
 
         public detachControl() {
             var eventPrefix = Tools.GetPointerPrefix();
             this._engine.getRenderingCanvas().removeEventListener(eventPrefix + "move", this._onPointerMove);
             this._engine.getRenderingCanvas().removeEventListener(eventPrefix + "down", this._onPointerDown);
+
+            window.removeEventListener("keydown", this._onKeyDown);
+            window.removeEventListener("keyup", this._onKeyUp);
         }
 
         // Ready

Разница между файлами не показана из-за своего большого размера
+ 2 - 2
babylon.1.13-beta-debug.js


Разница между файлами не показана из-за своего большого размера
+ 6 - 6
babylon.1.13-beta.js