25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

192 satır
3.6 KiB

  1. define([
  2. 'js/system/events',
  3. 'js/renderer'
  4. ], function(
  5. events,
  6. renderer
  7. ) {
  8. return {
  9. axes: {
  10. horizontal: {
  11. negative: ['left', 'a', 'q', 'z'],
  12. positive: ['right', 'd', 'e', 'c']
  13. },
  14. vertical: {
  15. negative: ['up', 'w', 'q', 'e'],
  16. positive: ['down', 's', 'x', 'z', 'c']
  17. }
  18. },
  19. mappings: {
  20. '8': 'backspace',
  21. '9': 'tab',
  22. '13': 'enter',
  23. '16': 'shift',
  24. '17': 'ctrl',
  25. '27': 'esc',
  26. '37': 'left',
  27. '38': 'up',
  28. '39': 'right',
  29. '40': 'down',
  30. '46': 'del'
  31. },
  32. mouse: {
  33. button: null,
  34. x: 0,
  35. y: 0
  36. },
  37. mouseRaw: null,
  38. keys: {},
  39. enabled: true,
  40. init: function() {
  41. $(window).on('keydown', this.events.keyboard.keyDown.bind(this));
  42. $(window).on('keyup', this.events.keyboard.keyUp.bind(this));
  43. events.on('onSceneMove', this.events.mouse.mouseMove.bind(this));
  44. $('.ui-container')
  45. .on('mousedown', this.events.mouse.mouseDown.bind(this))
  46. .on('mouseup', this.events.mouse.mouseUp.bind(this))
  47. .on('mousemove', this.events.mouse.mouseMove.bind(this));
  48. },
  49. resetKeys: function() {
  50. this.keys = {};
  51. },
  52. getMapping: function(charCode) {
  53. if (charCode >= 97)
  54. return (charCode - 96).toString();
  55. return (
  56. this.mappings[charCode] ||
  57. String.fromCharCode(charCode).toLowerCase()
  58. );
  59. },
  60. isKeyDown: function(key, noConsume) {
  61. var down = this.keys[key];
  62. if (down != null) {
  63. if (noConsume)
  64. return true;
  65. else {
  66. this.keys[key] = 2;
  67. return (down == 1);
  68. }
  69. } else
  70. return false;
  71. },
  72. getAxis: function(name) {
  73. var axis = this.axes[name];
  74. if (!axis)
  75. return 0;
  76. var result = 0;
  77. for (var i = 0; i < axis.negative.length; i++) {
  78. if (this.keys[axis.negative[i]]) {
  79. result--;
  80. break;
  81. }
  82. }
  83. for (var i = 0; i < axis.positive.length; i++) {
  84. if (this.keys[axis.positive[i]]) {
  85. result++;
  86. break;
  87. }
  88. }
  89. return result;
  90. },
  91. events: {
  92. keyboard: {
  93. keyDown: function(e) {
  94. if (!this.enabled)
  95. return;
  96. if (e.target != document.body)
  97. return true;
  98. if ((e.keyCode == 9) || (e.keyCode == 8) || (e.keyCode == 122))
  99. e.preventDefault();
  100. var key = this.getMapping(e.which);
  101. if (this.keys[key] != null)
  102. this.keys[key] = 2;
  103. else {
  104. this.keys[key] = 1;
  105. events.emit('onKeyDown', key);
  106. }
  107. if (key == 'backspace')
  108. return false;
  109. else if (e.key == 'F11')
  110. events.emit('onToggleFullscreen');
  111. },
  112. keyUp: function(e) {
  113. if (!this.enabled)
  114. return;
  115. if (e.target != document.body)
  116. return;
  117. var key = this.getMapping(e.which);
  118. delete this.keys[key];
  119. events.emit('onKeyUp', key);
  120. }
  121. },
  122. mouse: {
  123. mouseDown: function(e) {
  124. var el = $(e.target);
  125. if ((!el.hasClass('ui-container')) || (el.hasClass('blocking')))
  126. return;
  127. var button = e.button;
  128. this.mouse.button = button;
  129. this.mouse.down = true;
  130. this.mouse.event = e;
  131. events.emit('mouseDown', this.mouse);
  132. },
  133. mouseUp: function(e) {
  134. var el = $(e.target);
  135. if ((!el.hasClass('ui-container')) || (el.hasClass('blocking')))
  136. return;
  137. var button = e.button;
  138. this.mouse.button = null;
  139. this.mouse.down = false;
  140. events.emit('mouseUp', this.mouse);
  141. },
  142. mouseMove: function(e) {
  143. if (e)
  144. this.mouseRaw = e;
  145. else
  146. e = this.mouseRaw;
  147. if (!e)
  148. return;
  149. var el = $(e.target);
  150. if ((!el.hasClass('ui-container')) || (el.hasClass('blocking')))
  151. return;
  152. this.mouse.x = e.offsetX + (renderer.pos.x);
  153. this.mouse.y = e.offsetY + (renderer.pos.y);
  154. events.emit('mouseMove', this.mouse);
  155. }
  156. }
  157. }
  158. };
  159. });