@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.
- package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js +3 -0
- package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
- package/dist/cjs/HoverLabel/Controllers/HoverLabelMouse.js.map +1 -1
- package/dist/cjs/HoverLabel/Controllers/HoverLabelTouch.js.map +1 -1
- package/dist/cjs/LabelDrop/Controller/MouseLabelDropAuthor.js.map +1 -1
- package/dist/cjs/LabelDrop/Controller/TouchLabelDropAuthor.js.map +1 -1
- package/dist/cjs/Landmarks/Controller/MouseLandmark.js.map +1 -1
- package/dist/cjs/Landmarks/Controller/TouchLandmark.js.map +1 -1
- package/dist/cjs/MouseInput/Entities/MouseInput.js.map +1 -1
- package/dist/cjs/MouseInput/Mocks/MockMouseInput.js +4 -5
- package/dist/cjs/MouseInput/Mocks/MockMouseInput.js.map +1 -1
- package/dist/cjs/MouseInput/Mocks/index.js +18 -0
- package/dist/cjs/MouseInput/Mocks/index.js.map +1 -0
- package/dist/cjs/MouseInput/index.js +1 -0
- package/dist/cjs/MouseInput/index.js.map +1 -1
- package/dist/cjs/ObjectPick/Controllers/MouseObjectPickMC.js.map +1 -1
- package/dist/cjs/ObjectPick/Controllers/StylusObjectPickSC.js.map +1 -1
- package/dist/cjs/ObjectPick/Controllers/TouchObjectPickTC.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/DoubleTapToFocus.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/MouseClickToFocus.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/MouseOrbit.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/MouseRoll.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/MouseScale.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/ScaleSceneRootSC.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/SceneRootMoveSC.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/TouchOrbit.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/TouchPan.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/TouchPinch.js.map +1 -1
- package/dist/cjs/SceneRoot/Controllers/TouchScale.js.map +1 -1
- package/dist/cjs/Selection/Controller/MouseHoverOnAppObject.js.map +1 -1
- package/dist/cjs/Selection/Controller/MouseHoverOnAppObject.test.js +1 -0
- package/dist/cjs/Selection/Controller/MouseHoverOnAppObject.test.js.map +1 -1
- package/dist/cjs/Selection/Controller/MousePressOnAppObject.js.map +1 -1
- package/dist/cjs/Selection/Controller/MousePressOnAppObject.test.js +1 -0
- package/dist/cjs/Selection/Controller/MousePressOnAppObject.test.js.map +1 -1
- package/dist/cjs/Selection/Controller/MouseSelectAppObject.js.map +1 -1
- package/dist/cjs/Selection/Controller/MouseSelectAppObject.test.js +1 -0
- package/dist/cjs/Selection/Controller/MouseSelectAppObject.test.js.map +1 -1
- package/dist/cjs/Selection/Controller/StylusHoverOnAppObjectSC.js.map +1 -1
- package/dist/cjs/Selection/Controller/StylusPressOnAppObjectSC.js.map +1 -1
- package/dist/cjs/Selection/Controller/StylusSelectAppObjectSC.js.map +1 -1
- package/dist/cjs/Selection/Controller/TapToSelectAppObject.js.map +1 -1
- package/dist/cjs/Selection/Controller/TouchPressOnAppObject.js.map +1 -1
- package/dist/cjs/Stick/Controllers/DoubleClickToStickMC.js.map +1 -1
- package/dist/cjs/Stick/Controllers/DoubleTapToStickTC.js.map +1 -1
- package/dist/cjs/Stylus/Entity/StylusEntity.js.map +1 -1
- package/dist/cjs/Stylus/Entity/StylusEntity.test.js.map +1 -1
- package/dist/cjs/TouchController/Entities/TouchInput.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Mouse/DragScaleTransformMC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Mouse/MousePanTransformMC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Mouse/PanTransformMC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Mouse/RollScaleTransformMC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Stylus/MoveTransformSC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Stylus/PanScaleTransformSC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Touch/DragScaleTransformTC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Touch/PanTransformTC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Touch/PinchTransformTC.js.map +1 -1
- package/dist/cjs/Transform3D/Controllers/Touch/TouchPanTransformTC.js.map +1 -1
- package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js +3 -0
- package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
- package/dist/esm/HoverLabel/Controllers/HoverLabelMouse.js.map +1 -1
- package/dist/esm/HoverLabel/Controllers/HoverLabelTouch.js.map +1 -1
- package/dist/esm/LabelDrop/Controller/MouseLabelDropAuthor.js.map +1 -1
- package/dist/esm/LabelDrop/Controller/TouchLabelDropAuthor.js.map +1 -1
- package/dist/esm/Landmarks/Controller/MouseLandmark.js.map +1 -1
- package/dist/esm/Landmarks/Controller/TouchLandmark.js.map +1 -1
- package/dist/esm/MouseInput/Entities/MouseInput.js.map +1 -1
- package/dist/esm/MouseInput/Mocks/MockMouseInput.js +4 -5
- package/dist/esm/MouseInput/Mocks/MockMouseInput.js.map +1 -1
- package/dist/esm/MouseInput/Mocks/index.js +2 -0
- package/dist/esm/MouseInput/Mocks/index.js.map +1 -0
- package/dist/esm/MouseInput/index.js +1 -0
- package/dist/esm/MouseInput/index.js.map +1 -1
- package/dist/esm/ObjectPick/Controllers/MouseObjectPickMC.js.map +1 -1
- package/dist/esm/ObjectPick/Controllers/StylusObjectPickSC.js.map +1 -1
- package/dist/esm/ObjectPick/Controllers/TouchObjectPickTC.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/DoubleTapToFocus.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/MouseClickToFocus.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/MouseOrbit.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/MouseRoll.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/MouseScale.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/ScaleSceneRootSC.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/SceneRootMoveSC.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/TouchOrbit.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/TouchPan.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/TouchPinch.js.map +1 -1
- package/dist/esm/SceneRoot/Controllers/TouchScale.js.map +1 -1
- package/dist/esm/Selection/Controller/MouseHoverOnAppObject.js.map +1 -1
- package/dist/esm/Selection/Controller/MouseHoverOnAppObject.test.js +1 -0
- package/dist/esm/Selection/Controller/MouseHoverOnAppObject.test.js.map +1 -1
- package/dist/esm/Selection/Controller/MousePressOnAppObject.js.map +1 -1
- package/dist/esm/Selection/Controller/MousePressOnAppObject.test.js +1 -0
- package/dist/esm/Selection/Controller/MousePressOnAppObject.test.js.map +1 -1
- package/dist/esm/Selection/Controller/MouseSelectAppObject.js.map +1 -1
- package/dist/esm/Selection/Controller/MouseSelectAppObject.test.js +1 -0
- package/dist/esm/Selection/Controller/MouseSelectAppObject.test.js.map +1 -1
- package/dist/esm/Selection/Controller/StylusHoverOnAppObjectSC.js.map +1 -1
- package/dist/esm/Selection/Controller/StylusPressOnAppObjectSC.js.map +1 -1
- package/dist/esm/Selection/Controller/StylusSelectAppObjectSC.js.map +1 -1
- package/dist/esm/Selection/Controller/TapToSelectAppObject.js.map +1 -1
- package/dist/esm/Selection/Controller/TouchPressOnAppObject.js.map +1 -1
- package/dist/esm/Stick/Controllers/DoubleClickToStickMC.js.map +1 -1
- package/dist/esm/Stick/Controllers/DoubleTapToStickTC.js.map +1 -1
- package/dist/esm/Stylus/Entity/StylusEntity.js.map +1 -1
- package/dist/esm/Stylus/Entity/StylusEntity.test.js.map +1 -1
- package/dist/esm/TouchController/Entities/TouchInput.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Mouse/DragScaleTransformMC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Mouse/MousePanTransformMC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Mouse/PanTransformMC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Mouse/RollScaleTransformMC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Stylus/MoveTransformSC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Stylus/PanScaleTransformSC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Touch/DragScaleTransformTC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Touch/PanTransformTC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Touch/PinchTransformTC.js.map +1 -1
- package/dist/esm/Transform3D/Controllers/Touch/TouchPanTransformTC.js.map +1 -1
- package/dist/types/MouseInput/Mocks/MockMouseInput.d.ts +5 -6
- package/dist/types/MouseInput/Mocks/MockMouseInput.d.ts.map +1 -1
- package/dist/types/MouseInput/Mocks/index.d.ts +2 -0
- package/dist/types/MouseInput/Mocks/index.d.ts.map +1 -0
- package/dist/types/MouseInput/index.d.ts +1 -0
- package/dist/types/MouseInput/index.d.ts.map +1 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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":";;AAAA,sCAAyE;AACzE,2CAA0D;AAE1D,0EAAuE;AACvE,qEAAsE;AACtE,wEAAqE;AACrE,mEAAgE;AAEhE,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IAEvC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAA,+BAAgB,EAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IAEvB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,2CAAoB,CAAC,WAAW,CAAC,CAAC;IAErD,MAAM,kBAAkB,GAAG,IAAA,mCAAyB,EAAC,UAAU,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,qBAAc,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,kBAAkB,CAAC,eAAe,GAAG,cAAc,CAAC;IAEpD,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,WAAW,CAAC,CAAC;
|
|
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
|
|
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":";;AAAA,sCAAyE;AACzE,2CAA0D;AAE1D,0EAAuE;AACvE,qEAAsE;AACtE,wEAAqE;AACrE,mEAAgE;AAEhE,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IAEvC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAA,+BAAgB,EAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IAEvB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,2CAAoB,CAAC,WAAW,CAAC,CAAC;IAErD,MAAM,kBAAkB,GAAG,IAAA,mCAAyB,EAAC,UAAU,CAAC,CAAC;IAEjE,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,qBAAc,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,kBAAkB,CAAC,eAAe,GAAG,cAAc,CAAC;IAEpD,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,WAAW,CAAC,CAAC;
|
|
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
|
|
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":";;AAAA,sCAAyE;AACzE,2CAA0D;AAE1D,0EAAuE;AACvE,qEAAsE;AACtE,0EAAuE;AACvE,iEAA8D;AAE9D,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IAEvC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAA,+BAAgB,EAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IAEvB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,6CAAqB,CAAC,WAAW,CAAC,CAAC;IAEtD,MAAM,kBAAkB,GAAG,IAAA,mCAAyB,EAAC,UAAU,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,qBAAc,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,kBAAkB,CAAC,eAAe,GAAG,cAAc,CAAC;IAEpD,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,WAAW,CAAC,CAAC;
|
|
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
|
|
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
|
|
1
|
+
{"version":3,"file":"StylusPressOnAppObjectSC.js","sourceRoot":"","sources":["../../../../src/Selection/Controller/StylusPressOnAppObjectSC.ts"],"names":[],"mappings":";;;AAAA,sCAAsE;AACtE,yCAAgE;AAChE,6DAA0D;AAE1D,MAAa,wBACX,SAAQ,0BAAmB;IA6D3B,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAtD1C,kBAAa,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QACxC,gBAAW,GAAY,cAAO,CAAC,IAAI,EAAE,CAAC;QACtC,cAAS,GAAkB,IAAI,CAAC;QAChC,cAAS,GAAY,KAAK,CAAC;QAEnC,UAAK,GAAG,CAAC,MAAc,EAAW,EAAE;YAClC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,MAAc,EAAE,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO;YAEhC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAwB,CAAC;YACpE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAEtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC,CAAC;QAEF,eAAU,GAAG,CAAC,MAAc,EAAE,EAAE;YAC9B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAEvB,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEzB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,wBAAwB;YACxB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC,CAAC;QAEF,iBAAY,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,aAAwB,CAAC;gBAEnE,MAAM,QAAQ,GAAG,cAAO,CAAC,QAAQ,CAC/B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,WAAW,CACjB,CAAC,SAAS,CAAC;gBAEZ,IAAI,QAAQ,GAAG,wBAAwB,CAAC,gBAAgB,EAAE,CAAC;oBACzD,wBAAwB;oBACxB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,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,OAAO,GAAG,SAAS,CAAC,YAAY,CACnC,mCAAgB,CAAC,IAAI,CACtB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;;AAjFH,4DAkFC;AA9EiB,6BAAI,GAAG,0BAA0B,AAA7B,CAA8B;AAClC,yCAAgB,GAAG,CAAC,AAAJ,CAAK","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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1
|
+
{"version":3,"file":"StylusEntity.js","sourceRoot":"","sources":["../../../../src/Stylus/Entity/StylusEntity.ts"],"names":[],"mappings":";;;AA4CA,4CAEC;AA9CD,sCASqB;AACrB,mDAAgD;AAchD,MAAsB,YAAa,SAAQ,sBAAe;IAexD,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;;AAjBH,oCAkBC;AAjBiB,iBAAI,GAAG,cAAc,CAAC;AAE/B,mCAAsB,GAAW,IAAI,CAAC;AACtC,iCAAoB,GAAW,GAAG,CAAC;AAgB5C,SAAgB,gBAAgB,CAAC,MAAiB;IAChD,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,SAAU,SAAQ,YAAY;IAgFlC,IAAI,OAAO;QACT,OAAO,qBAAc,CAAC,kBAAkB,CACtC,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,cAAO,CAAC,OAAO,EAAE,CAAC,CACxD,CAAC;IACJ,CAAC;IAGD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;IAClC,CAAC;IAEO,oBAAoB,CAAC,WAAmB;QAC9C,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QACxB,IACE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACV,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YACX,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YACX,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EACX,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QA/G9B,gBAAW,GAAyB,EAAE,CAAC;QACvC,iBAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAGrC,kBAAa,GAAG,cAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,cAAS,GAAG,CAAC,CAAC;QAEtB,uBAAkB,GAAG,CAAC,UAA8B,EAAQ,EAAE;YAC5D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC;QAEF,sBAAiB,GAAG,CAAC,MAAc,EAAE,SAAkB,EAAQ,EAAE;YAC/D,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS;gBAAE,OAAO;YAEpD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACtC,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;wBAC5B,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;oBAClC,CAAC;oBACD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;oBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;oBAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;wBAC1B,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAChC,CAAC;oBAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;wBACrD,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;YACtC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,mBAAc,GAAG,CAAC,MAAc,EAAW,EAAE;YAC3C,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBACrD,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC;QAEM,YAAO,GAAG,CAAC,MAAc,EAAW,EAAE;YAC5C,MAAM,eAAe,GAAG,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC;YAE1D,MAAM,QAAQ,GAAG,cAAO,CAAC,QAAQ,CAC/B,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,IAAI,CAAC,aAAa,CACnB,CAAC,SAAS,CAAC;YACZ,MAAM,qBAAqB,GACzB,QAAQ,GAAG,YAAY,CAAC,sBAAsB,CAAC;YAEjD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/C,MAAM,sBAAsB,GAC1B,UAAU,GAAG,YAAY,CAAC,oBAAoB,CAAC;YAEjD,IAAI,eAAe,IAAI,qBAAqB,IAAI,sBAAsB,EAAE,CAAC;gBACvE,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC;QAIM,sBAAiB,GAAG,GAAG,EAAE;YAC/B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAEtD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACtC,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;oBAC5B,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QASM,oBAAe,GAAG,IAAI,sBAAe,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QA0BxE,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;CACF","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"]}
|