babylon.arcrotatecamera.input.keyboard.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. module BABYLON {
  2. export class ArcRotateCameraKeyboardMoveInput implements ICameraInput<ArcRotateCamera> {
  3. camera: ArcRotateCamera;
  4. private _keys = [];
  5. private _onKeyDown: (e: KeyboardEvent) => any;
  6. private _onKeyUp: (e: KeyboardEvent) => any;
  7. private _onLostFocus: (e: FocusEvent) => any;
  8. @serialize()
  9. public keysUp = [38];
  10. @serialize()
  11. public keysDown = [40];
  12. @serialize()
  13. public keysLeft = [37];
  14. @serialize()
  15. public keysRight = [39];
  16. public attachControl(element: HTMLElement, noPreventDefault?: boolean) {
  17. this._onKeyDown = evt => {
  18. if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
  19. this.keysDown.indexOf(evt.keyCode) !== -1 ||
  20. this.keysLeft.indexOf(evt.keyCode) !== -1 ||
  21. this.keysRight.indexOf(evt.keyCode) !== -1) {
  22. var index = this._keys.indexOf(evt.keyCode);
  23. if (index === -1) {
  24. this._keys.push(evt.keyCode);
  25. }
  26. if (evt.preventDefault) {
  27. if (!noPreventDefault) {
  28. evt.preventDefault();
  29. }
  30. }
  31. }
  32. };
  33. this._onKeyUp = evt => {
  34. if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
  35. this.keysDown.indexOf(evt.keyCode) !== -1 ||
  36. this.keysLeft.indexOf(evt.keyCode) !== -1 ||
  37. this.keysRight.indexOf(evt.keyCode) !== -1) {
  38. var index = this._keys.indexOf(evt.keyCode);
  39. if (index >= 0) {
  40. this._keys.splice(index, 1);
  41. }
  42. if (evt.preventDefault) {
  43. if (!noPreventDefault) {
  44. evt.preventDefault();
  45. }
  46. }
  47. }
  48. };
  49. this._onLostFocus = () => {
  50. this._keys = [];
  51. };
  52. Tools.RegisterTopRootEvents([
  53. { name: "keydown", handler: this._onKeyDown },
  54. { name: "keyup", handler: this._onKeyUp },
  55. { name: "blur", handler: this._onLostFocus }
  56. ]);
  57. }
  58. public detachControl(element: HTMLElement) {
  59. Tools.UnregisterTopRootEvents([
  60. { name: "keydown", handler: this._onKeyDown },
  61. { name: "keyup", handler: this._onKeyUp },
  62. { name: "blur", handler: this._onLostFocus }
  63. ]);
  64. }
  65. public checkInputs() {
  66. var camera = this.camera;
  67. for (var index = 0; index < this._keys.length; index++) {
  68. var keyCode = this._keys[index];
  69. if (this.keysLeft.indexOf(keyCode) !== -1) {
  70. camera.inertialAlphaOffset -= 0.01;
  71. } else if (this.keysUp.indexOf(keyCode) !== -1) {
  72. camera.inertialBetaOffset -= 0.01;
  73. } else if (this.keysRight.indexOf(keyCode) !== -1) {
  74. camera.inertialAlphaOffset += 0.01;
  75. } else if (this.keysDown.indexOf(keyCode) !== -1) {
  76. camera.inertialBetaOffset += 0.01;
  77. }
  78. }
  79. }
  80. getTypeName(): string {
  81. return "ArcRotateCameraKeyboardMoveInput";
  82. }
  83. getSimpleName(){
  84. return "keyboard";
  85. }
  86. }
  87. CameraInputTypes["ArcRotateCameraKeyboardMoveInput"] = ArcRotateCameraKeyboardMoveInput;
  88. }