babylon.freecamera.input.keyboard.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  2. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  3. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  4. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  5. return c > 3 && r && Object.defineProperty(target, key, r), r;
  6. };
  7. var BABYLON;
  8. (function (BABYLON) {
  9. var FreeCameraKeyboardMoveInput = (function () {
  10. function FreeCameraKeyboardMoveInput() {
  11. this._keys = [];
  12. this.keysUp = [38];
  13. this.keysDown = [40];
  14. this.keysLeft = [37];
  15. this.keysRight = [39];
  16. }
  17. FreeCameraKeyboardMoveInput.prototype.attachControl = function (element, noPreventDefault) {
  18. var _this = this;
  19. if (!this._onKeyDown) {
  20. if (!element.tabIndex) {
  21. element.tabIndex = 1;
  22. }
  23. this._onKeyDown = function (evt) {
  24. if (_this.keysUp.indexOf(evt.keyCode) !== -1 ||
  25. _this.keysDown.indexOf(evt.keyCode) !== -1 ||
  26. _this.keysLeft.indexOf(evt.keyCode) !== -1 ||
  27. _this.keysRight.indexOf(evt.keyCode) !== -1) {
  28. var index = _this._keys.indexOf(evt.keyCode);
  29. if (index === -1) {
  30. _this._keys.push(evt.keyCode);
  31. }
  32. if (!noPreventDefault) {
  33. evt.preventDefault();
  34. }
  35. }
  36. };
  37. this._onKeyUp = function (evt) {
  38. if (_this.keysUp.indexOf(evt.keyCode) !== -1 ||
  39. _this.keysDown.indexOf(evt.keyCode) !== -1 ||
  40. _this.keysLeft.indexOf(evt.keyCode) !== -1 ||
  41. _this.keysRight.indexOf(evt.keyCode) !== -1) {
  42. var index = _this._keys.indexOf(evt.keyCode);
  43. if (index >= 0) {
  44. _this._keys.splice(index, 1);
  45. }
  46. if (!noPreventDefault) {
  47. evt.preventDefault();
  48. }
  49. }
  50. };
  51. element.addEventListener("keydown", this._onKeyDown, false);
  52. element.addEventListener("keyup", this._onKeyUp, false);
  53. BABYLON.Tools.RegisterTopRootEvents([
  54. { name: "blur", handler: this._onLostFocus }
  55. ]);
  56. }
  57. };
  58. FreeCameraKeyboardMoveInput.prototype.detachControl = function (element) {
  59. if (this._onKeyDown) {
  60. element.removeEventListener("keydown", this._onKeyDown);
  61. element.removeEventListener("keyup", this._onKeyUp);
  62. BABYLON.Tools.UnregisterTopRootEvents([
  63. { name: "blur", handler: this._onLostFocus }
  64. ]);
  65. this._keys = [];
  66. this._onKeyDown = null;
  67. this._onKeyUp = null;
  68. }
  69. };
  70. FreeCameraKeyboardMoveInput.prototype.checkInputs = function () {
  71. if (this._onKeyDown) {
  72. var camera = this.camera;
  73. // Keyboard
  74. for (var index = 0; index < this._keys.length; index++) {
  75. var keyCode = this._keys[index];
  76. var speed = camera._computeLocalCameraSpeed();
  77. if (this.keysLeft.indexOf(keyCode) !== -1) {
  78. camera._localDirection.copyFromFloats(-speed, 0, 0);
  79. }
  80. else if (this.keysUp.indexOf(keyCode) !== -1) {
  81. camera._localDirection.copyFromFloats(0, 0, speed);
  82. }
  83. else if (this.keysRight.indexOf(keyCode) !== -1) {
  84. camera._localDirection.copyFromFloats(speed, 0, 0);
  85. }
  86. else if (this.keysDown.indexOf(keyCode) !== -1) {
  87. camera._localDirection.copyFromFloats(0, 0, -speed);
  88. }
  89. camera.getViewMatrix().invertToRef(camera._cameraTransformMatrix);
  90. BABYLON.Vector3.TransformNormalToRef(camera._localDirection, camera._cameraTransformMatrix, camera._transformedDirection);
  91. camera.cameraDirection.addInPlace(camera._transformedDirection);
  92. }
  93. }
  94. };
  95. FreeCameraKeyboardMoveInput.prototype.getTypeName = function () {
  96. return "FreeCameraKeyboardMoveInput";
  97. };
  98. FreeCameraKeyboardMoveInput.prototype._onLostFocus = function (e) {
  99. this._keys = [];
  100. };
  101. FreeCameraKeyboardMoveInput.prototype.getSimpleName = function () {
  102. return "keyboard";
  103. };
  104. __decorate([
  105. BABYLON.serialize()
  106. ], FreeCameraKeyboardMoveInput.prototype, "keysUp", void 0);
  107. __decorate([
  108. BABYLON.serialize()
  109. ], FreeCameraKeyboardMoveInput.prototype, "keysDown", void 0);
  110. __decorate([
  111. BABYLON.serialize()
  112. ], FreeCameraKeyboardMoveInput.prototype, "keysLeft", void 0);
  113. __decorate([
  114. BABYLON.serialize()
  115. ], FreeCameraKeyboardMoveInput.prototype, "keysRight", void 0);
  116. return FreeCameraKeyboardMoveInput;
  117. }());
  118. BABYLON.FreeCameraKeyboardMoveInput = FreeCameraKeyboardMoveInput;
  119. BABYLON.CameraInputTypes["FreeCameraKeyboardMoveInput"] = FreeCameraKeyboardMoveInput;
  120. })(BABYLON || (BABYLON = {}));