@@ -113,28 +113,32 @@ function forwardEvents(
113113 const forwardPointerCapture = options ?. forwardPointerCapture ?? true
114114 const pointerMap = new Map < number , Pointer > ( )
115115 const pointerTypePrefix = options . pointerTypePrefix ?? 'forward-'
116- const getInnerPointer = ( { pointerId = - 1 , pointerType = 'mouse' , pointerState } : ForwardablePointerEvent ) => {
117- let innerPointer = pointerMap . get ( pointerId )
116+ const getInnerPointer = ( event : ForwardablePointerEvent , eventType : InternalEventType ) => {
117+ let innerPointer = pointerMap . get ( event . pointerId )
118118 if ( innerPointer != null ) {
119119 return innerPointer
120120 }
121- pointerMap . set (
122- pointerId ,
123- ( innerPointer = new Pointer (
124- generateUniquePointerId ( ) ,
125- `${ pointerTypePrefix } ${ pointerType } ` ,
126- pointerState ,
127- new CameraRayIntersector ( ( nativeEvent , coords ) => {
128- toCoords ( nativeEvent , coords )
129- return getCamera ( )
130- } , options ) ,
131- getCamera ,
132- undefined ,
133- forwardPointerCapture ? setPointerCapture . bind ( null , pointerId ) : undefined ,
134- forwardPointerCapture ? releasePointerCapture . bind ( null , pointerId ) : undefined ,
135- options ,
136- ) ) ,
121+ innerPointer = new Pointer (
122+ generateUniquePointerId ( ) ,
123+ `${ pointerTypePrefix } ${ event . pointerType } ` ,
124+ event . pointerState ,
125+ new CameraRayIntersector ( ( nativeEvent , coords ) => {
126+ toCoords ( nativeEvent , coords )
127+ return getCamera ( )
128+ } , options ) ,
129+ getCamera ,
130+ undefined ,
131+ forwardPointerCapture ? setPointerCapture . bind ( null , event . pointerId ) : undefined ,
132+ forwardPointerCapture ? releasePointerCapture . bind ( null , event . pointerId ) : undefined ,
133+ options ,
137134 )
135+ if ( eventType != 'move' && eventType != 'wheel' ) {
136+ //if we start with a non-move event no, we intersect and commit
137+ //this allows enter, down, ... events to be forwarded to the scene even when they dont come with a move event
138+ innerPointer . setIntersection ( innerPointer . computeIntersection ( scene , event ) )
139+ innerPointer . commit ( event , false )
140+ }
141+ pointerMap . set ( event . pointerId , innerPointer )
138142 return innerPointer
139143 }
140144
@@ -175,7 +179,7 @@ function forwardEvents(
175179 }
176180
177181 const onEvent = ( type : InternalEventType , event : ForwardablePointerEvent ) => {
178- const pointer = getInnerPointer ( event )
182+ const pointer = getInnerPointer ( event , type )
179183 if ( type === 'move' ) {
180184 latestMoveEventMap . set ( pointer , event )
181185 }
@@ -218,7 +222,7 @@ function forwardEvents(
218222 const length = eventList . length
219223 for ( let i = 0 ; i < length ; i ++ ) {
220224 const { type, event } = eventList [ i ]
221- const pointer = getInnerPointer ( event )
225+ const pointer = getInnerPointer ( event , type )
222226 if ( type === 'move' ) {
223227 movedPointerList . push ( pointer )
224228 if ( latestMoveEventMap . get ( pointer ) != event ) {
0 commit comments