Buckets:
ktongue/docker_container / simsite /frontend /node_modules /three-stdlib /interactive /InteractiveGroup.cjs
| ; | |
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | |
| const THREE = require("three"); | |
| const _pointer = /* @__PURE__ */ new THREE.Vector2(); | |
| const _event = { type: "", data: _pointer }; | |
| class InteractiveGroup extends THREE.Group { | |
| constructor(renderer, camera) { | |
| super(); | |
| const scope = this; | |
| const raycaster = new THREE.Raycaster(); | |
| const tempMatrix = new THREE.Matrix4(); | |
| const element = renderer.domElement; | |
| function onPointerEvent(event) { | |
| event.stopPropagation(); | |
| _pointer.x = event.clientX / element.clientWidth * 2 - 1; | |
| _pointer.y = -(event.clientY / element.clientHeight) * 2 + 1; | |
| raycaster.setFromCamera(_pointer, camera); | |
| const intersects = raycaster.intersectObjects(scope.children, false); | |
| if (intersects.length > 0) { | |
| const intersection = intersects[0]; | |
| const object = intersection.object; | |
| const uv = intersection.uv; | |
| _event.type = event.type; | |
| _event.data.set(uv.x, 1 - uv.y); | |
| object.dispatchEvent(_event); | |
| } | |
| } | |
| element.addEventListener("pointerdown", onPointerEvent); | |
| element.addEventListener("pointerup", onPointerEvent); | |
| element.addEventListener("pointermove", onPointerEvent); | |
| element.addEventListener("mousedown", onPointerEvent); | |
| element.addEventListener("mouseup", onPointerEvent); | |
| element.addEventListener("mousemove", onPointerEvent); | |
| element.addEventListener("click", onPointerEvent); | |
| const events = { | |
| move: "mousemove", | |
| select: "click", | |
| selectstart: "mousedown", | |
| selectend: "mouseup" | |
| }; | |
| function onXRControllerEvent(event) { | |
| const controller = event.target; | |
| tempMatrix.identity().extractRotation(controller.matrixWorld); | |
| raycaster.ray.origin.setFromMatrixPosition(controller.matrixWorld); | |
| raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix); | |
| const intersections = raycaster.intersectObjects(scope.children, false); | |
| if (intersections.length > 0) { | |
| const intersection = intersections[0]; | |
| const object = intersection.object; | |
| const uv = intersection.uv; | |
| _event.type = events[event.type]; | |
| _event.data.set(uv.x, 1 - uv.y); | |
| object.dispatchEvent(_event); | |
| } | |
| } | |
| const controller1 = renderer.xr.getController(0); | |
| controller1.addEventListener("move", onXRControllerEvent); | |
| controller1.addEventListener("select", onXRControllerEvent); | |
| controller1.addEventListener("selectstart", onXRControllerEvent); | |
| controller1.addEventListener("selectend", onXRControllerEvent); | |
| const controller2 = renderer.xr.getController(1); | |
| controller2.addEventListener("move", onXRControllerEvent); | |
| controller2.addEventListener("select", onXRControllerEvent); | |
| controller2.addEventListener("selectstart", onXRControllerEvent); | |
| controller2.addEventListener("selectend", onXRControllerEvent); | |
| } | |
| } | |
| exports.InteractiveGroup = InteractiveGroup; | |
| //# sourceMappingURL=InteractiveGroup.cjs.map | |
Xet Storage Details
- Size:
- 3.03 kB
- Xet hash:
- b8229c2fea065d64ee09cd2468f3ccaa8b155b3bdc0e322a4f19a878fa5a0c6a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.