@pmndrs/pointer-events
Advanced tools
Comparing version 6.2.7 to 6.2.8
@@ -29,3 +29,2 @@ import { Intersection as ThreeIntersection, Quaternion, Vector3 } from 'three'; | ||
export type IntersectionOptions = { | ||
customFilter?: (intersection: ThreeIntersection) => boolean; | ||
/** | ||
@@ -32,0 +31,0 @@ * @returns a negative number if i1 should be sorted before i2 |
@@ -10,4 +10,4 @@ import { Object3D, Intersection as ThreeIntersection } from 'three'; | ||
protected abstract prepareIntersection(nativeEvent: unknown): boolean; | ||
abstract executeIntersection(object: Object3D, objectPointerEventsOrder: number | undefined): void; | ||
abstract executeIntersection(object: Object3D, objectPointerEventsOrder: number): void; | ||
abstract finalizeIntersection(): Intersection | undefined; | ||
} |
@@ -107,3 +107,2 @@ import { Matrix4, Plane, Quaternion, Raycaster, Vector3, Vector2, } from 'three'; | ||
computeIntersectionWorldPlane(this.viewPlane, intersection, object); | ||
const pointOnFace = this.raycaster.ray.intersectPlane(this.viewPlane, new Vector3()) ?? point; | ||
return { | ||
@@ -113,3 +112,3 @@ ...intersection, | ||
point, | ||
pointOnFace, | ||
pointOnFace: point, | ||
pointerPosition: this.fromPosition.clone(), | ||
@@ -116,0 +115,0 @@ pointerQuaternion: this.fromQuaternion.clone(), |
@@ -10,2 +10,2 @@ import { Plane, Intersection as ThreeIntersection, Object3D } from 'three'; | ||
*/ | ||
export declare function getDominantIntersectionIndex<T extends ThreeIntersection>(i1: T | undefined, pointerEventsOrder1: number | undefined, i2: Array<T>, pointerEventsOrder2: number | undefined, { customFilter, customSort: compare }?: IntersectionOptions): number | undefined; | ||
export declare function getDominantIntersectionIndex<T extends ThreeIntersection>(i1: T | undefined, pointerEventsOrder1: number | undefined, i2: Array<T>, pointerEventsOrder2: number | undefined, { customSort: compare }?: IntersectionOptions): number | undefined; |
import { hasObjectListeners } from '../utils.js'; | ||
export function computeIntersectionWorldPlane(target, intersection, object) { | ||
if (intersection.face == null) { | ||
const normal = intersection.normal ?? intersection.face?.normal; | ||
if (normal == null) { | ||
return false; | ||
} | ||
target.setFromNormalAndCoplanarPoint(intersection.face.normal, intersection.localPoint); | ||
target.setFromNormalAndCoplanarPoint(normal, intersection.localPoint); | ||
target.applyMatrix4(object.matrixWorld); | ||
@@ -45,3 +46,3 @@ return true; | ||
const pointerEventsType = object.pointerEventsType ?? parentPointerEventsType ?? 'all'; | ||
const pointerEventsOrder = object.pointerEventsOrder ?? parentPointerEventsOrder; | ||
const pointerEventsOrder = object.pointerEventsOrder ?? parentPointerEventsOrder ?? 0; | ||
const isAllowed = isPointerEventsAllowed(hasListener, pointerEvents, pointerEventsType); | ||
@@ -51,3 +52,3 @@ const length = pointers.length; | ||
for (let i = 0; i < length; i++) { | ||
pointers[i].intersector.executeIntersection(object, pointerEventsOrder); | ||
filterAndInteresct(pointers[i], object, pointerEvents, pointerEventsType, pointerEventsOrder); | ||
} | ||
@@ -61,3 +62,3 @@ } | ||
} | ||
pointers[i].intersector.executeIntersection(object, pointerEventsOrder); | ||
filterAndInteresct(pointer, object, pointerEvents, pointerEventsType, pointerEventsOrder); | ||
} | ||
@@ -70,2 +71,8 @@ } | ||
} | ||
function filterAndInteresct({ intersector, options }, object, pointerEvents, pointerEventsType, pointerEventsOrder) { | ||
if (options.filter != null && !options.filter(object, pointerEvents, pointerEventsType, pointerEventsOrder)) { | ||
return; | ||
} | ||
intersector.executeIntersection(object, pointerEventsOrder); | ||
} | ||
/** | ||
@@ -75,3 +82,3 @@ * @returns undefined if `i1` is the dominant intersection | ||
*/ | ||
export function getDominantIntersectionIndex(i1, pointerEventsOrder1, i2, pointerEventsOrder2, { customFilter, customSort: compare = defaultSort } = {}) { | ||
export function getDominantIntersectionIndex(i1, pointerEventsOrder1, i2, pointerEventsOrder2, { customSort: compare = defaultSort } = {}) { | ||
let index = undefined; | ||
@@ -81,5 +88,2 @@ const length = i2.length; | ||
const intersection = i2[i]; | ||
if (!(customFilter?.(intersection) ?? true)) { | ||
continue; | ||
} | ||
if (i1 == null || compare(i1, pointerEventsOrder1, intersection, pointerEventsOrder2) > 0) { | ||
@@ -86,0 +90,0 @@ i1 = intersection; |
@@ -52,2 +52,7 @@ import { Object3D } from 'three'; | ||
contextMenuButton?: number; | ||
/** | ||
* filtering the intersectable objects | ||
* @default undefined | ||
*/ | ||
filter?: (object: Object3D, pointerEvents: AllowedPointerEvents, pointerEventsType: AllowedPointerEventsType, pointerEventsOrder: number) => boolean; | ||
}; | ||
@@ -70,3 +75,3 @@ declare module 'three' { | ||
private readonly parentReleasePointerCapture?; | ||
private readonly options; | ||
readonly options: PointerOptions; | ||
private prevIntersection; | ||
@@ -73,0 +78,0 @@ private intersection; |
import { BufferAttribute, Matrix4, Triangle, Vector2, Vector3 } from 'three'; | ||
export function hasObjectListeners({ _listeners, __r3f }) { | ||
if (_listeners != null && Object.keys(_listeners).length > 0) { | ||
return true; | ||
} | ||
if (__r3f != null && __r3f?.eventCount > 0) { | ||
return true; | ||
} | ||
if (_listeners == null) { | ||
return false; | ||
} | ||
const entries = Object.entries(_listeners); | ||
const length = entries.length; | ||
for (let i = 0; i < length; i++) { | ||
const entry = entries[i]; | ||
if (!listenerNames.includes(entry[0])) { | ||
continue; | ||
} | ||
if (entry[1] != null && entry[1].length > 0) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
@@ -39,2 +50,3 @@ } | ||
}; | ||
const listenerNames = Object.keys(r3fEventToHandlerMap); | ||
const triangleHelper1 = new Triangle(); | ||
@@ -41,0 +53,0 @@ const triangleHelper2 = new Triangle(); |
@@ -5,3 +5,3 @@ { | ||
"license": "SEE LICENSE IN LICENSE", | ||
"version": "6.2.7", | ||
"version": "6.2.8", | ||
"homepage": "https://github.com/pmndrs/xr", | ||
@@ -8,0 +8,0 @@ "author": "Bela Bohlender", |
84219
1943