EventManager.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { EventDispatcher } from './EventDispatcher.js'
  2. import EventConstant from './EventConstant.js'
  3. export default class EventManager extends EventDispatcher {
  4. /**
  5. * 视图对象
  6. * @type {Scene}
  7. */
  8. // scene = null
  9. /**
  10. * 事件处理器
  11. * @type{ScreenSpaceEventHandler}
  12. */
  13. // handler = null
  14. /**
  15. * 按下左键
  16. * @type {boolean}
  17. */
  18. // press = false
  19. /**
  20. * 创建事件管理工具
  21. * @param viewer
  22. */
  23. constructor (scene, ScreenSpaceEventHandler, ScreenSpaceEventType) {
  24. super();
  25. this.scene = scene;
  26. // 创建事件管理器
  27. this.handler = new ScreenSpaceEventHandler(scene.canvas);
  28. // 派发左键单击事件
  29. this.handler.setInputAction((e) => {
  30. this.dispatchEvent({
  31. type: EventConstant.CLICK,
  32. message: e
  33. });
  34. }, ScreenSpaceEventType.LEFT_CLICK);
  35. // 左键按下事件
  36. this.handler.setInputAction((e) => {
  37. this.press = true;
  38. this.dispatchEvent({
  39. type: EventConstant.LEFT_DOWN,
  40. message: e
  41. });
  42. }, ScreenSpaceEventType.LEFT_DOWN);
  43. // 右键按下事件
  44. this.handler.setInputAction((e) => {
  45. this.press = false;
  46. this.dispatchEvent({
  47. type: EventConstant.LEFT_UP,
  48. message: e
  49. });
  50. }, ScreenSpaceEventType.LEFT_UP);
  51. // 派发右键单击事件
  52. this.handler.setInputAction((e) => {
  53. this.dispatchEvent({
  54. type: EventConstant.RIGHT_CLICK,
  55. message: e
  56. });
  57. }, ScreenSpaceEventType.RIGHT_CLICK);
  58. // 鼠标移动事件
  59. this.handler.setInputAction((e) => {
  60. // 左键按下移动事件
  61. if(this.press) {
  62. this.dispatchEvent({
  63. type: EventConstant.LEFT_DOWN_MOUSE_MOVE,
  64. message: e
  65. });
  66. }
  67. this.dispatchEvent({
  68. type: EventConstant.MOUSE_MOVE,
  69. message: e
  70. });
  71. }, ScreenSpaceEventType.MOUSE_MOVE);
  72. // // 派发渲染事件
  73. // this.scene.postRender.addEventListener((e, time) => {
  74. // TWEEN && TWEEN.update()
  75. // this.scene.stats && this.scene.stats.update()
  76. // this.dispatchEvent({
  77. // type: EventConstant.RENDER,
  78. // message: {
  79. // scene: e,
  80. // time: time
  81. // }
  82. // })
  83. // })
  84. // // 键盘抬起事件
  85. // document.addEventListener(EventConstant.KEYUP, (e) => {
  86. // this.dispatchEvent({
  87. // type: EventConstant.KEYUP,
  88. // message: {
  89. // e: e
  90. // }
  91. // })
  92. // })
  93. // // 键盘按下事件
  94. // document.addEventListener(EventConstant.KEYDOWN, (e) => {
  95. // this.dispatchEvent({
  96. // type: EventConstant.KEYDOWN,
  97. // message: {
  98. // e: e
  99. // }
  100. // })
  101. // })
  102. }
  103. /**
  104. * 添加相机位置监听方法
  105. * @param fn{Function} 监听方法
  106. */
  107. addCameraMoveListener (fn) {
  108. this.scene.camera.changed.addEventListener(fn);
  109. }
  110. /**
  111. * 移除相机位置监听
  112. * @param fn{Function} 监听方法
  113. */
  114. removeCameraMoveListener (fn) {
  115. this.scene.camera.changed.removeEventListener(fn);
  116. }
  117. }