@vived/app 5.1.1 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js +3 -0
  2. package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
  3. package/dist/cjs/HoverLabel/Controllers/HoverLabelMouse.js.map +1 -1
  4. package/dist/cjs/HoverLabel/Controllers/HoverLabelTouch.js.map +1 -1
  5. package/dist/cjs/LabelDrop/Controller/MouseLabelDropAuthor.js.map +1 -1
  6. package/dist/cjs/LabelDrop/Controller/TouchLabelDropAuthor.js.map +1 -1
  7. package/dist/cjs/Landmarks/Controller/MouseLandmark.js.map +1 -1
  8. package/dist/cjs/Landmarks/Controller/TouchLandmark.js.map +1 -1
  9. package/dist/cjs/MouseInput/Entities/MouseInput.js.map +1 -1
  10. package/dist/cjs/MouseInput/Mocks/MockMouseInput.js +4 -5
  11. package/dist/cjs/MouseInput/Mocks/MockMouseInput.js.map +1 -1
  12. package/dist/cjs/MouseInput/Mocks/index.js +18 -0
  13. package/dist/cjs/MouseInput/Mocks/index.js.map +1 -0
  14. package/dist/cjs/MouseInput/index.js +1 -0
  15. package/dist/cjs/MouseInput/index.js.map +1 -1
  16. package/dist/cjs/ObjectPick/Controllers/MouseObjectPickMC.js.map +1 -1
  17. package/dist/cjs/ObjectPick/Controllers/StylusObjectPickSC.js.map +1 -1
  18. package/dist/cjs/ObjectPick/Controllers/TouchObjectPickTC.js.map +1 -1
  19. package/dist/cjs/SceneRoot/Controllers/DoubleTapToFocus.js.map +1 -1
  20. package/dist/cjs/SceneRoot/Controllers/MouseClickToFocus.js.map +1 -1
  21. package/dist/cjs/SceneRoot/Controllers/MouseOrbit.js.map +1 -1
  22. package/dist/cjs/SceneRoot/Controllers/MouseRoll.js.map +1 -1
  23. package/dist/cjs/SceneRoot/Controllers/MouseScale.js.map +1 -1
  24. package/dist/cjs/SceneRoot/Controllers/ScaleSceneRootSC.js.map +1 -1
  25. package/dist/cjs/SceneRoot/Controllers/SceneRootMoveSC.js.map +1 -1
  26. package/dist/cjs/SceneRoot/Controllers/TouchOrbit.js.map +1 -1
  27. package/dist/cjs/SceneRoot/Controllers/TouchPan.js.map +1 -1
  28. package/dist/cjs/SceneRoot/Controllers/TouchPinch.js.map +1 -1
  29. package/dist/cjs/SceneRoot/Controllers/TouchScale.js.map +1 -1
  30. package/dist/cjs/Selection/Controller/MouseHoverOnAppObject.js.map +1 -1
  31. package/dist/cjs/Selection/Controller/MouseHoverOnAppObject.test.js +1 -0
  32. package/dist/cjs/Selection/Controller/MouseHoverOnAppObject.test.js.map +1 -1
  33. package/dist/cjs/Selection/Controller/MousePressOnAppObject.js.map +1 -1
  34. package/dist/cjs/Selection/Controller/MousePressOnAppObject.test.js +1 -0
  35. package/dist/cjs/Selection/Controller/MousePressOnAppObject.test.js.map +1 -1
  36. package/dist/cjs/Selection/Controller/MouseSelectAppObject.js.map +1 -1
  37. package/dist/cjs/Selection/Controller/MouseSelectAppObject.test.js +1 -0
  38. package/dist/cjs/Selection/Controller/MouseSelectAppObject.test.js.map +1 -1
  39. package/dist/cjs/Selection/Controller/StylusHoverOnAppObjectSC.js.map +1 -1
  40. package/dist/cjs/Selection/Controller/StylusPressOnAppObjectSC.js.map +1 -1
  41. package/dist/cjs/Selection/Controller/StylusSelectAppObjectSC.js.map +1 -1
  42. package/dist/cjs/Selection/Controller/TapToSelectAppObject.js.map +1 -1
  43. package/dist/cjs/Selection/Controller/TouchPressOnAppObject.js.map +1 -1
  44. package/dist/cjs/Stick/Controllers/DoubleClickToStickMC.js.map +1 -1
  45. package/dist/cjs/Stick/Controllers/DoubleTapToStickTC.js.map +1 -1
  46. package/dist/cjs/Stylus/Entity/StylusEntity.js.map +1 -1
  47. package/dist/cjs/Stylus/Entity/StylusEntity.test.js.map +1 -1
  48. package/dist/cjs/TouchController/Entities/TouchInput.js.map +1 -1
  49. package/dist/cjs/Transform3D/Controllers/Mouse/DragScaleTransformMC.js.map +1 -1
  50. package/dist/cjs/Transform3D/Controllers/Mouse/MousePanTransformMC.js.map +1 -1
  51. package/dist/cjs/Transform3D/Controllers/Mouse/PanTransformMC.js.map +1 -1
  52. package/dist/cjs/Transform3D/Controllers/Mouse/RollScaleTransformMC.js.map +1 -1
  53. package/dist/cjs/Transform3D/Controllers/Stylus/MoveTransformSC.js.map +1 -1
  54. package/dist/cjs/Transform3D/Controllers/Stylus/PanScaleTransformSC.js.map +1 -1
  55. package/dist/cjs/Transform3D/Controllers/Touch/DragScaleTransformTC.js.map +1 -1
  56. package/dist/cjs/Transform3D/Controllers/Touch/PanTransformTC.js.map +1 -1
  57. package/dist/cjs/Transform3D/Controllers/Touch/PinchTransformTC.js.map +1 -1
  58. package/dist/cjs/Transform3D/Controllers/Touch/TouchPanTransformTC.js.map +1 -1
  59. package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js +3 -0
  60. package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
  61. package/dist/esm/HoverLabel/Controllers/HoverLabelMouse.js.map +1 -1
  62. package/dist/esm/HoverLabel/Controllers/HoverLabelTouch.js.map +1 -1
  63. package/dist/esm/LabelDrop/Controller/MouseLabelDropAuthor.js.map +1 -1
  64. package/dist/esm/LabelDrop/Controller/TouchLabelDropAuthor.js.map +1 -1
  65. package/dist/esm/Landmarks/Controller/MouseLandmark.js.map +1 -1
  66. package/dist/esm/Landmarks/Controller/TouchLandmark.js.map +1 -1
  67. package/dist/esm/MouseInput/Entities/MouseInput.js.map +1 -1
  68. package/dist/esm/MouseInput/Mocks/MockMouseInput.js +4 -5
  69. package/dist/esm/MouseInput/Mocks/MockMouseInput.js.map +1 -1
  70. package/dist/esm/MouseInput/Mocks/index.js +2 -0
  71. package/dist/esm/MouseInput/Mocks/index.js.map +1 -0
  72. package/dist/esm/MouseInput/index.js +1 -0
  73. package/dist/esm/MouseInput/index.js.map +1 -1
  74. package/dist/esm/ObjectPick/Controllers/MouseObjectPickMC.js.map +1 -1
  75. package/dist/esm/ObjectPick/Controllers/StylusObjectPickSC.js.map +1 -1
  76. package/dist/esm/ObjectPick/Controllers/TouchObjectPickTC.js.map +1 -1
  77. package/dist/esm/SceneRoot/Controllers/DoubleTapToFocus.js.map +1 -1
  78. package/dist/esm/SceneRoot/Controllers/MouseClickToFocus.js.map +1 -1
  79. package/dist/esm/SceneRoot/Controllers/MouseOrbit.js.map +1 -1
  80. package/dist/esm/SceneRoot/Controllers/MouseRoll.js.map +1 -1
  81. package/dist/esm/SceneRoot/Controllers/MouseScale.js.map +1 -1
  82. package/dist/esm/SceneRoot/Controllers/ScaleSceneRootSC.js.map +1 -1
  83. package/dist/esm/SceneRoot/Controllers/SceneRootMoveSC.js.map +1 -1
  84. package/dist/esm/SceneRoot/Controllers/TouchOrbit.js.map +1 -1
  85. package/dist/esm/SceneRoot/Controllers/TouchPan.js.map +1 -1
  86. package/dist/esm/SceneRoot/Controllers/TouchPinch.js.map +1 -1
  87. package/dist/esm/SceneRoot/Controllers/TouchScale.js.map +1 -1
  88. package/dist/esm/Selection/Controller/MouseHoverOnAppObject.js.map +1 -1
  89. package/dist/esm/Selection/Controller/MouseHoverOnAppObject.test.js +1 -0
  90. package/dist/esm/Selection/Controller/MouseHoverOnAppObject.test.js.map +1 -1
  91. package/dist/esm/Selection/Controller/MousePressOnAppObject.js.map +1 -1
  92. package/dist/esm/Selection/Controller/MousePressOnAppObject.test.js +1 -0
  93. package/dist/esm/Selection/Controller/MousePressOnAppObject.test.js.map +1 -1
  94. package/dist/esm/Selection/Controller/MouseSelectAppObject.js.map +1 -1
  95. package/dist/esm/Selection/Controller/MouseSelectAppObject.test.js +1 -0
  96. package/dist/esm/Selection/Controller/MouseSelectAppObject.test.js.map +1 -1
  97. package/dist/esm/Selection/Controller/StylusHoverOnAppObjectSC.js.map +1 -1
  98. package/dist/esm/Selection/Controller/StylusPressOnAppObjectSC.js.map +1 -1
  99. package/dist/esm/Selection/Controller/StylusSelectAppObjectSC.js.map +1 -1
  100. package/dist/esm/Selection/Controller/TapToSelectAppObject.js.map +1 -1
  101. package/dist/esm/Selection/Controller/TouchPressOnAppObject.js.map +1 -1
  102. package/dist/esm/Stick/Controllers/DoubleClickToStickMC.js.map +1 -1
  103. package/dist/esm/Stick/Controllers/DoubleTapToStickTC.js.map +1 -1
  104. package/dist/esm/Stylus/Entity/StylusEntity.js.map +1 -1
  105. package/dist/esm/Stylus/Entity/StylusEntity.test.js.map +1 -1
  106. package/dist/esm/TouchController/Entities/TouchInput.js.map +1 -1
  107. package/dist/esm/Transform3D/Controllers/Mouse/DragScaleTransformMC.js.map +1 -1
  108. package/dist/esm/Transform3D/Controllers/Mouse/MousePanTransformMC.js.map +1 -1
  109. package/dist/esm/Transform3D/Controllers/Mouse/PanTransformMC.js.map +1 -1
  110. package/dist/esm/Transform3D/Controllers/Mouse/RollScaleTransformMC.js.map +1 -1
  111. package/dist/esm/Transform3D/Controllers/Stylus/MoveTransformSC.js.map +1 -1
  112. package/dist/esm/Transform3D/Controllers/Stylus/PanScaleTransformSC.js.map +1 -1
  113. package/dist/esm/Transform3D/Controllers/Touch/DragScaleTransformTC.js.map +1 -1
  114. package/dist/esm/Transform3D/Controllers/Touch/PanTransformTC.js.map +1 -1
  115. package/dist/esm/Transform3D/Controllers/Touch/PinchTransformTC.js.map +1 -1
  116. package/dist/esm/Transform3D/Controllers/Touch/TouchPanTransformTC.js.map +1 -1
  117. package/dist/types/MouseInput/Mocks/MockMouseInput.d.ts +5 -6
  118. package/dist/types/MouseInput/Mocks/MockMouseInput.d.ts.map +1 -1
  119. package/dist/types/MouseInput/Mocks/index.d.ts +2 -0
  120. package/dist/types/MouseInput/Mocks/index.d.ts.map +1 -0
  121. package/dist/types/MouseInput/index.d.ts +1 -0
  122. package/dist/types/MouseInput/index.d.ts.map +1 -1
  123. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TouchPan.js","sourceRoot":"","sources":["../../../../src/SceneRoot/Controllers/TouchPan.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,sCAAsC;AACtC,uCAAwD;AACxD,2DAI+B;AAC/B,qDAAoD;AAEpD,MAAa,QAAS,SAAQ,0BAAmB;IAO/C,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,uBAAuB,CAAiB,6BAAc,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,sBAAc,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IA8CD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAzD3B,2BAAsB,GAAG,EAAE,CAAC;QAE3B,cAAS,GAAG,KAAK,CAAC;QAU1B,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAE3B,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,KAAK,iBAAS,CAAC,MAAM,CAAC;YAE5D,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,cAAO,CAAC,QAAQ,CAC3B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CACtB,CAAC,SAAS,CAAC;gBAEZ,IAAI,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBACvC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC5B,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,eAAU,GAAG,CAAC,CAAkB,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;QAC9B,CAAC,CAAC;QAIA,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC;QAE3C,MAAM,UAAU,GAAG,kCAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AArEH,4BAsEC;AArEiB,aAAI,GAAG,UAAU,AAAb,CAAc","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { Vector2 } from \"@vived/core\";\nimport { ToolRepository, ToolState } from \"../../Tools\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { PanSceneRootUC } from \"../UC/PanSceneRoot\";\n\nexport class TouchPan extends AppObjectController implements TouchEventHandler {\n static readonly type = \"TouchPan\";\n\n public PAN_FINGER_DISTANCE_PX = 80;\n\n private isPanning = false;\n\n private get panRootUC() {\n return this.getCachedLocalComponent<PanSceneRootUC>(PanSceneRootUC.type);\n }\n\n private get toolRepo() {\n return this.getCachedSingleton<ToolRepository>(ToolRepository.type);\n }\n\n allow = (e: TouchInputEvent): boolean => {\n const panTool = this.toolRepo?.getTool(\"PAN\");\n if (!panTool) return false;\n\n const panToolIsAcvtive = panTool.state === ToolState.ACTIVE;\n\n if (e.touches.length === 1 && panToolIsAcvtive) {\n return true;\n } else if (e.touches.length === 2) {\n const dist = Vector2.Subtract(\n e.touches[0].position,\n e.touches[1].position\n ).magnitued;\n\n if (dist > this.PAN_FINGER_DISTANCE_PX) {\n return true;\n }\n }\n\n return false;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n if (!this.allow(e)) {\n this.isPanning = false;\n this.panRootUC?.cancelPan();\n return;\n }\n\n this.panRootUC?.initializePan(e.touchCenter);\n this.isPanning = true;\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (!this.isPanning) return;\n const pixelPosition = e.touches[0].position;\n this.panRootUC?.doPan(pixelPosition);\n };\n\n onTouchEnd = (e: TouchInputEvent) => {\n this.isPanning = false;\n this.panRootUC?.finishPan();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TouchPan.type);\n const appObjects = appObject.appObjectRepo;\n\n const touchInput = TouchInputEntity.get(appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"TouchPan.js","sourceRoot":"","sources":["../../../../src/SceneRoot/Controllers/TouchPan.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,sCAAsC;AACtC,uCAAwD;AACxD,2DAI+B;AAC/B,qDAAoD;AAEpD,MAAa,QAAS,SAAQ,0BAAmB;IAO/C,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,uBAAuB,CAAiB,6BAAc,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,sBAAc,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IA8CD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAzD3B,2BAAsB,GAAG,EAAE,CAAC;QAE3B,cAAS,GAAG,KAAK,CAAC;QAU1B,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAE3B,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,KAAK,iBAAS,CAAC,MAAM,CAAC;YAE5D,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,cAAO,CAAC,QAAQ,CAC3B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CACtB,CAAC,SAAS,CAAC;gBAEZ,IAAI,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBACvC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC5B,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,eAAU,GAAG,CAAC,CAAkB,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;QAC9B,CAAC,CAAC;QAIA,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC;QAE3C,MAAM,UAAU,GAAG,kCAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AArEH,4BAsEC;AArEiB,aAAI,GAAG,UAAU,AAAb,CAAc","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { Vector2 } from \"@vived/core\";\nimport { ToolRepository, ToolState } from \"../../Tools\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { PanSceneRootUC } from \"../UC/PanSceneRoot\";\n\nexport class TouchPan extends AppObjectController implements TouchEventHandler {\n static readonly type = \"TouchPan\";\n\n public PAN_FINGER_DISTANCE_PX = 80;\n\n private isPanning = false;\n\n private get panRootUC() {\n return this.getCachedLocalComponent<PanSceneRootUC>(PanSceneRootUC.type);\n }\n\n private get toolRepo() {\n return this.getCachedSingleton<ToolRepository>(ToolRepository.type);\n }\n\n allow = (e: TouchInputEvent): boolean => {\n const panTool = this.toolRepo?.getTool(\"PAN\");\n if (!panTool) return false;\n\n const panToolIsAcvtive = panTool.state === ToolState.ACTIVE;\n\n if (e.touches.length === 1 && panToolIsAcvtive) {\n return true;\n } else if (e.touches.length === 2) {\n const dist = Vector2.Subtract(\n e.touches[0].position,\n e.touches[1].position,\n ).magnitued;\n\n if (dist > this.PAN_FINGER_DISTANCE_PX) {\n return true;\n }\n }\n\n return false;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n if (!this.allow(e)) {\n this.isPanning = false;\n this.panRootUC?.cancelPan();\n return;\n }\n\n this.panRootUC?.initializePan(e.touchCenter);\n this.isPanning = true;\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (!this.isPanning) return;\n const pixelPosition = e.touches[0].position;\n this.panRootUC?.doPan(pixelPosition);\n };\n\n onTouchEnd = (e: TouchInputEvent) => {\n this.isPanning = false;\n this.panRootUC?.finishPan();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TouchPan.type);\n const appObjects = appObject.appObjectRepo;\n\n const touchInput = TouchInputEntity.get(appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TouchPinch.js","sourceRoot":"","sources":["../../../../src/SceneRoot/Controllers/TouchPinch.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,sCAAsC;AACtC,2DAI+B;AAC/B,yDAAwD;AAExD,MAAa,UACX,SAAQ,0BAAmB;IAQ3B,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,uBAAuB,CACjC,iCAAgB,CAAC,IAAI,CACtB,CAAC;IACJ,CAAC;IA8CD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAvD5B,eAAU,GAAG,KAAK,CAAC;QAEpB,2BAAsB,GAAG,EAAE,CAAC;QAQnC,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,cAAO,CAAC,QAAQ,CAC3B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CACtB,CAAC,SAAS,CAAC;gBAEZ,IAAI,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBACvC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;YACpC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,eAAe,CAC/B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CACtB,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACnC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,eAAU,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC;QAClC,CAAC,CAAC;QAIA,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC;QAE3C,MAAM,UAAU,GAAG,kCAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AArEH,gCAsEC;AAlEiB,eAAI,GAAG,YAAY,AAAf,CAAgB","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { Vector2 } from \"@vived/core\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { PinchSceneRootUC } from \"../UC/PinchSceneRoot\";\n\nexport class TouchPinch\n extends AppObjectController\n implements TouchEventHandler\n{\n static readonly type = \"TouchPinch\";\n private isPinching = false;\n\n public PAN_FINGER_DISTANCE_PX = 80;\n\n private get pinchRootUC() {\n return this.getCachedLocalComponent<PinchSceneRootUC>(\n PinchSceneRootUC.type\n );\n }\n\n allow = (e: TouchInputEvent): boolean => {\n if (e.touches.length === 2) {\n const dist = Vector2.Subtract(\n e.touches[0].position,\n e.touches[1].position\n ).magnitued;\n\n if (dist > this.PAN_FINGER_DISTANCE_PX) {\n return true;\n }\n }\n\n return false;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n this.isPinching = false;\n\n if (e.touches.length !== 2) {\n return;\n }\n\n if (!this.allow(e)) {\n return;\n }\n\n this.pinchRootUC?.initializePinch(\n e.touches[0].position,\n e.touches[1].position\n );\n this.isPinching = true;\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (!this.isPinching) return;\n if (e.touches.length !== 2) return;\n this.pinchRootUC?.doPinch(e.touches[0].position, e.touches[1].position);\n };\n\n onTouchEnd = () => {\n this.isPinching = false;\n this.pinchRootUC?.finishPinch();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TouchPinch.type);\n const appObjects = appObject.appObjectRepo;\n\n const touchInput = TouchInputEntity.get(appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"TouchPinch.js","sourceRoot":"","sources":["../../../../src/SceneRoot/Controllers/TouchPinch.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,sCAAsC;AACtC,2DAI+B;AAC/B,yDAAwD;AAExD,MAAa,UACX,SAAQ,0BAAmB;IAQ3B,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,uBAAuB,CACjC,iCAAgB,CAAC,IAAI,CACtB,CAAC;IACJ,CAAC;IA8CD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAvD5B,eAAU,GAAG,KAAK,CAAC;QAEpB,2BAAsB,GAAG,EAAE,CAAC;QAQnC,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,cAAO,CAAC,QAAQ,CAC3B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CACtB,CAAC,SAAS,CAAC;gBAEZ,IAAI,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBACvC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;YACpC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,eAAe,CAC/B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CACtB,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACnC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,eAAU,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC;QAClC,CAAC,CAAC;QAIA,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC;QAE3C,MAAM,UAAU,GAAG,kCAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AArEH,gCAsEC;AAlEiB,eAAI,GAAG,YAAY,AAAf,CAAgB","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { Vector2 } from \"@vived/core\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { PinchSceneRootUC } from \"../UC/PinchSceneRoot\";\n\nexport class TouchPinch\n extends AppObjectController\n implements TouchEventHandler\n{\n static readonly type = \"TouchPinch\";\n private isPinching = false;\n\n public PAN_FINGER_DISTANCE_PX = 80;\n\n private get pinchRootUC() {\n return this.getCachedLocalComponent<PinchSceneRootUC>(\n PinchSceneRootUC.type,\n );\n }\n\n allow = (e: TouchInputEvent): boolean => {\n if (e.touches.length === 2) {\n const dist = Vector2.Subtract(\n e.touches[0].position,\n e.touches[1].position,\n ).magnitued;\n\n if (dist > this.PAN_FINGER_DISTANCE_PX) {\n return true;\n }\n }\n\n return false;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n this.isPinching = false;\n\n if (e.touches.length !== 2) {\n return;\n }\n\n if (!this.allow(e)) {\n return;\n }\n\n this.pinchRootUC?.initializePinch(\n e.touches[0].position,\n e.touches[1].position,\n );\n this.isPinching = true;\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (!this.isPinching) return;\n if (e.touches.length !== 2) return;\n this.pinchRootUC?.doPinch(e.touches[0].position, e.touches[1].position);\n };\n\n onTouchEnd = () => {\n this.isPinching = false;\n this.pinchRootUC?.finishPinch();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TouchPinch.type);\n const appObjects = appObject.appObjectRepo;\n\n const touchInput = TouchInputEntity.get(appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TouchScale.js","sourceRoot":"","sources":["../../../../src/SceneRoot/Controllers/TouchScale.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,uCAAwD;AACxD,2DAI+B;AAC/B,iEAAgE;AAEhE,MAAa,UACX,SAAQ,0BAAmB;IAM3B,IAAY,eAAe;QACzB,OAAO,IAAI,CAAC,uBAAuB,CACjC,yCAAoB,CAAC,IAAI,CAC1B,CAAC;IACJ,CAAC;IAED,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,sBAAc,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IA6CD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAxD5B,cAAS,GAAG,KAAK,CAAC;QAY1B,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAE5B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,KAAK,iBAAS,CAAC,MAAM,CAAC;YAE7D,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;YACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAEvB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;YAErD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC5B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEnC,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC,CAAC;QAEF,eAAU,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,CAAC;QACxC,CAAC,CAAC;QAIA,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC;QAE3C,MAAM,UAAU,GAAG,kCAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AAtEH,gCAuEC;AAnEiB,eAAI,GAAG,YAAY,AAAf,CAAgB","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { ToolRepository, ToolState } from \"../../Tools\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { DragScaleSceneRootUC } from \"../UC/DragScaleSceneRoot\";\n\nexport class TouchScale\n extends AppObjectController\n implements TouchEventHandler\n{\n static readonly type = \"TouchScale\";\n private isScaling = false;\n\n private get dragScaleRootUC() {\n return this.getCachedLocalComponent<DragScaleSceneRootUC>(\n DragScaleSceneRootUC.type\n );\n }\n\n private get toolRepo() {\n return this.getCachedSingleton<ToolRepository>(ToolRepository.type);\n }\n\n allow = (e: TouchInputEvent): boolean => {\n const zoomTool = this.toolRepo?.getTool(\"ZOOM\");\n if (!zoomTool) return false;\n\n const zoomToolIsActive = zoomTool.state === ToolState.ACTIVE;\n\n if (e.touches.length === 1 && zoomToolIsActive) {\n return true;\n }\n\n return false;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n this.isScaling = false;\n\n if (e.touches.length !== 1) {\n return;\n }\n\n if (!this.allow(e)) {\n return;\n }\n\n const pixelPosition = e.touches[0].position;\n this.dragScaleRootUC?.initializeScale(pixelPosition);\n\n this.isScaling = true;\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (!this.isScaling) return;\n if (e.touches.length !== 1) return;\n\n const pixelPosition = e.touches[0].position;\n this.dragScaleRootUC?.doScale(pixelPosition);\n };\n\n onTouchEnd = () => {\n this.isScaling = false;\n this.dragScaleRootUC?.finishScaling();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TouchScale.type);\n const appObjects = appObject.appObjectRepo;\n\n const touchInput = TouchInputEntity.get(appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"TouchScale.js","sourceRoot":"","sources":["../../../../src/SceneRoot/Controllers/TouchScale.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,uCAAwD;AACxD,2DAI+B;AAC/B,iEAAgE;AAEhE,MAAa,UACX,SAAQ,0BAAmB;IAM3B,IAAY,eAAe;QACzB,OAAO,IAAI,CAAC,uBAAuB,CACjC,yCAAoB,CAAC,IAAI,CAC1B,CAAC;IACJ,CAAC;IAED,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,sBAAc,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IA6CD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAxD5B,cAAS,GAAG,KAAK,CAAC;QAY1B,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAE5B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,KAAK,iBAAS,CAAC,MAAM,CAAC;YAE7D,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;YACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAEvB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;YAErD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC5B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEnC,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC,CAAC;QAEF,eAAU,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,CAAC;QACxC,CAAC,CAAC;QAIA,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC;QAE3C,MAAM,UAAU,GAAG,kCAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AAtEH,gCAuEC;AAnEiB,eAAI,GAAG,YAAY,AAAf,CAAgB","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { ToolRepository, ToolState } from \"../../Tools\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { DragScaleSceneRootUC } from \"../UC/DragScaleSceneRoot\";\n\nexport class TouchScale\n extends AppObjectController\n implements TouchEventHandler\n{\n static readonly type = \"TouchScale\";\n private isScaling = false;\n\n private get dragScaleRootUC() {\n return this.getCachedLocalComponent<DragScaleSceneRootUC>(\n DragScaleSceneRootUC.type,\n );\n }\n\n private get toolRepo() {\n return this.getCachedSingleton<ToolRepository>(ToolRepository.type);\n }\n\n allow = (e: TouchInputEvent): boolean => {\n const zoomTool = this.toolRepo?.getTool(\"ZOOM\");\n if (!zoomTool) return false;\n\n const zoomToolIsActive = zoomTool.state === ToolState.ACTIVE;\n\n if (e.touches.length === 1 && zoomToolIsActive) {\n return true;\n }\n\n return false;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n this.isScaling = false;\n\n if (e.touches.length !== 1) {\n return;\n }\n\n if (!this.allow(e)) {\n return;\n }\n\n const pixelPosition = e.touches[0].position;\n this.dragScaleRootUC?.initializeScale(pixelPosition);\n\n this.isScaling = true;\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (!this.isScaling) return;\n if (e.touches.length !== 1) return;\n\n const pixelPosition = e.touches[0].position;\n this.dragScaleRootUC?.doScale(pixelPosition);\n };\n\n onTouchEnd = () => {\n this.isScaling = false;\n this.dragScaleRootUC?.finishScaling();\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TouchScale.type);\n const appObjects = appObject.appObjectRepo;\n\n const touchInput = TouchInputEntity.get(appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MouseHoverOnAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseHoverOnAppObject.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,2CAAgD;AAChD,iDAI0B;AAC1B,qEAAkE;AAClE,6DAA0D;AAE1D,MAAa,qBACX,SAAQ,0BAAmB;IAsB3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAjBvC,iBAAY,GAA6B,SAAS,CAAC;QAE3D,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,WAAM,GAAG,CAAC,CAAkB,EAAE,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;gBAAE,OAAO;YAE3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO;YAE3B,MAAM,GAAG,GAAG,IAAA,yBAAe,EAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC;QAIA,IAAI,CAAC,YAAY,GAAG,2BAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,YAAY,CACnC,mCAAgB,CAAC,IAAI,CACtB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CACV,wIAAwI,CACzI,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,6BAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AA3CH,sDA4CC;AAxCiB,0BAAI,GAAG,uBAAuB,AAA1B,CAA2B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n MouseEventHandler,\n MouseInputEntity,\n MouseInputEvent,\n} from \"../../MouseInput\";\nimport { ZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { HoverAppObjectUC } from \"../UC/HoverAppObjectUC\";\n\nexport class MouseHoverOnAppObject\n extends AppObjectController\n implements MouseEventHandler\n{\n static readonly type = \"MouseHoverOnAppObject\";\n\n private hoverUC?: HoverAppObjectUC;\n private zSpaceEntity: ZSpaceEntity | undefined = undefined;\n\n allow = (e: MouseInputEvent): boolean => {\n return true;\n };\n\n onMove = (e: MouseInputEvent) => {\n if (!this.hoverUC) return;\n if (this.zSpaceEntity && this.zSpaceEntity.emulate) return;\n\n if (!this.allow(e)) return;\n\n const ray = pixelToSceneRay(e.position, this.appObjects);\n this.hoverUC.tryHoverAppObject(ray);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, MouseHoverOnAppObject.type);\n this.zSpaceEntity = ZSpaceEntity.get(this.appObjects);\n\n this.hoverUC = appObject.getComponent<HoverAppObjectUC>(\n HoverAppObjectUC.type\n );\n if (!this.hoverUC) {\n console.warn(\n \"MouseHover has been added to an App Object that does not have a HoverAppObjectUC. Add an HoverAppObjectUC before adding the Controller\"\n );\n return;\n }\n\n const mouseInput = MouseInputEntity.get(this.appObjects);\n if (mouseInput) {\n mouseInput.registerController(this);\n } else {\n this.warn(\"Unable to find MouseInputEntity\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"MouseHoverOnAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseHoverOnAppObject.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,2CAAgD;AAChD,iDAI0B;AAC1B,qEAAkE;AAClE,6DAA0D;AAE1D,MAAa,qBACX,SAAQ,0BAAmB;IAsB3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAjBvC,iBAAY,GAA6B,SAAS,CAAC;QAE3D,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,WAAM,GAAG,CAAC,CAAkB,EAAE,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;gBAAE,OAAO;YAE3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO;YAE3B,MAAM,GAAG,GAAG,IAAA,yBAAe,EAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC;QAIA,IAAI,CAAC,YAAY,GAAG,2BAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,YAAY,CACnC,mCAAgB,CAAC,IAAI,CACtB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CACV,wIAAwI,CACzI,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,6BAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AA3CH,sDA4CC;AAxCiB,0BAAI,GAAG,uBAAuB,AAA1B,CAA2B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n MouseEventHandler,\n MouseInputEntity,\n MouseInputEvent,\n} from \"../../MouseInput\";\nimport { ZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { HoverAppObjectUC } from \"../UC/HoverAppObjectUC\";\n\nexport class MouseHoverOnAppObject\n extends AppObjectController\n implements MouseEventHandler\n{\n static readonly type = \"MouseHoverOnAppObject\";\n\n private hoverUC?: HoverAppObjectUC;\n private zSpaceEntity: ZSpaceEntity | undefined = undefined;\n\n allow = (e: MouseInputEvent): boolean => {\n return true;\n };\n\n onMove = (e: MouseInputEvent) => {\n if (!this.hoverUC) return;\n if (this.zSpaceEntity && this.zSpaceEntity.emulate) return;\n\n if (!this.allow(e)) return;\n\n const ray = pixelToSceneRay(e.position, this.appObjects);\n this.hoverUC.tryHoverAppObject(ray);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, MouseHoverOnAppObject.type);\n this.zSpaceEntity = ZSpaceEntity.get(this.appObjects);\n\n this.hoverUC = appObject.getComponent<HoverAppObjectUC>(\n HoverAppObjectUC.type,\n );\n if (!this.hoverUC) {\n console.warn(\n \"MouseHover has been added to an App Object that does not have a HoverAppObjectUC. Add an HoverAppObjectUC before adding the Controller\",\n );\n return;\n }\n\n const mouseInput = MouseInputEntity.get(this.appObjects);\n if (mouseInput) {\n mouseInput.registerController(this);\n } else {\n this.warn(\"Unable to find MouseInputEntity\");\n }\n }\n}\n"]}
@@ -17,6 +17,7 @@ function makeTestRig() {
17
17
  const mockPixelToRay = jest.fn().mockReturnValue(core_1.ParametricLine.Forward());
18
18
  mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;
19
19
  const mockMouseInput = new MockMouseInput_1.MockMouseInput(selectionAO);
20
+ mockMouseInput.registerController = jest.fn();
20
21
  const controller = new MouseHoverOnAppObject_1.MouseHoverOnAppObject(selectionAO);
21
22
  const mockAllow = jest.fn();
22
23
  mockAllow.mockReturnValue(true);
@@ -1 +1 @@
1
- {"version":3,"file":"MouseHoverOnAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseHoverOnAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { HoverAppObjectUCMock } from \"../Mocks/HoverAppObjectUCMock\";\nimport { MouseHoverOnAppObject } from \"./MouseHoverOnAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new HoverAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n\n const controller = new MouseHoverOnAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Hover Scene Object Mouse Controller\", () => {\n it(\"Sends a ray to the UC on move\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: -1,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onMove(event);\n\n expect(mockUC.tryHoverAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward(),\n );\n });\n\n it(\"Does not send a ray to the UC on move if not allowed\", () => {\n const { controller, mockAllow, mockUC } = makeTestRig();\n\n const evt: MouseInputEvent = {\n position: new Vector2(2, 3),\n button: 0,\n event: new MouseEvent(\"buttondown\"),\n };\n\n mockAllow.mockReturnValue(false);\n\n controller.onMove(evt);\n\n expect(mockUC.tryHoverAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MouseHoverOnAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n mockMouseInput.registerController.mockClear();\n\n new MouseHoverOnAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Does not sends a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: -1,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onMove(event);\n\n expect(mockUC.tryHoverAppObject).not.toHaveBeenCalledWith();\n });\n});\n"]}
1
+ {"version":3,"file":"MouseHoverOnAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseHoverOnAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { HoverAppObjectUCMock } from \"../Mocks/HoverAppObjectUCMock\";\nimport { MouseHoverOnAppObject } from \"./MouseHoverOnAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new HoverAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n mockMouseInput.registerController = jest.fn();\n\n const controller = new MouseHoverOnAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Hover Scene Object Mouse Controller\", () => {\n it(\"Sends a ray to the UC on move\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: -1,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onMove(event);\n\n expect(mockUC.tryHoverAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward()\n );\n });\n\n it(\"Does not send a ray to the UC on move if not allowed\", () => {\n const { controller, mockAllow, mockUC } = makeTestRig();\n\n const evt: MouseInputEvent = {\n position: new Vector2(2, 3),\n button: 0,\n event: new MouseEvent(\"buttondown\"),\n };\n\n mockAllow.mockReturnValue(false);\n\n controller.onMove(evt);\n\n expect(mockUC.tryHoverAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MouseHoverOnAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n (mockMouseInput.registerController as jest.MockedFunction<any>).mockClear();\n\n new MouseHoverOnAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Does not sends a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: -1,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onMove(event);\n\n expect(mockUC.tryHoverAppObject).not.toHaveBeenCalledWith();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MousePressOnAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MousePressOnAppObject.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectController, Vector2 } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n MouseEventHandler,\n MouseInputEntity,\n MouseInputEvent,\n} from \"../../MouseInput\";\nimport { ZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { PressAppObjectUC } from \"../UC/PressAppObjectUC\";\n\nexport class MousePressOnAppObject\n extends AppObjectController\n implements MouseEventHandler\n{\n static readonly type = \"MousePressOnAppObject\";\n static readonly maxTapDistancePx = 5;\n\n private pressUC?: PressAppObjectUC;\n private zSpaceEntity: ZSpaceEntity | undefined = undefined;\n private startPosition: Vector2 = Vector2.Zero();\n private endPosition: Vector2 = Vector2.Zero();\n private pressedID: string | null = null;\n private isPressed: boolean = false;\n\n allow = (e: MouseInputEvent): boolean => {\n return true;\n };\n\n onDown = (e: MouseInputEvent) => {\n if (e.button !== 0) {\n return;\n }\n\n if (!this.pressUC) {\n return;\n }\n\n if (this.zSpaceEntity && this.zSpaceEntity.emulate) return;\n\n if (!this.allow(e)) return;\n\n this.startPosition = e.position as Vector2;\n this.endPosition = this.startPosition;\n this.isPressed = true;\n\n const ray = pixelToSceneRay(e.position, this.appObjects);\n this.pressedID = this.pressUC?.tryPressAppObject(ray);\n };\n\n onUp = (e: MouseInputEvent) => {\n this.isPressed = false;\n\n if (e.button !== 0) {\n return;\n }\n\n if (!this.pressUC) {\n return;\n }\n\n // Set pressedID to null\n this.pressUC.pressAppObject(this.pressedID, this.isPressed);\n };\n\n onMove = (e: MouseInputEvent) => {\n if (!this.pressUC) {\n return;\n }\n\n if (this.isPressed) {\n this.endPosition = e.position as Vector2;\n\n const movement = Vector2.Subtract(\n this.startPosition,\n this.endPosition\n ).magnitued;\n\n if (movement > MousePressOnAppObject.maxTapDistancePx) {\n // Set pressedID to null\n this.pressUC.pressAppObject(null, this.isPressed);\n }\n }\n };\n\n constructor(appObject: AppObject) {\n super(appObject, MousePressOnAppObject.type);\n this.zSpaceEntity = ZSpaceEntity.get(this.appObjects);\n\n this.pressUC = appObject.getComponent<PressAppObjectUC>(\n PressAppObjectUC.type\n );\n if (!this.pressUC) {\n console.warn(\n \"MousePress has been added to an App Object that does not have a PressAppObjectUC. Add a PressAppObjectUC before adding the Controller.\"\n );\n return;\n }\n\n const mouseInput = MouseInputEntity.get(this.appObjects);\n if (mouseInput) {\n mouseInput.registerController(this);\n } else {\n this.warn(\"Unable to find MouseInputEntity\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"MousePressOnAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MousePressOnAppObject.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectController, Vector2 } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n MouseEventHandler,\n MouseInputEntity,\n MouseInputEvent,\n} from \"../../MouseInput\";\nimport { ZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { PressAppObjectUC } from \"../UC/PressAppObjectUC\";\n\nexport class MousePressOnAppObject\n extends AppObjectController\n implements MouseEventHandler\n{\n static readonly type = \"MousePressOnAppObject\";\n static readonly maxTapDistancePx = 5;\n\n private pressUC?: PressAppObjectUC;\n private zSpaceEntity: ZSpaceEntity | undefined = undefined;\n private startPosition: Vector2 = Vector2.Zero();\n private endPosition: Vector2 = Vector2.Zero();\n private pressedID: string | null = null;\n private isPressed: boolean = false;\n\n allow = (e: MouseInputEvent): boolean => {\n return true;\n };\n\n onDown = (e: MouseInputEvent) => {\n if (e.button !== 0) {\n return;\n }\n\n if (!this.pressUC) {\n return;\n }\n\n if (this.zSpaceEntity && this.zSpaceEntity.emulate) return;\n\n if (!this.allow(e)) return;\n\n this.startPosition = e.position as Vector2;\n this.endPosition = this.startPosition;\n this.isPressed = true;\n\n const ray = pixelToSceneRay(e.position, this.appObjects);\n this.pressedID = this.pressUC?.tryPressAppObject(ray);\n };\n\n onUp = (e: MouseInputEvent) => {\n this.isPressed = false;\n\n if (e.button !== 0) {\n return;\n }\n\n if (!this.pressUC) {\n return;\n }\n\n // Set pressedID to null\n this.pressUC.pressAppObject(this.pressedID, this.isPressed);\n };\n\n onMove = (e: MouseInputEvent) => {\n if (!this.pressUC) {\n return;\n }\n\n if (this.isPressed) {\n this.endPosition = e.position as Vector2;\n\n const movement = Vector2.Subtract(\n this.startPosition,\n this.endPosition,\n ).magnitued;\n\n if (movement > MousePressOnAppObject.maxTapDistancePx) {\n // Set pressedID to null\n this.pressUC.pressAppObject(null, this.isPressed);\n }\n }\n };\n\n constructor(appObject: AppObject) {\n super(appObject, MousePressOnAppObject.type);\n this.zSpaceEntity = ZSpaceEntity.get(this.appObjects);\n\n this.pressUC = appObject.getComponent<PressAppObjectUC>(\n PressAppObjectUC.type,\n );\n if (!this.pressUC) {\n console.warn(\n \"MousePress has been added to an App Object that does not have a PressAppObjectUC. Add a PressAppObjectUC before adding the Controller.\",\n );\n return;\n }\n\n const mouseInput = MouseInputEntity.get(this.appObjects);\n if (mouseInput) {\n mouseInput.registerController(this);\n } else {\n this.warn(\"Unable to find MouseInputEntity\");\n }\n }\n}\n"]}
@@ -17,6 +17,7 @@ function makeTestRig() {
17
17
  const mockPixelToRay = jest.fn().mockReturnValue(core_1.ParametricLine.Forward());
18
18
  mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;
19
19
  const mockMouseInput = new MockMouseInput_1.MockMouseInput(selectionAO);
20
+ mockMouseInput.registerController = jest.fn();
20
21
  const controller = new MousePressOnAppObject_1.MousePressOnAppObject(selectionAO);
21
22
  const mockAllow = jest.fn();
22
23
  mockAllow.mockReturnValue(true);
@@ -1 +1 @@
1
- {"version":3,"file":"MousePressOnAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MousePressOnAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { PressAppObjectUCMock } from \"../Mocks/PressAppObjectUCMock\";\nimport { MousePressOnAppObject } from \"./MousePressOnAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new PressAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n\n const controller = new MousePressOnAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Mouse Press Scene Object On App Controller\", () => {\n it(\"Sends a ray to the UC when the left button is pressed\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.tryPressAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward(),\n );\n });\n\n it(\"Does not send a ray to the UC when the left button is not pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: -1,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.tryPressAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MousePressOnAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n mockMouseInput.registerController.mockClear();\n\n new MousePressOnAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Sets pressID to null when the left button is released\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttonup\"),\n };\n\n controller.onUp(event);\n\n expect(mockUC.pressAppObject).toHaveBeenCalled();\n });\n\n it(\"Sets pressID to null when the mouse moves more than 5 pixels while pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, 0),\n event: new MouseEvent(\"buttondown\"),\n };\n const event2: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, MousePressOnAppObject.maxTapDistancePx + 1),\n event: new MouseEvent(\"buttonmove\"),\n };\n\n controller.onDown(event);\n controller.onMove(event2);\n\n expect(mockUC.pressAppObject).toHaveBeenCalled();\n });\n\n it(\"Does not set pressID to null when the mouse moves less than 5 pixels while pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, 0),\n event: new MouseEvent(\"buttondown\"),\n };\n const event2: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, MousePressOnAppObject.maxTapDistancePx - 1),\n event: new MouseEvent(\"buttonmove\"),\n };\n\n controller.onDown(event);\n controller.onMove(event2);\n\n expect(mockUC.pressAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Does not send a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.pressAppObject).not.toHaveBeenCalledWith();\n });\n});\n"]}
1
+ {"version":3,"file":"MousePressOnAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MousePressOnAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { PressAppObjectUCMock } from \"../Mocks/PressAppObjectUCMock\";\nimport { MousePressOnAppObject } from \"./MousePressOnAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new PressAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n mockMouseInput.registerController = jest.fn();\n\n const controller = new MousePressOnAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Mouse Press Scene Object On App Controller\", () => {\n it(\"Sends a ray to the UC when the left button is pressed\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.tryPressAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward()\n );\n });\n\n it(\"Does not send a ray to the UC when the left button is not pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: -1,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.tryPressAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MousePressOnAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n (mockMouseInput.registerController as jest.MockedFunction<any>).mockClear();\n\n new MousePressOnAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Sets pressID to null when the left button is released\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttonup\"),\n };\n\n controller.onUp(event);\n\n expect(mockUC.pressAppObject).toHaveBeenCalled();\n });\n\n it(\"Sets pressID to null when the mouse moves more than 5 pixels while pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, 0),\n event: new MouseEvent(\"buttondown\"),\n };\n const event2: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, MousePressOnAppObject.maxTapDistancePx + 1),\n event: new MouseEvent(\"buttonmove\"),\n };\n\n controller.onDown(event);\n controller.onMove(event2);\n\n expect(mockUC.pressAppObject).toHaveBeenCalled();\n });\n\n it(\"Does not set pressID to null when the mouse moves less than 5 pixels while pressed\", () => {\n const { controller, mockUC } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, 0),\n event: new MouseEvent(\"buttondown\"),\n };\n const event2: MouseInputEvent = {\n button: 0,\n position: new Vector2(0, MousePressOnAppObject.maxTapDistancePx - 1),\n event: new MouseEvent(\"buttonmove\"),\n };\n\n controller.onDown(event);\n controller.onMove(event2);\n\n expect(mockUC.pressAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Does not send a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(2, 3),\n event: new MouseEvent(\"buttondown\"),\n };\n\n controller.onDown(event);\n\n expect(mockUC.pressAppObject).not.toHaveBeenCalledWith();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MouseSelectAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseSelectAppObject.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,2CAAgD;AAChD,iDAI0B;AAC1B,qEAAkE;AAClE,+DAA4D;AAE5D,MAAa,oBACX,SAAQ,0BAAmB;IA6B3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAxBtC,iBAAY,GAA6B,SAAS,CAAC;QAE3D,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,YAAO,GAAG,CAAC,CAAkB,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;gBAAE,OAAO;YAE3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO;YAE3B,MAAM,GAAG,GAAG,IAAA,yBAAe,EAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC;QAIA,IAAI,CAAC,YAAY,GAAG,2BAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,YAAY,CACpC,qCAAiB,CAAC,IAAI,CACvB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CACV,2IAA2I,CAC5I,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,6BAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AAlDH,oDAmDC;AA/CiB,yBAAI,GAAG,sBAAsB,AAAzB,CAA0B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n MouseEventHandler,\n MouseInputEntity,\n MouseInputEvent,\n} from \"../../MouseInput\";\nimport { ZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { SelectAppObjectUC } from \"../UC/SelectAppObjectUC\";\n\nexport class MouseSelectAppObject\n extends AppObjectController\n implements MouseEventHandler\n{\n static readonly type = \"MouseSelectAppObject\";\n\n private selectUC?: SelectAppObjectUC;\n private zSpaceEntity: ZSpaceEntity | undefined = undefined;\n\n allow = (e: MouseInputEvent): boolean => {\n return true;\n };\n\n onClick = (e: MouseInputEvent) => {\n if (!this.selectUC) {\n return;\n }\n\n if (e.button !== 0) {\n return;\n }\n\n if (this.zSpaceEntity && this.zSpaceEntity.emulate) return;\n\n if (!this.allow(e)) return;\n\n const ray = pixelToSceneRay(e.position, this.appObjects);\n this.selectUC.trySelectAppObject(ray);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, MouseSelectAppObject.type);\n this.zSpaceEntity = ZSpaceEntity.get(this.appObjects);\n\n this.selectUC = appObject.getComponent<SelectAppObjectUC>(\n SelectAppObjectUC.type\n );\n if (!this.selectUC) {\n console.warn(\n \"MouseSelect has been added to an App Object that does not have a SelectAppObjectUC. Add a SelectAppObjectUC before adding the Controller.\"\n );\n return;\n }\n\n const mouseInput = MouseInputEntity.get(this.appObjects);\n if (mouseInput) {\n mouseInput.registerController(this);\n } else {\n this.warn(\"Unable to find MouseInputEntity\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"MouseSelectAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseSelectAppObject.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,2CAAgD;AAChD,iDAI0B;AAC1B,qEAAkE;AAClE,+DAA4D;AAE5D,MAAa,oBACX,SAAQ,0BAAmB;IA6B3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAxBtC,iBAAY,GAA6B,SAAS,CAAC;QAE3D,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,YAAO,GAAG,CAAC,CAAkB,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;gBAAE,OAAO;YAE3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO;YAE3B,MAAM,GAAG,GAAG,IAAA,yBAAe,EAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC;QAIA,IAAI,CAAC,YAAY,GAAG,2BAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,YAAY,CACpC,qCAAiB,CAAC,IAAI,CACvB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CACV,2IAA2I,CAC5I,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,6BAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AAlDH,oDAmDC;AA/CiB,yBAAI,GAAG,sBAAsB,AAAzB,CAA0B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n MouseEventHandler,\n MouseInputEntity,\n MouseInputEvent,\n} from \"../../MouseInput\";\nimport { ZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { SelectAppObjectUC } from \"../UC/SelectAppObjectUC\";\n\nexport class MouseSelectAppObject\n extends AppObjectController\n implements MouseEventHandler\n{\n static readonly type = \"MouseSelectAppObject\";\n\n private selectUC?: SelectAppObjectUC;\n private zSpaceEntity: ZSpaceEntity | undefined = undefined;\n\n allow = (e: MouseInputEvent): boolean => {\n return true;\n };\n\n onClick = (e: MouseInputEvent) => {\n if (!this.selectUC) {\n return;\n }\n\n if (e.button !== 0) {\n return;\n }\n\n if (this.zSpaceEntity && this.zSpaceEntity.emulate) return;\n\n if (!this.allow(e)) return;\n\n const ray = pixelToSceneRay(e.position, this.appObjects);\n this.selectUC.trySelectAppObject(ray);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, MouseSelectAppObject.type);\n this.zSpaceEntity = ZSpaceEntity.get(this.appObjects);\n\n this.selectUC = appObject.getComponent<SelectAppObjectUC>(\n SelectAppObjectUC.type,\n );\n if (!this.selectUC) {\n console.warn(\n \"MouseSelect has been added to an App Object that does not have a SelectAppObjectUC. Add a SelectAppObjectUC before adding the Controller.\",\n );\n return;\n }\n\n const mouseInput = MouseInputEntity.get(this.appObjects);\n if (mouseInput) {\n mouseInput.registerController(this);\n } else {\n this.warn(\"Unable to find MouseInputEntity\");\n }\n }\n}\n"]}
@@ -17,6 +17,7 @@ function makeTestRig() {
17
17
  const mockPixelToRay = jest.fn().mockReturnValue(core_1.ParametricLine.Forward());
18
18
  mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;
19
19
  const mockMouseInput = new MockMouseInput_1.MockMouseInput(selectionAO);
20
+ mockMouseInput.registerController = jest.fn();
20
21
  const controller = new MouseSelectAppObject_1.MouseSelectAppObject(selectionAO);
21
22
  const mockAllow = jest.fn();
22
23
  mockAllow.mockReturnValue(true);
@@ -1 +1 @@
1
- {"version":3,"file":"MouseSelectAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseSelectAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { SelectAppObjectUCMock } from \"../Mocks/SelectAppObjectUCMock\";\nimport { MouseSelectAppObject } from \"./MouseSelectAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new SelectAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n\n const controller = new MouseSelectAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Select Scene Object Mouse Controller\", () => {\n it(\"Sends a ray to the UC on select\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onClick(event);\n\n expect(mockUC.trySelectAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward(),\n );\n });\n\n it(\"Does not send a ray to the UC on click if not allowed\", () => {\n const { controller, mockAllow, mockUC } = makeTestRig();\n\n const evt: MouseInputEvent = {\n position: new Vector2(2, 3),\n button: 0,\n event: new MouseEvent(\"buttondown\"),\n };\n\n mockAllow.mockReturnValue(false);\n\n controller.onClick(evt);\n\n expect(mockUC.trySelectAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MouseSelectAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n mockMouseInput.registerController.mockClear();\n\n new MouseSelectAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Does not send a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onClick(event);\n\n expect(mockUC.trySelectAppObject).not.toHaveBeenCalled();\n });\n});\n"]}
1
+ {"version":3,"file":"MouseSelectAppObject.test.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/MouseSelectAppObject.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo, ParametricLine, Vector2 } from \"@vived/core\";\nimport { makeMockPixelToSceneRayUC } from \"../../Babylon\";\nimport { MouseInputEvent } from \"../../MouseInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { makeZSpaceEntity } from \"../../zSpace/Entities/ZSpaceEntity\";\nimport { SelectAppObjectUCMock } from \"../Mocks/SelectAppObjectUCMock\";\nimport { MouseSelectAppObject } from \"./MouseSelectAppObject\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n const zSpaceAO = appObjects.getOrCreate(\"zSpace\");\n const zSpace = makeZSpaceEntity(zSpaceAO);\n zSpace.emulate = false;\n\n const selectionAO = appObjects.getOrCreate(\"selection\");\n const mockUC = new SelectAppObjectUCMock(selectionAO);\n\n const mockPixelToSceneUC = makeMockPixelToSceneRayUC(appObjects);\n const mockPixelToRay = jest.fn().mockReturnValue(ParametricLine.Forward());\n mockPixelToSceneUC.pixelToSceneRay = mockPixelToRay;\n\n const mockMouseInput = new MockMouseInput(selectionAO);\n mockMouseInput.registerController = jest.fn();\n\n const controller = new MouseSelectAppObject(selectionAO);\n\n const mockAllow = jest.fn();\n mockAllow.mockReturnValue(true);\n controller.allow = mockAllow;\n\n return {\n mockMouseInput,\n appObjects,\n zSpace,\n controller,\n mockUC,\n mockAllow,\n };\n}\n\ndescribe(\"Select Scene Object Mouse Controller\", () => {\n it(\"Sends a ray to the UC on select\", () => {\n const { mockUC, controller } = makeTestRig();\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onClick(event);\n\n expect(mockUC.trySelectAppObject).toHaveBeenCalledWith(\n ParametricLine.Forward()\n );\n });\n\n it(\"Does not send a ray to the UC on click if not allowed\", () => {\n const { controller, mockAllow, mockUC } = makeTestRig();\n\n const evt: MouseInputEvent = {\n position: new Vector2(2, 3),\n button: 0,\n event: new MouseEvent(\"buttondown\"),\n };\n\n mockAllow.mockReturnValue(false);\n\n controller.onClick(evt);\n\n expect(mockUC.trySelectAppObject).not.toHaveBeenCalled();\n });\n\n it(\"Warns if it is added to an app object that does not have a UC\", () => {\n const { appObjects } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n\n new MouseSelectAppObject(anotherAppObj);\n\n expect(console.warn).toHaveBeenCalled();\n });\n\n it(\"Does not register itself if the object does not have a UC\", () => {\n const { appObjects, mockMouseInput } = makeTestRig();\n\n const anotherAppObj = appObjects.getOrCreate(\"newAppObj\");\n console.warn = jest.fn();\n (mockMouseInput.registerController as jest.MockedFunction<any>).mockClear();\n\n new MouseSelectAppObject(anotherAppObj);\n\n expect(mockMouseInput.registerController).not.toHaveBeenCalled();\n });\n\n it(\"Does not send a ray to the UC if zSpace mouse emulate is on\", () => {\n const { mockUC, controller, zSpace } = makeTestRig();\n\n zSpace.emulate = true;\n\n const event: MouseInputEvent = {\n button: 0,\n position: new Vector2(5, 6),\n event: new MouseEvent(\"\"),\n };\n\n controller.onClick(event);\n\n expect(mockUC.trySelectAppObject).not.toHaveBeenCalled();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"StylusHoverOnAppObjectSC.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/StylusHoverOnAppObjectSC.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,yCAAgE;AAChE,6DAA0D;AAE1D,MAAa,wBACX,SAAQ,0BAAmB;IAuB3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAjBlD,UAAK,GAAG,GAAY,EAAE;YACpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,iBAAY,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEzB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;YAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAEvC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC;QAKA,IAAI,CAAC,MAAM,GAAG,qBAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,YAAY,CACnC,mCAAgB,CAAC,IAAI,CACtB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CACV,uGAAuG,CACxG,CAAC;QACJ,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CACV,2EAA2E,CAC5E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;;AAhDH,4DAiDC;AA7CiB,6BAAI,GAAG,0BAA0B,AAA7B,CAA8B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { StylusEventHandler, StylusEntity } from \"../../Stylus\";\nimport { HoverAppObjectUC } from \"../UC/HoverAppObjectUC\";\n\nexport class StylusHoverOnAppObjectSC\n extends AppObjectController\n implements StylusEventHandler\n{\n static readonly type = \"StylusHoverOnAppObjectSC\";\n private stylus?: StylusEntity;\n private hoverUC?: HoverAppObjectUC;\n\n allow = (): boolean => {\n return true;\n };\n\n onStylusMove = () => {\n if (!this.stylus) return;\n\n if (!this.hoverUC) return;\n\n if (!this.allow()) return;\n\n const pointerRay = this.stylus.pickRay;\n\n this.hoverUC.tryHoverAppObject(pointerRay);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, StylusHoverOnAppObjectSC.type);\n\n this.stylus = StylusEntity.get(this.appObjects);\n if (!this.stylus) {\n this.warn(\"Unable to find StylusEntity\");\n return;\n }\n\n this.hoverUC = appObject.getComponent<HoverAppObjectUC>(\n HoverAppObjectUC.type\n );\n\n if (!this.stylus) {\n console.warn(\n \"StylusInputPointer Controller has been added to an app object that does not have a ZSpaceStylusEntity\"\n );\n } else if (!this.hoverUC) {\n console.warn(\n \"HoverAppObjectUC has not been found on any objects in the app object repo\"\n );\n } else {\n this.stylus.registerController(this);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"StylusHoverOnAppObjectSC.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/StylusHoverOnAppObjectSC.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,yCAAgE;AAChE,6DAA0D;AAE1D,MAAa,wBACX,SAAQ,0BAAmB;IAuB3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAjBlD,UAAK,GAAG,GAAY,EAAE;YACpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,iBAAY,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEzB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;YAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAEvC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC;QAKA,IAAI,CAAC,MAAM,GAAG,qBAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,YAAY,CACnC,mCAAgB,CAAC,IAAI,CACtB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CACV,uGAAuG,CACxG,CAAC;QACJ,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CACV,2EAA2E,CAC5E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;;AAhDH,4DAiDC;AA7CiB,6BAAI,GAAG,0BAA0B,AAA7B,CAA8B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { StylusEventHandler, StylusEntity } from \"../../Stylus\";\nimport { HoverAppObjectUC } from \"../UC/HoverAppObjectUC\";\n\nexport class StylusHoverOnAppObjectSC\n extends AppObjectController\n implements StylusEventHandler\n{\n static readonly type = \"StylusHoverOnAppObjectSC\";\n private stylus?: StylusEntity;\n private hoverUC?: HoverAppObjectUC;\n\n allow = (): boolean => {\n return true;\n };\n\n onStylusMove = () => {\n if (!this.stylus) return;\n\n if (!this.hoverUC) return;\n\n if (!this.allow()) return;\n\n const pointerRay = this.stylus.pickRay;\n\n this.hoverUC.tryHoverAppObject(pointerRay);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, StylusHoverOnAppObjectSC.type);\n\n this.stylus = StylusEntity.get(this.appObjects);\n if (!this.stylus) {\n this.warn(\"Unable to find StylusEntity\");\n return;\n }\n\n this.hoverUC = appObject.getComponent<HoverAppObjectUC>(\n HoverAppObjectUC.type,\n );\n\n if (!this.stylus) {\n console.warn(\n \"StylusInputPointer Controller has been added to an app object that does not have a ZSpaceStylusEntity\",\n );\n } else if (!this.hoverUC) {\n console.warn(\n \"HoverAppObjectUC has not been found on any objects in the app object repo\",\n );\n } else {\n this.stylus.registerController(this);\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"StylusPressOnAppObjectSC.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/StylusPressOnAppObjectSC.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectController, Vector3 } from \"@vived/core\";\nimport { StylusEventHandler, StylusEntity } from \"../../Stylus\";\nimport { PressAppObjectUC } from \"../UC/PressAppObjectUC\";\n\nexport class StylusPressOnAppObjectSC\n extends AppObjectController\n implements StylusEventHandler\n{\n static readonly type = \"StylusPressOnAppObjectSC\";\n static readonly maxTapDistancePx = 5;\n\n private stylus?: StylusEntity;\n private pressUC?: PressAppObjectUC;\n private startPosition: Vector3 = Vector3.Zero();\n private endPosition: Vector3 = Vector3.Zero();\n private pressedID: string | null = null;\n private isPressed: boolean = false;\n\n allow = (button: number): boolean => {\n return true;\n };\n\n onButtonDown = (button: number) => {\n if (!this.stylus) return;\n if (!this.pressUC) return;\n\n if (!this.allow(button)) return;\n\n this.startPosition = this.stylus.transform.localPosition as Vector3;\n this.endPosition = this.startPosition;\n this.isPressed = true;\n\n this.pressedID = this.pressUC?.tryPressAppObject(this.stylus.pickRay);\n };\n\n onButtonUp = (button: number) => {\n this.isPressed = false;\n\n if (button !== 0) return;\n\n if (!this.pressUC) return;\n\n // Set pressedID to null\n this.pressUC.pressAppObject(this.pressedID, this.isPressed);\n };\n\n onStylusMove = () => {\n if (!this.pressUC) {\n return;\n }\n\n if (this.isPressed) {\n this.endPosition = this.stylus?.transform.localPosition as Vector3;\n\n const movement = Vector3.Subtract(\n this.startPosition,\n this.endPosition\n ).magnitude;\n\n if (movement > StylusPressOnAppObjectSC.maxTapDistancePx) {\n // Set pressedID to null\n this.pressUC.pressAppObject(null, this.isPressed);\n }\n }\n };\n\n constructor(appObject: AppObject) {\n super(appObject, StylusPressOnAppObjectSC.type);\n\n this.stylus = StylusEntity.get(this.appObjects);\n if (!this.stylus) {\n this.error(\"Unable to find StylusEntity\");\n return;\n }\n\n this.pressUC = appObject.getComponent<PressAppObjectUC>(\n PressAppObjectUC.type\n );\n\n if (!this.pressUC) {\n this.error(\"Unable to get PressAppObjectUC from the App Object\");\n return;\n }\n\n this.stylus.registerController(this);\n }\n}\n"]}
1
+ {"version":3,"file":"StylusPressOnAppObjectSC.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/StylusPressOnAppObjectSC.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectController, Vector3 } from \"@vived/core\";\nimport { StylusEventHandler, StylusEntity } from \"../../Stylus\";\nimport { PressAppObjectUC } from \"../UC/PressAppObjectUC\";\n\nexport class StylusPressOnAppObjectSC\n extends AppObjectController\n implements StylusEventHandler\n{\n static readonly type = \"StylusPressOnAppObjectSC\";\n static readonly maxTapDistancePx = 5;\n\n private stylus?: StylusEntity;\n private pressUC?: PressAppObjectUC;\n private startPosition: Vector3 = Vector3.Zero();\n private endPosition: Vector3 = Vector3.Zero();\n private pressedID: string | null = null;\n private isPressed: boolean = false;\n\n allow = (button: number): boolean => {\n return true;\n };\n\n onButtonDown = (button: number) => {\n if (!this.stylus) return;\n if (!this.pressUC) return;\n\n if (!this.allow(button)) return;\n\n this.startPosition = this.stylus.transform.localPosition as Vector3;\n this.endPosition = this.startPosition;\n this.isPressed = true;\n\n this.pressedID = this.pressUC?.tryPressAppObject(this.stylus.pickRay);\n };\n\n onButtonUp = (button: number) => {\n this.isPressed = false;\n\n if (button !== 0) return;\n\n if (!this.pressUC) return;\n\n // Set pressedID to null\n this.pressUC.pressAppObject(this.pressedID, this.isPressed);\n };\n\n onStylusMove = () => {\n if (!this.pressUC) {\n return;\n }\n\n if (this.isPressed) {\n this.endPosition = this.stylus?.transform.localPosition as Vector3;\n\n const movement = Vector3.Subtract(\n this.startPosition,\n this.endPosition,\n ).magnitude;\n\n if (movement > StylusPressOnAppObjectSC.maxTapDistancePx) {\n // Set pressedID to null\n this.pressUC.pressAppObject(null, this.isPressed);\n }\n }\n };\n\n constructor(appObject: AppObject) {\n super(appObject, StylusPressOnAppObjectSC.type);\n\n this.stylus = StylusEntity.get(this.appObjects);\n if (!this.stylus) {\n this.error(\"Unable to find StylusEntity\");\n return;\n }\n\n this.pressUC = appObject.getComponent<PressAppObjectUC>(\n PressAppObjectUC.type,\n );\n\n if (!this.pressUC) {\n this.error(\"Unable to get PressAppObjectUC from the App Object\");\n return;\n }\n\n this.stylus.registerController(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"StylusSelectAppObjectSC.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/StylusSelectAppObjectSC.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,yCAAgE;AAChE,8BAA0C;AAE1C,MAAa,uBACX,SAAQ,0BAAmB;IAyB3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAnBjD,UAAK,GAAG,GAAY,EAAE;YACpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,kBAAa,GAAG,CAAC,MAAc,EAAE,EAAE;YACjC,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEzB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEzB,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAE3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;YAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAEvC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC;QAKA,IAAI,CAAC,MAAM,GAAG,qBAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,YAAY,CACpC,sBAAiB,CAAC,IAAI,CACvB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;;AA5CH,0DA6CC;AAzCiB,4BAAI,GAAG,yBAAyB,AAA5B,CAA6B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { StylusEventHandler, StylusEntity } from \"../../Stylus\";\nimport { SelectAppObjectUC } from \"../UC\";\n\nexport class StylusSelectAppObjectSC\n extends AppObjectController\n implements StylusEventHandler\n{\n static readonly type = \"StylusSelectAppObjectSC\";\n private stylus?: StylusEntity;\n private selectUC?: SelectAppObjectUC;\n\n allow = (): boolean => {\n return true;\n };\n\n onButtonClick = (button: number) => {\n if (button !== 0) return;\n\n if (!this.stylus) return;\n\n if (!this.selectUC) return;\n\n if (!this.allow()) return;\n\n const pointerRay = this.stylus.pickRay;\n\n this.selectUC.trySelectAppObject(pointerRay);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, StylusSelectAppObjectSC.type);\n\n this.stylus = StylusEntity.get(this.appObjects);\n if (!this.stylus) {\n this.error(\"Unable to find StylusEntity\");\n return;\n }\n\n this.selectUC = appObject.getComponent<SelectAppObjectUC>(\n SelectAppObjectUC.type\n );\n\n if (!this.selectUC) {\n this.error(\"Added to an App Object that does not have SelectAppObjectUC\");\n return;\n }\n this.stylus.registerController(this);\n }\n}\n"]}
1
+ {"version":3,"file":"StylusSelectAppObjectSC.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/StylusSelectAppObjectSC.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,yCAAgE;AAChE,8BAA0C;AAE1C,MAAa,uBACX,SAAQ,0BAAmB;IAyB3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAnBjD,UAAK,GAAG,GAAY,EAAE;YACpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,kBAAa,GAAG,CAAC,MAAc,EAAE,EAAE;YACjC,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEzB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEzB,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAE3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;YAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAEvC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC;QAKA,IAAI,CAAC,MAAM,GAAG,qBAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,YAAY,CACpC,sBAAiB,CAAC,IAAI,CACvB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;;AA5CH,0DA6CC;AAzCiB,4BAAI,GAAG,yBAAyB,AAA5B,CAA6B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { StylusEventHandler, StylusEntity } from \"../../Stylus\";\nimport { SelectAppObjectUC } from \"../UC\";\n\nexport class StylusSelectAppObjectSC\n extends AppObjectController\n implements StylusEventHandler\n{\n static readonly type = \"StylusSelectAppObjectSC\";\n private stylus?: StylusEntity;\n private selectUC?: SelectAppObjectUC;\n\n allow = (): boolean => {\n return true;\n };\n\n onButtonClick = (button: number) => {\n if (button !== 0) return;\n\n if (!this.stylus) return;\n\n if (!this.selectUC) return;\n\n if (!this.allow()) return;\n\n const pointerRay = this.stylus.pickRay;\n\n this.selectUC.trySelectAppObject(pointerRay);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, StylusSelectAppObjectSC.type);\n\n this.stylus = StylusEntity.get(this.appObjects);\n if (!this.stylus) {\n this.error(\"Unable to find StylusEntity\");\n return;\n }\n\n this.selectUC = appObject.getComponent<SelectAppObjectUC>(\n SelectAppObjectUC.type,\n );\n\n if (!this.selectUC) {\n this.error(\"Added to an App Object that does not have SelectAppObjectUC\");\n return;\n }\n this.stylus.registerController(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TapToSelectAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/TapToSelectAppObject.ts"],"names":[],"mappings":";;;AAAA,sCAAsE;AACtE,2CAAgD;AAChD,2DAI+B;AAC/B,+DAA4D;AAE5D,MAAa,oBACX,SAAQ,0BAAmB;IA2D3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QArDtC,kBAAa,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QACxC,gBAAW,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QACtC,eAAU,GAAY,KAAK,CAAC;QAEpC,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;YACpC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAmB,CAAC;YACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAmB,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;QAEF,eAAU,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,cAAO,CAAC,QAAQ,CAC/B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,WAAW,CACjB,CAAC,SAAS,CAAC;YAEZ,IAAI,QAAQ,IAAI,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,IAAA,yBAAe,EAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/D,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC;QAKA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,YAAY,CACpC,qCAAiB,CAAC,IAAI,CACvB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CACV,2IAA2I,CAC5I,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,kCAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AA/EH,oDAgFC;AA5EiB,yBAAI,GAAG,sBAAsB,AAAzB,CAA0B;AAC9B,qCAAgB,GAAG,CAAC,AAAJ,CAAK","sourcesContent":["import { AppObject, AppObjectController, Vector2 } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { SelectAppObjectUC } from \"../UC/SelectAppObjectUC\";\n\nexport class TapToSelectAppObject\n extends AppObjectController\n implements TouchEventHandler\n{\n static readonly type = \"TapToSelectAppObject\";\n static readonly maxTapDistancePx = 5;\n\n private selectUC?: SelectAppObjectUC;\n private startPosition: Vector2 = Vector2.Zero();\n private endPosition: Vector2 = Vector2.Zero();\n private doTouchEnd: boolean = false;\n\n allow = (e: TouchInputEvent): boolean => {\n return true;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n this.doTouchEnd = false;\n\n if (e.touches.length !== 1) {\n return;\n }\n\n if (!this.allow(e)) {\n return;\n }\n\n this.startPosition = e.touches[0].position as Vector2;\n this.endPosition = this.startPosition;\n this.doTouchEnd = true;\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (e.touches.length === 1) {\n this.endPosition = e.touches[0].position as Vector2;\n } else {\n this.doTouchEnd = false;\n }\n };\n\n onTouchEnd = () => {\n if (!this.doTouchEnd) {\n return;\n }\n\n if (!this.selectUC) {\n return;\n }\n\n const movement = Vector2.Subtract(\n this.startPosition,\n this.endPosition\n ).magnitued;\n\n if (movement <= TapToSelectAppObject.maxTapDistancePx) {\n const ray = pixelToSceneRay(this.endPosition, this.appObjects);\n this.selectUC?.trySelectAppObject(ray);\n }\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TapToSelectAppObject.type);\n\n this.selectUC = appObject.getComponent<SelectAppObjectUC>(\n SelectAppObjectUC.type\n );\n if (!this.selectUC) {\n console.warn(\n \"MouseSelect has been added to an App Object that does not have a SelectAppObjectUC. Add a SelectAppObjectUC before adding the Controller.\"\n );\n return;\n }\n\n const touchInput = TouchInputEntity.get(this.appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"TapToSelectAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/TapToSelectAppObject.ts"],"names":[],"mappings":";;;AAAA,sCAAsE;AACtE,2CAAgD;AAChD,2DAI+B;AAC/B,+DAA4D;AAE5D,MAAa,oBACX,SAAQ,0BAAmB;IA2D3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QArDtC,kBAAa,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QACxC,gBAAW,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QACtC,eAAU,GAAY,KAAK,CAAC;QAEpC,UAAK,GAAG,CAAC,CAAkB,EAAW,EAAE;YACtC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;YACpC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAmB,CAAC;YACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,CAAkB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAmB,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;QAEF,eAAU,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,cAAO,CAAC,QAAQ,CAC/B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,WAAW,CACjB,CAAC,SAAS,CAAC;YAEZ,IAAI,QAAQ,IAAI,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,IAAA,yBAAe,EAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/D,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC;QAKA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,YAAY,CACpC,qCAAiB,CAAC,IAAI,CACvB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CACV,2IAA2I,CAC5I,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,kCAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;AA/EH,oDAgFC;AA5EiB,yBAAI,GAAG,sBAAsB,AAAzB,CAA0B;AAC9B,qCAAgB,GAAG,CAAC,AAAJ,CAAK","sourcesContent":["import { AppObject, AppObjectController, Vector2 } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { SelectAppObjectUC } from \"../UC/SelectAppObjectUC\";\n\nexport class TapToSelectAppObject\n extends AppObjectController\n implements TouchEventHandler\n{\n static readonly type = \"TapToSelectAppObject\";\n static readonly maxTapDistancePx = 5;\n\n private selectUC?: SelectAppObjectUC;\n private startPosition: Vector2 = Vector2.Zero();\n private endPosition: Vector2 = Vector2.Zero();\n private doTouchEnd: boolean = false;\n\n allow = (e: TouchInputEvent): boolean => {\n return true;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n this.doTouchEnd = false;\n\n if (e.touches.length !== 1) {\n return;\n }\n\n if (!this.allow(e)) {\n return;\n }\n\n this.startPosition = e.touches[0].position as Vector2;\n this.endPosition = this.startPosition;\n this.doTouchEnd = true;\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (e.touches.length === 1) {\n this.endPosition = e.touches[0].position as Vector2;\n } else {\n this.doTouchEnd = false;\n }\n };\n\n onTouchEnd = () => {\n if (!this.doTouchEnd) {\n return;\n }\n\n if (!this.selectUC) {\n return;\n }\n\n const movement = Vector2.Subtract(\n this.startPosition,\n this.endPosition,\n ).magnitued;\n\n if (movement <= TapToSelectAppObject.maxTapDistancePx) {\n const ray = pixelToSceneRay(this.endPosition, this.appObjects);\n this.selectUC?.trySelectAppObject(ray);\n }\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TapToSelectAppObject.type);\n\n this.selectUC = appObject.getComponent<SelectAppObjectUC>(\n SelectAppObjectUC.type,\n );\n if (!this.selectUC) {\n console.warn(\n \"MouseSelect has been added to an App Object that does not have a SelectAppObjectUC. Add a SelectAppObjectUC before adding the Controller.\",\n );\n return;\n }\n\n const touchInput = TouchInputEntity.get(this.appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TouchPressOnAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/TouchPressOnAppObject.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectController, Vector2 } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { PressAppObjectUC } from \"../UC/PressAppObjectUC\";\n\nexport class TouchPressOnAppObject\n extends AppObjectController\n implements TouchEventHandler\n{\n static readonly type = \"TouchPressOnAppObject\";\n static readonly maxTapDistancePx = 5;\n\n private pressUC?: PressAppObjectUC;\n private startPosition: Vector2 = Vector2.Zero();\n private endPosition: Vector2 = Vector2.Zero();\n private doTouchEnd: boolean = false;\n private pressedID: string | null = null;\n private isPressed: boolean = false;\n\n allow = (e: TouchInputEvent): boolean => {\n return true;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n this.doTouchEnd = false;\n this.isPressed = true;\n\n if (!this.pressUC) {\n return;\n }\n\n if (e.touches.length !== 1) {\n return;\n }\n\n if (!this.allow(e)) {\n return;\n }\n\n this.startPosition = e.touches[0].position as Vector2;\n this.endPosition = this.startPosition;\n this.doTouchEnd = true;\n\n const ray = pixelToSceneRay(this.endPosition, this.appObjects);\n this.pressedID = this.pressUC?.tryPressAppObject(ray);\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (e.touches.length === 1) {\n this.endPosition = e.touches[0].position as Vector2;\n\n const movement = Vector2.Subtract(\n this.startPosition,\n this.endPosition\n ).magnitued;\n\n if (movement > TouchPressOnAppObject.maxTapDistancePx) {\n this.pressUC?.pressAppObject(null, true);\n }\n } else {\n this.pressUC?.pressAppObject(null, true);\n this.doTouchEnd = false;\n }\n };\n\n onTouchEnd = () => {\n if (!this.doTouchEnd) {\n return;\n }\n this.isPressed = false;\n\n this.pressUC?.pressAppObject(this.pressedID, this.isPressed);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TouchPressOnAppObject.type);\n\n this.pressUC = appObject.getComponent<PressAppObjectUC>(\n PressAppObjectUC.type\n );\n if (!this.pressUC) {\n console.warn(\n \"TouchPress has been added to an App Object that does not have a PressAppObjectUC. Add a PressAppObjectUC before adding the Controller.\"\n );\n return;\n }\n\n const touchInput = TouchInputEntity.get(this.appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"TouchPressOnAppObject.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/TouchPressOnAppObject.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectController, Vector2 } from \"@vived/core\";\nimport { pixelToSceneRay } from \"../../Babylon\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { PressAppObjectUC } from \"../UC/PressAppObjectUC\";\n\nexport class TouchPressOnAppObject\n extends AppObjectController\n implements TouchEventHandler\n{\n static readonly type = \"TouchPressOnAppObject\";\n static readonly maxTapDistancePx = 5;\n\n private pressUC?: PressAppObjectUC;\n private startPosition: Vector2 = Vector2.Zero();\n private endPosition: Vector2 = Vector2.Zero();\n private doTouchEnd: boolean = false;\n private pressedID: string | null = null;\n private isPressed: boolean = false;\n\n allow = (e: TouchInputEvent): boolean => {\n return true;\n };\n\n onTouchStart = (e: TouchInputEvent) => {\n this.doTouchEnd = false;\n this.isPressed = true;\n\n if (!this.pressUC) {\n return;\n }\n\n if (e.touches.length !== 1) {\n return;\n }\n\n if (!this.allow(e)) {\n return;\n }\n\n this.startPosition = e.touches[0].position as Vector2;\n this.endPosition = this.startPosition;\n this.doTouchEnd = true;\n\n const ray = pixelToSceneRay(this.endPosition, this.appObjects);\n this.pressedID = this.pressUC?.tryPressAppObject(ray);\n };\n\n onTouchMove = (e: TouchInputEvent) => {\n if (e.touches.length === 1) {\n this.endPosition = e.touches[0].position as Vector2;\n\n const movement = Vector2.Subtract(\n this.startPosition,\n this.endPosition,\n ).magnitued;\n\n if (movement > TouchPressOnAppObject.maxTapDistancePx) {\n this.pressUC?.pressAppObject(null, true);\n }\n } else {\n this.pressUC?.pressAppObject(null, true);\n this.doTouchEnd = false;\n }\n };\n\n onTouchEnd = () => {\n if (!this.doTouchEnd) {\n return;\n }\n this.isPressed = false;\n\n this.pressUC?.pressAppObject(this.pressedID, this.isPressed);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, TouchPressOnAppObject.type);\n\n this.pressUC = appObject.getComponent<PressAppObjectUC>(\n PressAppObjectUC.type,\n );\n if (!this.pressUC) {\n console.warn(\n \"TouchPress has been added to an App Object that does not have a PressAppObjectUC. Add a PressAppObjectUC before adding the Controller.\",\n );\n return;\n }\n\n const touchInput = TouchInputEntity.get(this.appObjects);\n if (touchInput) {\n touchInput.registerController(this);\n } else {\n this.warn(\"Unable to find TouchInputEntity\");\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DoubleClickToStickMC.js","sourceRoot":"","sources":["../../../../src/Stick/Controllers/DoubleClickToStickMC.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,sCAAsC;AACtC,iDAI0B;AAC1B,oEAAiE;AAEjE,MAAa,oBACX,SAAQ,0BAAmB;IAY3B,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,6BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,IAAY,iBAAiB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAC5B,yCAAmB,CAAC,IAAI,CACzB,EAAE,YAAY,CAAC;IAClB,CAAC;IAyCD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAzDrC,mBAAc,GAAG,GAAG,CAAC;QACrB,uBAAkB,GAAG,CAAC,CAAC;QAExB,oBAAe,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QAC1C,qBAAgB,GAAW,CAAC,CAAC;QAC7B,eAAU,GAAG,CAAC,CAAC;QAYvB,YAAO,GAAG,CAAC,CAAkB,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,cAAO,CAAC,QAAQ,CAC/B,IAAI,CAAC,eAAe,EACpB,CAAC,CAAC,QAAQ,CACX,CAAC,SAAS,CAAC;gBAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAEtD,IACE,UAAU,IAAI,IAAI,CAAC,cAAc;oBACjC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EACnC,CAAC;oBACD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC;gBAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QAEM,sBAAiB,GAAG,GAAG,EAAE;YAC/B,IAAI,CAAC,eAAe,GAAG,cAAO,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;;AAjEH,oDAkEC;AA9DQ,yBAAI,GAAG,sBAAsB,AAAzB,CAA0B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { Vector2 } from \"@vived/core\";\nimport {\n MouseEventHandler,\n MouseInputEntity,\n MouseInputEvent,\n} from \"../../MouseInput\";\nimport { TryStickAppObjectUC } from \"../UCs/TryStickAppObjectUC\";\n\nexport class DoubleClickToStickMC\n extends AppObjectController\n implements MouseEventHandler\n{\n static type = \"DoubleClickToStickMC\";\n\n readonly maxClickTimeMS = 300;\n readonly maxClickDistancePx = 5;\n\n private initialClickPos: Vector2 = Vector2.Zero();\n private initialClickTime: number = 0;\n private clickCount = 0;\n\n private get mouseInput() {\n return this.getCachedSingleton<MouseInputEntity>(MouseInputEntity.type);\n }\n\n private get tryStickSceneMesh() {\n return this.getCachedSingleton<TryStickAppObjectUC>(\n TryStickAppObjectUC.type\n )?.tryWithPixel;\n }\n\n onClick = (e: MouseInputEvent) => {\n if (!this.tryStickSceneMesh) {\n this.error(\"Missing Component\");\n return;\n }\n if (e.button !== 0) {\n this.cancelDoubleClick();\n return;\n }\n\n this.clickCount = 1 + this.clickCount;\n if (this.clickCount === 1) {\n this.initialClickPos = e.position;\n this.initialClickTime = Date.now();\n } else if (this.clickCount === 2) {\n const movement = Vector2.Subtract(\n this.initialClickPos,\n e.position\n ).magnitued;\n\n const passedTime = Date.now() - this.initialClickTime;\n\n if (\n passedTime <= this.maxClickTimeMS &&\n movement <= this.maxClickDistancePx\n ) {\n this.tryStickSceneMesh(e.position);\n }\n\n this.cancelDoubleClick();\n }\n };\n\n private cancelDoubleClick = () => {\n this.initialClickPos = Vector2.Zero();\n this.initialClickTime = 0;\n this.clickCount = 0;\n };\n\n constructor(appObject: AppObject) {\n super(appObject, DoubleClickToStickMC.type);\n this.mouseInput?.registerController(this);\n }\n}\n"]}
1
+ {"version":3,"file":"DoubleClickToStickMC.js","sourceRoot":"","sources":["../../../../src/Stick/Controllers/DoubleClickToStickMC.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,sCAAsC;AACtC,iDAI0B;AAC1B,oEAAiE;AAEjE,MAAa,oBACX,SAAQ,0BAAmB;IAY3B,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,6BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,IAAY,iBAAiB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAC5B,yCAAmB,CAAC,IAAI,CACzB,EAAE,YAAY,CAAC;IAClB,CAAC;IAyCD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAzDrC,mBAAc,GAAG,GAAG,CAAC;QACrB,uBAAkB,GAAG,CAAC,CAAC;QAExB,oBAAe,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QAC1C,qBAAgB,GAAW,CAAC,CAAC;QAC7B,eAAU,GAAG,CAAC,CAAC;QAYvB,YAAO,GAAG,CAAC,CAAkB,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,cAAO,CAAC,QAAQ,CAC/B,IAAI,CAAC,eAAe,EACpB,CAAC,CAAC,QAAQ,CACX,CAAC,SAAS,CAAC;gBAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAEtD,IACE,UAAU,IAAI,IAAI,CAAC,cAAc;oBACjC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EACnC,CAAC;oBACD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC;gBAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QAEM,sBAAiB,GAAG,GAAG,EAAE;YAC/B,IAAI,CAAC,eAAe,GAAG,cAAO,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;;AAjEH,oDAkEC;AA9DQ,yBAAI,GAAG,sBAAsB,AAAzB,CAA0B","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { Vector2 } from \"@vived/core\";\nimport {\n MouseEventHandler,\n MouseInputEntity,\n MouseInputEvent,\n} from \"../../MouseInput\";\nimport { TryStickAppObjectUC } from \"../UCs/TryStickAppObjectUC\";\n\nexport class DoubleClickToStickMC\n extends AppObjectController\n implements MouseEventHandler\n{\n static type = \"DoubleClickToStickMC\";\n\n readonly maxClickTimeMS = 300;\n readonly maxClickDistancePx = 5;\n\n private initialClickPos: Vector2 = Vector2.Zero();\n private initialClickTime: number = 0;\n private clickCount = 0;\n\n private get mouseInput() {\n return this.getCachedSingleton<MouseInputEntity>(MouseInputEntity.type);\n }\n\n private get tryStickSceneMesh() {\n return this.getCachedSingleton<TryStickAppObjectUC>(\n TryStickAppObjectUC.type,\n )?.tryWithPixel;\n }\n\n onClick = (e: MouseInputEvent) => {\n if (!this.tryStickSceneMesh) {\n this.error(\"Missing Component\");\n return;\n }\n if (e.button !== 0) {\n this.cancelDoubleClick();\n return;\n }\n\n this.clickCount = 1 + this.clickCount;\n if (this.clickCount === 1) {\n this.initialClickPos = e.position;\n this.initialClickTime = Date.now();\n } else if (this.clickCount === 2) {\n const movement = Vector2.Subtract(\n this.initialClickPos,\n e.position,\n ).magnitued;\n\n const passedTime = Date.now() - this.initialClickTime;\n\n if (\n passedTime <= this.maxClickTimeMS &&\n movement <= this.maxClickDistancePx\n ) {\n this.tryStickSceneMesh(e.position);\n }\n\n this.cancelDoubleClick();\n }\n };\n\n private cancelDoubleClick = () => {\n this.initialClickPos = Vector2.Zero();\n this.initialClickTime = 0;\n this.clickCount = 0;\n };\n\n constructor(appObject: AppObject) {\n super(appObject, DoubleClickToStickMC.type);\n this.mouseInput?.registerController(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DoubleTapToStickTC.js","sourceRoot":"","sources":["../../../../src/Stick/Controllers/DoubleTapToStickTC.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,sCAAsC;AACtC,2DAI+B;AAC/B,oEAAiE;AAEjE,MAAa,kBACX,SAAQ,0BAAmB;IAY3B,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,kCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,IAAY,iBAAiB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAC5B,yCAAmB,CAAC,IAAI,CACzB,EAAE,YAAY,CAAC;IAClB,CAAC;IAkCD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAlDnC,cAAS,GAAG,GAAG,CAAC;QAChB,qBAAgB,GAAG,EAAE,CAAC;QAEvB,oBAAe,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QAC1C,qBAAgB,GAAW,CAAC,CAAC;QAC7B,aAAQ,GAAG,CAAC,CAAC;QAYrB,UAAK,GAAG,CAAC,CAAkB,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC;gBACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,cAAO,CAAC,QAAQ,CAC/B,IAAI,CAAC,eAAe,EACpB,CAAC,CAAC,WAAW,CACd,CAAC,SAAS,CAAC;gBAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAEtD,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBACxC,CAAC;gBAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEM,oBAAe,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,cAAO,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;;AA1DH,gDA2DC;AAvDQ,uBAAI,GAAG,oBAAoB,AAAvB,CAAwB","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { Vector2 } from \"@vived/core\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { TryStickAppObjectUC } from \"../UCs/TryStickAppObjectUC\";\n\nexport class DoubleTapToStickTC\n extends AppObjectController\n implements TouchEventHandler\n{\n static type = \"DoubleTapToStickTC\";\n\n readonly tapTimeMS = 300;\n readonly maxTapDistancePx = 30;\n\n private initialTouchPos: Vector2 = Vector2.Zero();\n private initialTouchTime: number = 0;\n private tapCount = 0;\n\n private get touchInput() {\n return this.getCachedSingleton<TouchInputEntity>(TouchInputEntity.type);\n }\n\n private get tryStickSceneMesh() {\n return this.getCachedSingleton<TryStickAppObjectUC>(\n TryStickAppObjectUC.type\n )?.tryWithPixel;\n }\n\n onTap = (e: TouchInputEvent) => {\n if (!this.tryStickSceneMesh) {\n this.error(\"Missing Component\");\n return;\n }\n\n this.tapCount = 1 + this.tapCount;\n if (this.tapCount === 1) {\n this.initialTouchPos = e.touchCenter;\n this.initialTouchTime = Date.now();\n } else if (this.tapCount === 2) {\n const movement = Vector2.Subtract(\n this.initialTouchPos,\n e.touchCenter\n ).magnitued;\n\n const passedTime = Date.now() - this.initialTouchTime;\n\n if (passedTime <= this.tapTimeMS && movement <= this.maxTapDistancePx) {\n this.tryStickSceneMesh(e.touchCenter);\n }\n\n this.cancelDoubleTap();\n }\n };\n\n private cancelDoubleTap = () => {\n this.initialTouchPos = Vector2.Zero();\n this.initialTouchTime = 0;\n this.tapCount = 0;\n };\n\n constructor(appObject: AppObject) {\n super(appObject, DoubleTapToStickTC.type);\n this.touchInput?.registerController(this);\n }\n}\n"]}
1
+ {"version":3,"file":"DoubleTapToStickTC.js","sourceRoot":"","sources":["../../../../src/Stick/Controllers/DoubleTapToStickTC.ts"],"names":[],"mappings":";;;AAAA,sCAA6D;AAC7D,sCAAsC;AACtC,2DAI+B;AAC/B,oEAAiE;AAEjE,MAAa,kBACX,SAAQ,0BAAmB;IAY3B,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,kCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,IAAY,iBAAiB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAC5B,yCAAmB,CAAC,IAAI,CACzB,EAAE,YAAY,CAAC;IAClB,CAAC;IAkCD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAlDnC,cAAS,GAAG,GAAG,CAAC;QAChB,qBAAgB,GAAG,EAAE,CAAC;QAEvB,oBAAe,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QAC1C,qBAAgB,GAAW,CAAC,CAAC;QAC7B,aAAQ,GAAG,CAAC,CAAC;QAYrB,UAAK,GAAG,CAAC,CAAkB,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC;gBACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,cAAO,CAAC,QAAQ,CAC/B,IAAI,CAAC,eAAe,EACpB,CAAC,CAAC,WAAW,CACd,CAAC,SAAS,CAAC;gBAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAEtD,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBACxC,CAAC;gBAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEM,oBAAe,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,cAAO,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;;AA1DH,gDA2DC;AAvDQ,uBAAI,GAAG,oBAAoB,AAAvB,CAAwB","sourcesContent":["import { AppObject, AppObjectController } from \"@vived/core\";\nimport { Vector2 } from \"@vived/core\";\nimport {\n TouchEventHandler,\n TouchInputEntity,\n TouchInputEvent,\n} from \"../../TouchController\";\nimport { TryStickAppObjectUC } from \"../UCs/TryStickAppObjectUC\";\n\nexport class DoubleTapToStickTC\n extends AppObjectController\n implements TouchEventHandler\n{\n static type = \"DoubleTapToStickTC\";\n\n readonly tapTimeMS = 300;\n readonly maxTapDistancePx = 30;\n\n private initialTouchPos: Vector2 = Vector2.Zero();\n private initialTouchTime: number = 0;\n private tapCount = 0;\n\n private get touchInput() {\n return this.getCachedSingleton<TouchInputEntity>(TouchInputEntity.type);\n }\n\n private get tryStickSceneMesh() {\n return this.getCachedSingleton<TryStickAppObjectUC>(\n TryStickAppObjectUC.type,\n )?.tryWithPixel;\n }\n\n onTap = (e: TouchInputEvent) => {\n if (!this.tryStickSceneMesh) {\n this.error(\"Missing Component\");\n return;\n }\n\n this.tapCount = 1 + this.tapCount;\n if (this.tapCount === 1) {\n this.initialTouchPos = e.touchCenter;\n this.initialTouchTime = Date.now();\n } else if (this.tapCount === 2) {\n const movement = Vector2.Subtract(\n this.initialTouchPos,\n e.touchCenter,\n ).magnitued;\n\n const passedTime = Date.now() - this.initialTouchTime;\n\n if (passedTime <= this.tapTimeMS && movement <= this.maxTapDistancePx) {\n this.tryStickSceneMesh(e.touchCenter);\n }\n\n this.cancelDoubleTap();\n }\n };\n\n private cancelDoubleTap = () => {\n this.initialTouchPos = Vector2.Zero();\n this.initialTouchTime = 0;\n this.tapCount = 0;\n };\n\n constructor(appObject: AppObject) {\n super(appObject, DoubleTapToStickTC.type);\n this.touchInput?.registerController(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"StylusEntity.js","sourceRoot":"","sources":["../../../../src/Stylus/Entity/StylusEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppObject,\n AppObjectEntity,\n AppObjectRepo,\n getSingletonComponent,\n Matrix,\n MemoizedBoolean,\n ParametricLine,\n Vector3,\n} from \"@vived/core\";\nimport { Transform3D } from \"../../Transform3D\";\n\nexport interface StylusEventHandler {\n onButtonDown?: (button: number) => void;\n onButtonUp?: (button: number) => void;\n onButtonClick?: (button: number) => void;\n onStylusMove?: (transform: Transform3D) => void;\n}\n\n/**\n * @deprecated Use StylusEventHandler instead\n */\nexport type StylusController = StylusEventHandler;\n\nexport abstract class StylusEntity extends AppObjectEntity {\n static readonly type = \"StylusEntity\";\n\n static clickMovementThreshold: number = 0.32;\n static clickTimeThresholdMS: number = 350;\n\n abstract registerController: (controller: StylusEventHandler) => void;\n abstract updateButtonState: (button: number, isPressed: boolean) => void;\n abstract getButtonState(button: number): boolean;\n\n abstract readonly transform: Transform3D;\n\n abstract get isInUse(): boolean;\n abstract get pickRay(): ParametricLine;\n\n static get(appObjects: AppObjectRepo): StylusEntity | undefined {\n return getSingletonComponent(StylusEntity.type, appObjects);\n }\n}\n\nexport function makeStylusEntity(appObj: AppObject): StylusEntity {\n return new StylusImp(appObj);\n}\n\nclass StylusImp extends StylusEntity {\n private controllers: StylusEventHandler[] = [];\n private buttonStates = [false, false, false];\n\n private lassPressedButton?: number;\n private pressPosition = Vector3.Zero();\n private pressTime = 0;\n\n registerController = (controller: StylusEventHandler): void => {\n this.controllers.push(controller);\n };\n\n updateButtonState = (button: number, isPressed: boolean): void => {\n if (this.buttonStates[button] === isPressed) return;\n\n this.controllers.forEach((controller) => {\n if (isPressed) {\n if (controller.onButtonDown) {\n controller.onButtonDown(button);\n }\n this.lassPressedButton = button;\n this.pressPosition = this.transform.localPosition;\n this.pressTime = Date.now();\n } else {\n if (controller.onButtonUp) {\n controller.onButtonUp(button);\n }\n\n if (this.isClick(button) && controller.onButtonClick) {\n controller.onButtonClick(button);\n }\n }\n });\n\n this.buttonStates[button] = isPressed;\n this.notifyOnChange();\n };\n\n getButtonState = (button: number): boolean => {\n if (button < 0 || button >= this.buttonStates.length) {\n return false;\n } else {\n return this.buttonStates[button];\n }\n };\n\n private isClick = (button: number): boolean => {\n const buttonIsCorrect = button === this.lassPressedButton;\n\n const movement = Vector3.Subtract(\n this.transform.localPosition,\n this.pressPosition\n ).magnitude;\n const movementIsSmallEnough =\n movement < StylusEntity.clickMovementThreshold;\n\n const passedTime = Date.now() - this.pressTime;\n const pressTimeIsShortEnough =\n passedTime < StylusEntity.clickTimeThresholdMS;\n\n if (buttonIsCorrect && movementIsSmallEnough && pressTimeIsShortEnough) {\n return true;\n } else {\n return false;\n }\n };\n\n readonly transform: Transform3D;\n\n private onTransformUpdate = () => {\n this.checkIfStylusIsInUse(this.transform.worldMatrix);\n\n this.controllers.forEach((controller) => {\n if (controller.onStylusMove) {\n controller.onStylusMove(this.transform);\n }\n });\n this.notifyOnChange();\n };\n\n get pickRay(): ParametricLine {\n return ParametricLine.FromPointDirection(\n this.transform.worldPosition,\n this.transform.localDirectionToWorld(Vector3.Forward())\n );\n }\n\n private memoizedIsInUse = new MemoizedBoolean(false, this.notifyOnChange);\n get isInUse(): boolean {\n return this.memoizedIsInUse.val;\n }\n\n private checkIfStylusIsInUse(worldMatrix: Matrix) {\n const m = worldMatrix.m;\n if (\n m[1] === 0 &&\n m[2] === 0 &&\n m[3] === 0 &&\n m[4] === 0 &&\n m[7] === 0 &&\n m[8] === 0 &&\n m[11] === 0 &&\n m[12] === 0 &&\n m[15] === 1\n ) {\n this.memoizedIsInUse.val = false;\n } else {\n this.memoizedIsInUse.val = true;\n }\n }\n\n constructor(appObject: AppObject) {\n super(appObject, StylusEntity.type);\n this.transform = Transform3D.addIfMissing(appObject);\n this.transform.addChangeObserver(this.onTransformUpdate);\n }\n}\n"]}
1
+ {"version":3,"file":"StylusEntity.js","sourceRoot":"","sources":["../../../../src/Stylus/Entity/StylusEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppObject,\n AppObjectEntity,\n AppObjectRepo,\n getSingletonComponent,\n Matrix,\n MemoizedBoolean,\n ParametricLine,\n Vector3,\n} from \"@vived/core\";\nimport { Transform3D } from \"../../Transform3D\";\n\nexport interface StylusEventHandler {\n onButtonDown?: (button: number) => void;\n onButtonUp?: (button: number) => void;\n onButtonClick?: (button: number) => void;\n onStylusMove?: (transform: Transform3D) => void;\n}\n\n/**\n * @deprecated Use StylusEventHandler instead\n */\nexport type StylusController = StylusEventHandler;\n\nexport abstract class StylusEntity extends AppObjectEntity {\n static readonly type = \"StylusEntity\";\n\n static clickMovementThreshold: number = 0.32;\n static clickTimeThresholdMS: number = 350;\n\n abstract registerController: (controller: StylusEventHandler) => void;\n abstract updateButtonState: (button: number, isPressed: boolean) => void;\n abstract getButtonState(button: number): boolean;\n\n abstract readonly transform: Transform3D;\n\n abstract get isInUse(): boolean;\n abstract get pickRay(): ParametricLine;\n\n static get(appObjects: AppObjectRepo): StylusEntity | undefined {\n return getSingletonComponent(StylusEntity.type, appObjects);\n }\n}\n\nexport function makeStylusEntity(appObj: AppObject): StylusEntity {\n return new StylusImp(appObj);\n}\n\nclass StylusImp extends StylusEntity {\n private controllers: StylusEventHandler[] = [];\n private buttonStates = [false, false, false];\n\n private lassPressedButton?: number;\n private pressPosition = Vector3.Zero();\n private pressTime = 0;\n\n registerController = (controller: StylusEventHandler): void => {\n this.controllers.push(controller);\n };\n\n updateButtonState = (button: number, isPressed: boolean): void => {\n if (this.buttonStates[button] === isPressed) return;\n\n this.controllers.forEach((controller) => {\n if (isPressed) {\n if (controller.onButtonDown) {\n controller.onButtonDown(button);\n }\n this.lassPressedButton = button;\n this.pressPosition = this.transform.localPosition;\n this.pressTime = Date.now();\n } else {\n if (controller.onButtonUp) {\n controller.onButtonUp(button);\n }\n\n if (this.isClick(button) && controller.onButtonClick) {\n controller.onButtonClick(button);\n }\n }\n });\n\n this.buttonStates[button] = isPressed;\n this.notifyOnChange();\n };\n\n getButtonState = (button: number): boolean => {\n if (button < 0 || button >= this.buttonStates.length) {\n return false;\n } else {\n return this.buttonStates[button];\n }\n };\n\n private isClick = (button: number): boolean => {\n const buttonIsCorrect = button === this.lassPressedButton;\n\n const movement = Vector3.Subtract(\n this.transform.localPosition,\n this.pressPosition,\n ).magnitude;\n const movementIsSmallEnough =\n movement < StylusEntity.clickMovementThreshold;\n\n const passedTime = Date.now() - this.pressTime;\n const pressTimeIsShortEnough =\n passedTime < StylusEntity.clickTimeThresholdMS;\n\n if (buttonIsCorrect && movementIsSmallEnough && pressTimeIsShortEnough) {\n return true;\n } else {\n return false;\n }\n };\n\n readonly transform: Transform3D;\n\n private onTransformUpdate = () => {\n this.checkIfStylusIsInUse(this.transform.worldMatrix);\n\n this.controllers.forEach((controller) => {\n if (controller.onStylusMove) {\n controller.onStylusMove(this.transform);\n }\n });\n this.notifyOnChange();\n };\n\n get pickRay(): ParametricLine {\n return ParametricLine.FromPointDirection(\n this.transform.worldPosition,\n this.transform.localDirectionToWorld(Vector3.Forward()),\n );\n }\n\n private memoizedIsInUse = new MemoizedBoolean(false, this.notifyOnChange);\n get isInUse(): boolean {\n return this.memoizedIsInUse.val;\n }\n\n private checkIfStylusIsInUse(worldMatrix: Matrix) {\n const m = worldMatrix.m;\n if (\n m[1] === 0 &&\n m[2] === 0 &&\n m[3] === 0 &&\n m[4] === 0 &&\n m[7] === 0 &&\n m[8] === 0 &&\n m[11] === 0 &&\n m[12] === 0 &&\n m[15] === 1\n ) {\n this.memoizedIsInUse.val = false;\n } else {\n this.memoizedIsInUse.val = true;\n }\n }\n\n constructor(appObject: AppObject) {\n super(appObject, StylusEntity.type);\n this.transform = Transform3D.addIfMissing(appObject);\n this.transform.addChangeObserver(this.onTransformUpdate);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"StylusEntity.test.js","sourceRoot":"","sources":["../../../../src/Stylus/Entity/StylusEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { Angle, ParametricLine, Quaternion, Vector3 } from \"@vived/core\";\nimport {\n makeStylusEntity,\n StylusEventHandler,\n StylusEntity,\n} from \"./StylusEntity\";\n\nclass MockController implements StylusEventHandler {\n onButtonDown = jest.fn();\n onButtonUp = jest.fn();\n onStylusMove = jest.fn();\n onButtonClick = jest.fn();\n}\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const stylusAO = appObjects.getOrCreate(\"stylus\");\n\n const stylus = makeStylusEntity(stylusAO);\n const observer = jest.fn();\n stylus.addChangeObserver(observer);\n const controller = new MockController();\n stylus.registerController(controller);\n\n return { stylus, controller, observer };\n}\n\ndescribe(\"Stylus Entity\", () => {\n it(\"Forwards a press to the controller\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.updateButtonState(1, true);\n\n expect(controller.onButtonDown).toHaveBeenCalledWith(1);\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonUp).toHaveBeenCalledWith(1);\n });\n\n it(\"Only forwards if there is a change\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.updateButtonState(1, false);\n stylus.updateButtonState(1, false);\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonUp).not.toHaveBeenCalled();\n\n stylus.updateButtonState(1, true);\n\n controller.onButtonDown.mockClear();\n\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(1, true);\n\n expect(controller.onButtonUp).not.toHaveBeenCalled();\n });\n\n it(\"Forms the parametric line as expected\", () => {\n const { stylus } = makeTestRig();\n\n stylus.transform.localPosition = Vector3.Zero();\n stylus.transform.localRotation = Quaternion.Identity();\n\n let rayPoint = ParametricLine.GetPointAtDistance(stylus.pickRay, 1);\n let expectedPoint = new Vector3(0, 0, 1);\n expect(Vector3.Close(rayPoint, expectedPoint)).toBeTruthy();\n\n stylus.transform.localRotation = Quaternion.FromAngleAxis(\n Vector3.Up(),\n Angle.FromDegrees(90)\n );\n\n rayPoint = ParametricLine.GetPointAtDistance(stylus.pickRay, 1);\n expectedPoint = new Vector3(1, 0, 0);\n expect(Vector3.Close(rayPoint, expectedPoint)).toBeTruthy();\n\n stylus.transform.localPosition = new Vector3(1, 2, 3);\n\n rayPoint = ParametricLine.GetPointAtDistance(stylus.pickRay, 1);\n expectedPoint = new Vector3(2, 2, 3);\n expect(Vector3.Close(rayPoint, expectedPoint)).toBeTruthy();\n });\n\n it(\"Triggers the controller move when the transform position changes\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.transform.localPosition = new Vector3(1, 2, 3);\n\n expect(controller.onStylusMove).toHaveBeenCalled();\n });\n\n it(\"Triggers the controller move when the transform rotation changes\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.transform.localRotation = new Quaternion(1, 2, 3, 4);\n\n expect(controller.onStylusMove).toHaveBeenCalled();\n });\n\n it(\"Triggers a button click\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).toHaveBeenCalledWith(1);\n });\n\n it(\"Does not click if a different button is pressed\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(0, true);\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).not.toHaveBeenCalled();\n\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(2, false);\n\n expect(controller.onButtonClick).not.toHaveBeenCalled();\n });\n\n it(\"Does click if there is a little movement\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.transform.localPosition = Vector3.Zero();\n stylus.updateButtonState(1, true);\n\n stylus.transform.localPosition = new Vector3(\n StylusEntity.clickMovementThreshold * 0.99,\n 0,\n 0\n );\n\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).toHaveBeenCalled();\n });\n\n it(\"Does not click if the movement is too great\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.transform.localPosition = Vector3.Zero();\n stylus.updateButtonState(1, true);\n\n stylus.transform.localPosition = new Vector3(\n StylusEntity.clickMovementThreshold,\n 0,\n 0\n );\n\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).not.toHaveBeenCalled();\n });\n\n it(\"Does click if a little time passed\", () => {\n const { stylus, controller } = makeTestRig();\n\n const mockDateNow = jest.fn();\n Date.now = mockDateNow;\n mockDateNow.mockReturnValue(0);\n\n stylus.updateButtonState(1, true);\n\n mockDateNow.mockReturnValue(StylusEntity.clickTimeThresholdMS - 1);\n\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).toHaveBeenCalled();\n });\n\n it(\"Does not click if too much time passed\", () => {\n const { stylus, controller } = makeTestRig();\n\n const mockDateNow = jest.fn();\n Date.now = mockDateNow;\n mockDateNow.mockReturnValue(0);\n\n stylus.updateButtonState(1, true);\n\n mockDateNow.mockReturnValue(StylusEntity.clickTimeThresholdMS + 1);\n\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).not.toHaveBeenCalled();\n });\n\n it(\"Sets is in use to false\", () => {\n const { stylus } = makeTestRig();\n stylus.transform.worldPosition = Vector3.Zero();\n stylus.transform.worldRotation = Quaternion.Identity();\n stylus.transform.notifyOnChange();\n expect(stylus.isInUse).toEqual(false);\n });\n\n it(\"Sets is in use to true\", () => {\n const { stylus } = makeTestRig();\n stylus.transform.worldPosition = Vector3.One();\n stylus.transform.worldRotation = new Quaternion(1, 1, 1, 1);\n stylus.transform.notifyOnChange();\n expect(stylus.isInUse).toEqual(true);\n });\n\n it(\"Returns correct button states\", () => {\n const { stylus } = makeTestRig();\n\n expect(stylus.getButtonState(0)).toBeFalsy();\n expect(stylus.getButtonState(1)).toBeFalsy();\n expect(stylus.getButtonState(2)).toBeFalsy();\n\n expect(stylus.getButtonState(-1)).toBeFalsy();\n expect(stylus.getButtonState(3)).toBeFalsy();\n\n stylus.updateButtonState(0, true);\n expect(stylus.getButtonState(0)).toBeTruthy();\n expect(stylus.getButtonState(1)).toBeFalsy();\n expect(stylus.getButtonState(2)).toBeFalsy();\n\n stylus.updateButtonState(0, false);\n expect(stylus.getButtonState(0)).toBeFalsy();\n\n stylus.updateButtonState(1, true);\n expect(stylus.getButtonState(1)).toBeTruthy();\n\n stylus.updateButtonState(2, true);\n expect(stylus.getButtonState(2)).toBeTruthy();\n });\n});\n"]}
1
+ {"version":3,"file":"StylusEntity.test.js","sourceRoot":"","sources":["../../../../src/Stylus/Entity/StylusEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { Angle, ParametricLine, Quaternion, Vector3 } from \"@vived/core\";\nimport {\n makeStylusEntity,\n StylusEventHandler,\n StylusEntity,\n} from \"./StylusEntity\";\n\nclass MockController implements StylusEventHandler {\n onButtonDown = jest.fn();\n onButtonUp = jest.fn();\n onStylusMove = jest.fn();\n onButtonClick = jest.fn();\n}\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const stylusAO = appObjects.getOrCreate(\"stylus\");\n\n const stylus = makeStylusEntity(stylusAO);\n const observer = jest.fn();\n stylus.addChangeObserver(observer);\n const controller = new MockController();\n stylus.registerController(controller);\n\n return { stylus, controller, observer };\n}\n\ndescribe(\"Stylus Entity\", () => {\n it(\"Forwards a press to the controller\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.updateButtonState(1, true);\n\n expect(controller.onButtonDown).toHaveBeenCalledWith(1);\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonUp).toHaveBeenCalledWith(1);\n });\n\n it(\"Only forwards if there is a change\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.updateButtonState(1, false);\n stylus.updateButtonState(1, false);\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonUp).not.toHaveBeenCalled();\n\n stylus.updateButtonState(1, true);\n\n controller.onButtonDown.mockClear();\n\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(1, true);\n\n expect(controller.onButtonUp).not.toHaveBeenCalled();\n });\n\n it(\"Forms the parametric line as expected\", () => {\n const { stylus } = makeTestRig();\n\n stylus.transform.localPosition = Vector3.Zero();\n stylus.transform.localRotation = Quaternion.Identity();\n\n let rayPoint = ParametricLine.GetPointAtDistance(stylus.pickRay, 1);\n let expectedPoint = new Vector3(0, 0, 1);\n expect(Vector3.Close(rayPoint, expectedPoint)).toBeTruthy();\n\n stylus.transform.localRotation = Quaternion.FromAngleAxis(\n Vector3.Up(),\n Angle.FromDegrees(90),\n );\n\n rayPoint = ParametricLine.GetPointAtDistance(stylus.pickRay, 1);\n expectedPoint = new Vector3(1, 0, 0);\n expect(Vector3.Close(rayPoint, expectedPoint)).toBeTruthy();\n\n stylus.transform.localPosition = new Vector3(1, 2, 3);\n\n rayPoint = ParametricLine.GetPointAtDistance(stylus.pickRay, 1);\n expectedPoint = new Vector3(2, 2, 3);\n expect(Vector3.Close(rayPoint, expectedPoint)).toBeTruthy();\n });\n\n it(\"Triggers the controller move when the transform position changes\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.transform.localPosition = new Vector3(1, 2, 3);\n\n expect(controller.onStylusMove).toHaveBeenCalled();\n });\n\n it(\"Triggers the controller move when the transform rotation changes\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.transform.localRotation = new Quaternion(1, 2, 3, 4);\n\n expect(controller.onStylusMove).toHaveBeenCalled();\n });\n\n it(\"Triggers a button click\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).toHaveBeenCalledWith(1);\n });\n\n it(\"Does not click if a different button is pressed\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(0, true);\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).not.toHaveBeenCalled();\n\n stylus.updateButtonState(1, true);\n stylus.updateButtonState(2, false);\n\n expect(controller.onButtonClick).not.toHaveBeenCalled();\n });\n\n it(\"Does click if there is a little movement\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.transform.localPosition = Vector3.Zero();\n stylus.updateButtonState(1, true);\n\n stylus.transform.localPosition = new Vector3(\n StylusEntity.clickMovementThreshold * 0.99,\n 0,\n 0,\n );\n\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).toHaveBeenCalled();\n });\n\n it(\"Does not click if the movement is too great\", () => {\n const { stylus, controller } = makeTestRig();\n\n stylus.transform.localPosition = Vector3.Zero();\n stylus.updateButtonState(1, true);\n\n stylus.transform.localPosition = new Vector3(\n StylusEntity.clickMovementThreshold,\n 0,\n 0,\n );\n\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).not.toHaveBeenCalled();\n });\n\n it(\"Does click if a little time passed\", () => {\n const { stylus, controller } = makeTestRig();\n\n const mockDateNow = jest.fn();\n Date.now = mockDateNow;\n mockDateNow.mockReturnValue(0);\n\n stylus.updateButtonState(1, true);\n\n mockDateNow.mockReturnValue(StylusEntity.clickTimeThresholdMS - 1);\n\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).toHaveBeenCalled();\n });\n\n it(\"Does not click if too much time passed\", () => {\n const { stylus, controller } = makeTestRig();\n\n const mockDateNow = jest.fn();\n Date.now = mockDateNow;\n mockDateNow.mockReturnValue(0);\n\n stylus.updateButtonState(1, true);\n\n mockDateNow.mockReturnValue(StylusEntity.clickTimeThresholdMS + 1);\n\n stylus.updateButtonState(1, false);\n\n expect(controller.onButtonClick).not.toHaveBeenCalled();\n });\n\n it(\"Sets is in use to false\", () => {\n const { stylus } = makeTestRig();\n stylus.transform.worldPosition = Vector3.Zero();\n stylus.transform.worldRotation = Quaternion.Identity();\n stylus.transform.notifyOnChange();\n expect(stylus.isInUse).toEqual(false);\n });\n\n it(\"Sets is in use to true\", () => {\n const { stylus } = makeTestRig();\n stylus.transform.worldPosition = Vector3.One();\n stylus.transform.worldRotation = new Quaternion(1, 1, 1, 1);\n stylus.transform.notifyOnChange();\n expect(stylus.isInUse).toEqual(true);\n });\n\n it(\"Returns correct button states\", () => {\n const { stylus } = makeTestRig();\n\n expect(stylus.getButtonState(0)).toBeFalsy();\n expect(stylus.getButtonState(1)).toBeFalsy();\n expect(stylus.getButtonState(2)).toBeFalsy();\n\n expect(stylus.getButtonState(-1)).toBeFalsy();\n expect(stylus.getButtonState(3)).toBeFalsy();\n\n stylus.updateButtonState(0, true);\n expect(stylus.getButtonState(0)).toBeTruthy();\n expect(stylus.getButtonState(1)).toBeFalsy();\n expect(stylus.getButtonState(2)).toBeFalsy();\n\n stylus.updateButtonState(0, false);\n expect(stylus.getButtonState(0)).toBeFalsy();\n\n stylus.updateButtonState(1, true);\n expect(stylus.getButtonState(1)).toBeTruthy();\n\n stylus.updateButtonState(2, true);\n expect(stylus.getButtonState(2)).toBeTruthy();\n });\n});\n"]}