StaticMeshEvent.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. const LongPressMesh = [EMeshType.XAvatar];
  2. class StaticMeshEvent extends EventEmitter {
  3. constructor(e) {
  4. super();
  5. E(this, "scene");
  6. E(this, "_staringPointerTime", -1);
  7. E(this, "_pickedMeshID", "0");
  8. E(this, "_pointerDownTime", -1);
  9. E(this, "_currentPickPoint");
  10. E(this, "_longPressDelay", 500);
  11. E(this, "_pointerTapDelay", 200);
  12. E(this, "_pickedMeshType");
  13. E(this, "registerEvent", ()=>{
  14. this.scene.onPrePointerObservable.add(this.onDown, PointerEventTypes.POINTERDOWN),
  15. this.scene.onPrePointerObservable.add(this.onUp, PointerEventTypes.POINTERUP),
  16. this.scene.onPrePointerObservable.add(this.onDoubleTap, PointerEventTypes.POINTERDOUBLETAP),
  17. this.scene.onDispose = ()=>{
  18. this.scene.onPrePointerObservable.removeCallback(this.onUp),
  19. this.scene.onPrePointerObservable.removeCallback(this.onDown),
  20. this.scene.onPrePointerObservable.removeCallback(this.onDoubleTap)
  21. }
  22. }
  23. );
  24. E(this, "onUp", ()=>{
  25. if (Date.now() - this._pointerDownTime < this._pointerTapDelay && !this.scene._inputManager._isPointerSwiping()) {
  26. this.scene._inputManager._totalPointersPressed = 0;
  27. let e = this._currentPickPoint;
  28. e != null && LongPressMesh.indexOf(e.type) == -1 && this.scene._inputManager._totalPointersPressed == 0 && this.emit("pointTap", e),
  29. e != null && LongPressMesh.indexOf(e.type) != -1 && (e = this.onPointerTap(t=>t.isPickable && LongPressMesh.indexOf(t.xtype) == -1),
  30. e != null && this.emit("pointTap", e))
  31. }
  32. }
  33. );
  34. E(this, "onDown", ()=>{
  35. let e = this.onPointerTap(t=>t.isPickable);
  36. this._currentPickPoint = e,
  37. this._pointerDownTime = Date.now(),
  38. e != null && LongPressMesh.indexOf(e.type) != -1 && (this._staringPointerTime = Date.now(),
  39. this._pickedMeshID = e.id,
  40. this._pickedMeshType = e.type,
  41. window.setTimeout(()=>{
  42. e = this.onPointerTap(t=>t.isPickable && t.xtype == this._pickedMeshType && t.xid == this._pickedMeshID),
  43. e !== null && Date.now() - this._staringPointerTime > this._longPressDelay && !this.scene._inputManager._isPointerSwiping() && this.scene._inputManager._totalPointersPressed !== 0 && (this._staringPointerTime = 0,
  44. this.emit("longPress", e))
  45. }
  46. , this._longPressDelay))
  47. }
  48. );
  49. E(this, "onDoubleTap", ()=>{
  50. const e = this.onPointerTap(void 0);
  51. e != null && this.emit("pointDoubleTap", e)
  52. }
  53. );
  54. this.manager = e,
  55. this.scene = e.Scene,
  56. this.registerEvent(),
  57. this._currentPickPoint = null,
  58. this._pickedMeshType = null
  59. }
  60. onPointerTap(e, t=!1) {
  61. var n, o;
  62. let r = new PickingInfo;
  63. if (t) {
  64. const a = this.scene.multiPick(this.scene.pointerX, this.scene.pointerY, e, void 0, void 0);
  65. a && a.length > 1 ? r = a[1] : a && (r = a[0])
  66. } else
  67. r = this.scene.pick(this.scene.pointerX, this.scene.pointerY, e, !1, null);
  68. if (r.hit) {
  69. const a = (n = r == null ? void 0 : r.pickedPoint) == null ? void 0 : n.asArray();
  70. if (a) {
  71. const [s,l,u] = a
  72. , c = xversePosition2Ue4({
  73. x: s,
  74. y: l,
  75. z: u
  76. });
  77. return {
  78. name: (o = r.pickedMesh) == null ? void 0 : o.name,
  79. type: r.pickedMesh.xtype,
  80. id: r.pickedMesh.xid,
  81. point: c
  82. }
  83. }
  84. }
  85. return null
  86. }
  87. }