When using two controllers in VR with laser-controls, the cursor component listens to WebXR session events (selectstart, selectend) which fire globally for any input source. Without filtering by handedness:
Left controller hovers over an image
Right controller hovers over the floor
User presses trigger on right controller
Click event fires on the image (wrong!) because left cursor's intersectedEl was used
Changes proposed:
Added hand schema property to cursor component
Filter selectstart events in onCursorDown by comparing evt.inputSource.handedness with configured hand
Filter selectend events in onCursorUp similarly
laser-controls now passes its hand property to the cursor component
PR done with the help of Claude Code with Opus 4.5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description:
You can reproduce the issue on https://aframe.io/aframe/examples/showcase/ui/ that is using the laser-controls component.
When using two controllers in VR with laser-controls, the cursor component listens to WebXR session events (selectstart, selectend) which fire globally for any input source. Without filtering by handedness:
Changes proposed:
PR done with the help of Claude Code with Opus 4.5