babylon.arcRotateCameraKeyboardMoveInput.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. element.tabIndex = 1;
  18. this._onKeyDown = evt => {
  19. if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
  20. this.keysDown.indexOf(evt.keyCode) !== -1 ||
  21. this.keysLeft.indexOf(evt.keyCode) !== -1 ||
  22. this.keysRight.indexOf(evt.keyCode) !== -1) {
  23. var index = this._keys.indexOf(evt.keyCode);
  24. if (index === -1) {
  25. this._keys.push(evt.keyCode);
  26. }
  27. if (evt.preventDefault) {
  28. if (!noPreventDefault) {
  29. evt.preventDefault();
  30. }
  31. }
  32. }
  33. };
  34. this._onKeyUp = evt => {
  35. if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
  36. this.keysDown.indexOf(evt.keyCode) !== -1 ||
  37. this.keysLeft.indexOf(evt.keyCode) !== -1 ||
  38. this.keysRight.indexOf(evt.keyCode) !== -1) {
  39. var index = this._keys.indexOf(evt.keyCode);
  40. if (index >= 0) {
  41. this._keys.splice(index, 1);
  42. }
  43. if (evt.preventDefault) {
  44. if (!noPreventDefault) {
  45. evt.preventDefault();
  46. }
  47. }
  48. }
  49. };
  50. this._onLostFocus = () => {
  51. this._keys = [];
  52. };
  53. element.addEventListener("keydown", this._onKeyDown, false);
  54. element.addEventListener("keyup", this._onKeyUp, false);
  55. Tools.RegisterTopRootEvents([
  56. { name: "blur", handler: this._onLostFocus }
  57. ]);
  58. }
  59. public detachControl(element: HTMLElement) {
  60. if (element) {
  61. element.removeEventListener("keydown", this._onKeyDown);
  62. element.removeEventListener("keyup", this._onKeyUp);
  63. }
  64. Tools.UnregisterTopRootEvents([
  65. { name: "blur", handler: this._onLostFocus }
  66. ]);
  67. this._keys = [];
  68. this._onKeyDown = null;
  69. this._onKeyUp = null;
  70. this._onLostFocus = null;
  71. }
  72. public checkInputs() {
  73. if (this._onKeyDown){
  74. var camera = this.camera;
  75. for (var index = 0; index < this._keys.length; index++) {
  76. var keyCode = this._keys[index];
  77. if (this.keysLeft.indexOf(keyCode) !== -1) {
  78. camera.inertialAlphaOffset -= 0.01;
  79. } else if (this.keysUp.indexOf(keyCode) !== -1) {
  80. camera.inertialBetaOffset -= 0.01;
  81. } else if (this.keysRight.indexOf(keyCode) !== -1) {
  82. camera.inertialAlphaOffset += 0.01;
  83. } else if (this.keysDown.indexOf(keyCode) !== -1) {
  84. camera.inertialBetaOffset += 0.01;
  85. }
  86. }
  87. }
  88. }
  89. getClassName(): string {
  90. return "ArcRotateCameraKeyboardMoveInput";
  91. }
  92. getSimpleName(){
  93. return "keyboard";
  94. }
  95. }
  96. CameraInputTypes["ArcRotateCameraKeyboardMoveInput"] = ArcRotateCameraKeyboardMoveInput;
  97. }