@flighthq/interaction 0.2.1-next.738.07b221d → 0.2.1-next.841.373388f
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/displayHitTests.d.ts +1 -1
- package/dist/displayHitTests.d.ts.map +1 -1
- package/dist/displayHitTests.js +3 -3
- package/dist/displayHitTests.js.map +1 -1
- package/dist/displayObjectOverlap.d.ts +4 -4
- package/dist/displayObjectOverlap.d.ts.map +1 -1
- package/dist/displayObjectOverlap.js +3 -3
- package/dist/displayObjectOverlap.js.map +1 -1
- package/dist/hitTests.d.ts +6 -6
- package/dist/hitTests.d.ts.map +1 -1
- package/dist/hitTests.js +10 -10
- package/dist/hitTests.js.map +1 -1
- package/dist/interactionSpatialIndex.d.ts.map +1 -1
- package/dist/interactionSpatialIndex.js.map +1 -1
- package/dist/registerBitmapHitTest.js.map +1 -1
- package/dist/registerDefaultHitTests.js +2 -2
- package/dist/registerDefaultHitTests.js.map +1 -1
- package/dist/registerShapeHitTest.js.map +1 -1
- package/dist/registerTextHitTest.js.map +1 -1
- package/dist/spatialQuery.d.ts +3 -3
- package/dist/spatialQuery.d.ts.map +1 -1
- package/dist/spatialQuery.js.map +1 -1
- package/package.json +13 -13
- package/src/displayHitTests.test.ts +28 -28
- package/src/displayObjectOverlap.test.ts +13 -17
- package/src/enableInteractionGuards.test.ts +1 -1
- package/src/focusManager.test.ts +5 -5
- package/src/hitTests.test.ts +64 -64
- package/src/interactionManager.test.ts +18 -18
- package/src/interactionSpatialIndex.test.ts +10 -10
- package/src/nodeInteractionState.test.ts +1 -1
- package/src/registerBitmapHitTest.test.ts +1 -1
- package/src/registerDefaultHitTests.test.ts +2 -2
- package/src/spatialQuery.test.ts +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { NodeAny } from '@flighthq/types';
|
|
2
2
|
export declare function defaultBitmapHitTestHandler(source: NodeAny, x: number, y: number): boolean;
|
|
3
|
-
export declare function defaultDisplayObjectHitTestHandler(_source: NodeAny, _x: number, _y: number): boolean;
|
|
4
3
|
export declare function defaultHtmlViewHitTestHandler(_source: NodeAny, _x: number, _y: number): boolean;
|
|
5
4
|
export declare function defaultMovieClipHitTestHandler(_source: NodeAny, _x: number, _y: number): boolean;
|
|
5
|
+
export declare function defaultNode2DHitTestHandler(_source: NodeAny, _x: number, _y: number): boolean;
|
|
6
6
|
export declare function defaultRenderViewHitTestHandler(source: NodeAny, x: number, y: number): boolean;
|
|
7
7
|
export declare function defaultRichTextHitTestHandler(source: NodeAny, x: number, y: number): boolean;
|
|
8
8
|
export declare function defaultShapeHitTestHandler(source: NodeAny, x: number, y: number): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayHitTests.d.ts","sourceRoot":"","sources":["../src/displayHitTests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/C,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE1F;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"displayHitTests.d.ts","sourceRoot":"","sources":["../src/displayHitTests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/C,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE1F;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAG/F;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAGhG;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7F;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE9F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5F;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAExF;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7F;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzF"}
|
package/dist/displayHitTests.js
CHANGED
|
@@ -2,9 +2,6 @@ import { hitTestGraphLocalBounds } from './hitTests';
|
|
|
2
2
|
export function defaultBitmapHitTestHandler(source, x, y) {
|
|
3
3
|
return hitTestGraphLocalBounds(source, x, y);
|
|
4
4
|
}
|
|
5
|
-
export function defaultDisplayObjectHitTestHandler(_source, _x, _y) {
|
|
6
|
-
return false;
|
|
7
|
-
}
|
|
8
5
|
export function defaultHtmlViewHitTestHandler(_source, _x, _y) {
|
|
9
6
|
// HtmlView elements handle pointer events through the browser — not the canvas interaction system.
|
|
10
7
|
return false;
|
|
@@ -13,6 +10,9 @@ export function defaultMovieClipHitTestHandler(_source, _x, _y) {
|
|
|
13
10
|
// Containers have no self hit area — findGraphHitTarget traverses children separately.
|
|
14
11
|
return false;
|
|
15
12
|
}
|
|
13
|
+
export function defaultNode2DHitTestHandler(_source, _x, _y) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
16
|
export function defaultRenderViewHitTestHandler(source, x, y) {
|
|
17
17
|
return hitTestGraphLocalBounds(source, x, y);
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayHitTests.js","sourceRoot":"","sources":["../src/displayHitTests.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,UAAU,2BAA2B,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IAC/E,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"displayHitTests.js","sourceRoot":"","sources":["../src/displayHitTests.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,UAAU,2BAA2B,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IAC/E,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAgB,EAAE,EAAU,EAAE,EAAU;IACpF,mGAAmG;IACnG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,OAAgB,EAAE,EAAU,EAAE,EAAU;IACrF,uFAAuF;IACvF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAgB,EAAE,EAAU,EAAE,EAAU;IAClF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IACnF,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IACjF,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IAC9E,wFAAwF;IACxF,wEAAwE;IACxE,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IAC7E,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IAClF,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IAC9E,OAAO,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
1
|
+
import type { Node2D, Rectangle } from '@flighthq/types';
|
|
2
|
+
export declare function containsNode2D(outer: Node2D, inner: Node2D): boolean;
|
|
3
|
+
export declare function getNode2DOverlapRectangle(source: Node2D, other: Node2D, out: Rectangle): Rectangle;
|
|
4
|
+
export declare function hitTestNode2DsShape(source: Node2D, other: Node2D): boolean;
|
|
5
5
|
//# sourceMappingURL=displayObjectOverlap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayObjectOverlap.d.ts","sourceRoot":"","sources":["../src/displayObjectOverlap.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"displayObjectOverlap.d.ts","sourceRoot":"","sources":["../src/displayObjectOverlap.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEzD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,SAAS,CAGlG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAS1E"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { computeRectangleIntersection, containsRectanglePointXY, enclosesRectangle, intersectsRectangle, } from '@flighthq/geometry';
|
|
2
2
|
import { getNodeWorldBoundsRectangle } from '@flighthq/node';
|
|
3
|
-
export function
|
|
3
|
+
export function containsNode2D(outer, inner) {
|
|
4
4
|
return enclosesRectangle(getNodeWorldBoundsRectangle(outer), getNodeWorldBoundsRectangle(inner));
|
|
5
5
|
}
|
|
6
|
-
export function
|
|
6
|
+
export function getNode2DOverlapRectangle(source, other, out) {
|
|
7
7
|
computeRectangleIntersection(out, getNodeWorldBoundsRectangle(source), getNodeWorldBoundsRectangle(other));
|
|
8
8
|
return out;
|
|
9
9
|
}
|
|
10
|
-
export function
|
|
10
|
+
export function hitTestNode2DsShape(source, other) {
|
|
11
11
|
const a = getNodeWorldBoundsRectangle(source);
|
|
12
12
|
const b = getNodeWorldBoundsRectangle(other);
|
|
13
13
|
if (!intersectsRectangle(a, b))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayObjectOverlap.js","sourceRoot":"","sources":["../src/displayObjectOverlap.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAG7D,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"displayObjectOverlap.js","sourceRoot":"","sources":["../src/displayObjectOverlap.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAG7D,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,KAAa;IACzD,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,KAAK,CAAC,EAAE,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAc,EAAE,KAAa,EAAE,GAAc;IACrF,4BAA4B,CAAC,GAAG,EAAE,2BAA2B,CAAC,MAAM,CAAC,EAAE,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3G,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAa;IAC/D,MAAM,CAAC,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;IACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;IACtC,OAAO,wBAAwB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,wBAAwB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC5G,CAAC"}
|
package/dist/hitTests.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Node2D, HitTestFunction, HitTestPreciseFunction, HitTestResult, Kind, Node, NodeAny } from '@flighthq/types';
|
|
2
2
|
/**
|
|
3
3
|
* Fills `out` with the sub-index and local coordinates of a hit at world-space (x, y) on a node you
|
|
4
4
|
* already have (usually the result of a `*Precise` query, or a dispatch target). `out.subIndex` is the
|
|
@@ -25,11 +25,6 @@ export declare function findGraphHitTargetPrecise<Traits extends object>(source:
|
|
|
25
25
|
export declare function findGraphHitTargets<Traits extends object>(source: Node<Traits>, x: number, y: number, out?: Node<Traits>[]): Node<Traits>[];
|
|
26
26
|
/** Precise stack: `findGraphHitTargets` using exact geometry per kind (bounds fallback where none). */
|
|
27
27
|
export declare function findGraphHitTargetsPrecise<Traits extends object>(source: Node<Traits>, x: number, y: number, out?: Node<Traits>[]): Node<Traits>[];
|
|
28
|
-
/**
|
|
29
|
-
* Evaluates the world bounding box of one node to see if it overlaps or
|
|
30
|
-
* intersects the world bounding box of another.
|
|
31
|
-
**/
|
|
32
|
-
export declare function hitTestDisplayObjects(source: DisplayObject, other: DisplayObject): boolean;
|
|
33
28
|
/**
|
|
34
29
|
* Tests whether world-space (x, y) falls within the node's local bounds rect,
|
|
35
30
|
* after inverting through the node's world transform.
|
|
@@ -39,6 +34,11 @@ export declare function hitTestGraphLocalBounds<Traits extends object>(source: N
|
|
|
39
34
|
export declare function hitTestGraphPoint<Traits extends object>(source: Node<Traits>, x: number, y: number): boolean;
|
|
40
35
|
/** Precise any-hit query: `hitTestGraphPoint` using exact geometry per kind (bounds fallback where none). */
|
|
41
36
|
export declare function hitTestGraphPointPrecise<Traits extends object>(source: Node<Traits>, x: number, y: number): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Evaluates the world bounding box of one node to see if it overlaps or
|
|
39
|
+
* intersects the world bounding box of another.
|
|
40
|
+
**/
|
|
41
|
+
export declare function hitTestNode2Ds(source: Node2D, other: Node2D): boolean;
|
|
42
42
|
/**
|
|
43
43
|
* Tests one node's own hit region at world-space (x, y): its `hitArea` if set, else its kind geometry
|
|
44
44
|
* (coarse bounds, or the exact provider when `precise`). No eligibility check and no recursion — for
|
package/dist/hitTests.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitTests.d.ts","sourceRoot":"","sources":["../src/hitTests.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"hitTests.d.ts","sourceRoot":"","sources":["../src/hitTests.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,MAAM,EAEN,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,OAAO,EAGR,MAAM,iBAAiB,CAAC;AAIzB;;;;;IAKI;AACJ,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAO9F;AAED;;;;IAII;AACJ,wBAAgB,kBAAkB,CAAC,MAAM,SAAS,MAAM,EACtD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAErB;AAED;;;;IAII;AACJ,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,MAAM,EAC7D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAErB;AAED;;;IAGI;AACJ,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,EACvD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,GAAE,IAAI,CAAC,MAAM,CAAC,EAAO,GACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAIhB;AAED,uGAAuG;AACvG,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,MAAM,EAC9D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,GAAE,IAAI,CAAC,MAAM,CAAC,EAAO,GACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAIhB;AAED;;;IAGI;AACJ,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAOlH;AAED,+HAA+H;AAC/H,wBAAgB,iBAAiB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5G;AAED,6GAA6G;AAC7G,wBAAgB,wBAAwB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnH;AAED;;;IAGI;AACJ,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAKrE;AAED;;;;IAII;AACJ,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAI1G;AAED;;;IAGI;AACJ,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,eAAe,GAAG,IAAI,CAErE;AAED;;;;IAII;AACJ,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,sBAAsB,GAAG,IAAI,CAEnF"}
|
package/dist/hitTests.js
CHANGED
|
@@ -47,16 +47,6 @@ export function findGraphHitTargetsPrecise(source, x, y, out = []) {
|
|
|
47
47
|
collectHits(source, x, y, true, out);
|
|
48
48
|
return out;
|
|
49
49
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Evaluates the world bounding box of one node to see if it overlaps or
|
|
52
|
-
* intersects the world bounding box of another.
|
|
53
|
-
**/
|
|
54
|
-
export function hitTestDisplayObjects(source, other) {
|
|
55
|
-
if (getNodeParent(source) !== null && getNodeParent(other) !== null) {
|
|
56
|
-
return intersectsRectangle(getNodeWorldBoundsRectangle(source), getNodeWorldBoundsRectangle(other));
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
50
|
/**
|
|
61
51
|
* Tests whether world-space (x, y) falls within the node's local bounds rect,
|
|
62
52
|
* after inverting through the node's world transform.
|
|
@@ -73,6 +63,16 @@ export function hitTestGraphPoint(source, x, y) {
|
|
|
73
63
|
export function hitTestGraphPointPrecise(source, x, y) {
|
|
74
64
|
return anyHit(source, x, y, true);
|
|
75
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Evaluates the world bounding box of one node to see if it overlaps or
|
|
68
|
+
* intersects the world bounding box of another.
|
|
69
|
+
**/
|
|
70
|
+
export function hitTestNode2Ds(source, other) {
|
|
71
|
+
if (getNodeParent(source) !== null && getNodeParent(other) !== null) {
|
|
72
|
+
return intersectsRectangle(getNodeWorldBoundsRectangle(source), getNodeWorldBoundsRectangle(other));
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
76
|
/**
|
|
77
77
|
* Tests one node's own hit region at world-space (x, y): its `hitArea` if set, else its kind geometry
|
|
78
78
|
* (coarse bounds, or the exact provider when `precise`). No eligibility check and no recursion — for
|
package/dist/hitTests.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitTests.js","sourceRoot":"","sources":["../src/hitTests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAClH,OAAO,EACL,2BAA2B,EAC3B,aAAa,EACb,cAAc,EACd,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAcnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;IAKI;AACJ,MAAM,UAAU,gBAAgB,CAAC,IAAa,EAAE,CAAS,EAAE,CAAS,EAAE,GAAkB;IACtF,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;IAChB,6BAA6B,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"hitTests.js","sourceRoot":"","sources":["../src/hitTests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactionSpatialIndex.d.ts","sourceRoot":"","sources":["../src/interactionSpatialIndex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"interactionSpatialIndex.d.ts","sourceRoot":"","sources":["../src/interactionSpatialIndex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAU,kBAAkB,EAAE,OAAO,EAAgC,MAAM,iBAAiB,CAAC;AAKzG;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,OAAO,EAC5D,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC9B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,OAAO,GAAE,OAAe,GACvB,CAAC,GAAG,IAAI,CAmBV;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,CAiBtG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactionSpatialIndex.js","sourceRoot":"","sources":["../src/interactionSpatialIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAA8B,EAC9B,CAAS,EACT,CAAS,EACT,UAAmB,KAAK;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IACnC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3D,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;IAChD,IAAI,IAAI,GAAa,IAAI,CAAC;IAC1B,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAE,CAAC;QACjC,IAAI,IAAI,IAAI,QAAQ;YAAE,SAAS;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAkB,CAAC;QAC1C,IAAI,IAAI,KAAK,SAAS,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YACjE,IAAI,GAAG,IAAI,CAAC;YACZ,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAAoB,OAA8B;IAC9F,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IACnC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAE3B,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEtC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"interactionSpatialIndex.js","sourceRoot":"","sources":["../src/interactionSpatialIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerBitmapHitTest.js","sourceRoot":"","sources":["../src/registerBitmapHitTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,iBAAyB,CAAC;IAC9D,sBAAsB,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,kGAAkG;AAClG,SAAS,kBAAkB,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,cAAsB;IACvF,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,MAAgB,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAE7B,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAE/B,6BAA6B,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"registerBitmapHitTest.js","sourceRoot":"","sources":["../src/registerBitmapHitTest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BitmapKind, DisplayObjectKind, HtmlViewKind, MovieClipKind, QuadBatchKind, RenderViewKind, RichTextKind, Scale9ShapeKind, ShapeKind, SpriteKind, TextLabelKind, TilemapKind, VideoKind, } from '@flighthq/types';
|
|
2
|
-
import { defaultBitmapHitTestHandler,
|
|
2
|
+
import { defaultBitmapHitTestHandler, defaultNode2DHitTestHandler, defaultHtmlViewHitTestHandler, defaultMovieClipHitTestHandler, defaultRenderViewHitTestHandler, defaultRichTextHitTestHandler, defaultShapeHitTestHandler, defaultTextHitTestHandler, defaultVideoHitTestHandler, } from './displayHitTests';
|
|
3
3
|
import { registerHitTest } from './hitTests';
|
|
4
4
|
import { defaultQuadBatchHitTestHandler, defaultSpriteHitTestHandler, defaultTilemapHitTestHandler, } from './spriteHitTests';
|
|
5
5
|
export function registerDefaultHitTests() {
|
|
6
6
|
registerHitTest(BitmapKind, defaultBitmapHitTestHandler);
|
|
7
|
-
registerHitTest(DisplayObjectKind,
|
|
7
|
+
registerHitTest(DisplayObjectKind, defaultNode2DHitTestHandler);
|
|
8
8
|
registerHitTest(HtmlViewKind, defaultHtmlViewHitTestHandler);
|
|
9
9
|
registerHitTest(MovieClipKind, defaultMovieClipHitTestHandler);
|
|
10
10
|
registerHitTest(QuadBatchKind, defaultQuadBatchHitTestHandler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerDefaultHitTests.js","sourceRoot":"","sources":["../src/registerDefaultHitTests.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,WAAW,EACX,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,2BAA2B,EAC3B,
|
|
1
|
+
{"version":3,"file":"registerDefaultHitTests.js","sourceRoot":"","sources":["../src/registerDefaultHitTests.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,WAAW,EACX,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,uBAAuB;IACrC,eAAe,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;IACzD,eAAe,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IAChE,eAAe,CAAC,YAAY,EAAE,6BAA6B,CAAC,CAAC;IAC7D,eAAe,CAAC,aAAa,EAAE,8BAA8B,CAAC,CAAC;IAC/D,eAAe,CAAC,aAAa,EAAE,8BAA8B,CAAC,CAAC;IAC/D,eAAe,CAAC,cAAc,EAAE,+BAA+B,CAAC,CAAC;IACjE,eAAe,CAAC,YAAY,EAAE,6BAA6B,CAAC,CAAC;IAC7D,eAAe,CAAC,eAAe,EAAE,0BAA0B,CAAC,CAAC;IAC7D,eAAe,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IACvD,eAAe,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;IACzD,eAAe,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;IAC1D,eAAe,CAAC,WAAW,EAAE,4BAA4B,CAAC,CAAC;IAC3D,eAAe,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerShapeHitTest.js","sourceRoot":"","sources":["../src/registerShapeHitTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB;IAClC,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACpD,sBAAsB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAC5D,CAAC;AAED,gGAAgG;AAChG,SAAS,gBAAgB,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IAC7D,MAAM,OAAO,GAAG,mBAAmB,CAAE,MAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC;IAEhC,6BAA6B,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"registerShapeHitTest.js","sourceRoot":"","sources":["../src/registerShapeHitTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB;IAClC,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACpD,sBAAsB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAC5D,CAAC;AAED,gGAAgG;AAChG,SAAS,gBAAgB,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IAC7D,MAAM,OAAO,GAAG,mBAAmB,CAAE,MAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC;IAEhC,6BAA6B,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,MAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerTextHitTest.js","sourceRoot":"","sources":["../src/registerTextHitTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB;IACjC,sBAAsB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC5D,sBAAsB,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAC7D,CAAC;AAED,2GAA2G;AAC3G,SAAS,oBAAoB,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IACjE,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAmB,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC9B,6BAA6B,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"registerTextHitTest.js","sourceRoot":"","sources":["../src/registerTextHitTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB;IACjC,sBAAsB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC5D,sBAAsB,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAC7D,CAAC;AAED,2GAA2G;AAC3G,SAAS,oBAAoB,CAAC,MAAe,EAAE,CAAS,EAAE,CAAS;IACjE,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAmB,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC9B,6BAA6B,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,MAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,OAAO,+BAA+B,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,iBAAiB,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC"}
|
package/dist/spatialQuery.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function hitTestAreaQuery(root:
|
|
3
|
-
export declare function hitTestAreaQueryCircle(root:
|
|
1
|
+
import type { Node2D, Rectangle } from '@flighthq/types';
|
|
2
|
+
export declare function hitTestAreaQuery(root: Node2D, rect: Readonly<Rectangle>, out?: Node2D[]): Node2D[];
|
|
3
|
+
export declare function hitTestAreaQueryCircle(root: Node2D, cx: number, cy: number, radius: number, out?: Node2D[]): Node2D[];
|
|
4
4
|
//# sourceMappingURL=spatialQuery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spatialQuery.d.ts","sourceRoot":"","sources":["../src/spatialQuery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"spatialQuery.d.ts","sourceRoot":"","sources":["../src/spatialQuery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEzD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAgBtG;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAM,EAAO,GACjB,MAAM,EAAE,CAoBV"}
|
package/dist/spatialQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spatialQuery.js","sourceRoot":"","sources":["../src/spatialQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAG7E,MAAM,UAAU,gBAAgB,
|
|
1
|
+
{"version":3,"file":"spatialQuery.js","sourceRoot":"","sources":["../src/spatialQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAG7E,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAyB,EAAE,MAAgB,EAAE;IAC1F,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IAE9B,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IAC/C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,gBAAgB,CAAC,KAAe,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,EAAU,EACV,EAAU,EACV,MAAc,EACd,MAAgB,EAAE;IAElB,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IAE9B,MAAM,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IACtB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IACtB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IAC/C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,sBAAsB,CAAC,KAAe,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/interaction",
|
|
3
|
-
"version": "0.2.1-next.
|
|
3
|
+
"version": "0.2.1-next.841.373388f",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -32,18 +32,18 @@
|
|
|
32
32
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@flighthq/geometry": "0.2.1-next.
|
|
36
|
-
"@flighthq/node": "0.2.1-next.
|
|
37
|
-
"@flighthq/
|
|
38
|
-
"@flighthq/log": "0.2.1-next.
|
|
39
|
-
"@flighthq/path": "0.2.1-next.
|
|
40
|
-
"@flighthq/shape": "0.2.1-next.
|
|
41
|
-
"@flighthq/spatial": "0.2.1-next.
|
|
42
|
-
"@flighthq/signals": "0.2.1-next.
|
|
43
|
-
"@flighthq/surface": "0.2.1-next.
|
|
44
|
-
"@flighthq/text": "0.2.1-next.
|
|
45
|
-
"@flighthq/textlayout": "0.2.1-next.
|
|
46
|
-
"@flighthq/types": "0.2.1-next.
|
|
35
|
+
"@flighthq/geometry": "0.2.1-next.841.373388f",
|
|
36
|
+
"@flighthq/node": "0.2.1-next.841.373388f",
|
|
37
|
+
"@flighthq/scene2d": "0.2.1-next.841.373388f",
|
|
38
|
+
"@flighthq/log": "0.2.1-next.841.373388f",
|
|
39
|
+
"@flighthq/path": "0.2.1-next.841.373388f",
|
|
40
|
+
"@flighthq/shape": "0.2.1-next.841.373388f",
|
|
41
|
+
"@flighthq/spatial": "0.2.1-next.841.373388f",
|
|
42
|
+
"@flighthq/signals": "0.2.1-next.841.373388f",
|
|
43
|
+
"@flighthq/surface": "0.2.1-next.841.373388f",
|
|
44
|
+
"@flighthq/text": "0.2.1-next.841.373388f",
|
|
45
|
+
"@flighthq/textlayout": "0.2.1-next.841.373388f",
|
|
46
|
+
"@flighthq/types": "0.2.1-next.841.373388f"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@flighthq/sprite": "*",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createDisplayObject } from '@flighthq/displayobject';
|
|
2
1
|
import { setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { getNodeLocalBoundsRectangle } from '@flighthq/node';
|
|
3
|
+
import { createDisplayObject } from '@flighthq/scene2d';
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
defaultBitmapHitTestHandler,
|
|
7
|
-
|
|
7
|
+
defaultNode2DHitTestHandler,
|
|
8
8
|
defaultHtmlViewHitTestHandler,
|
|
9
9
|
defaultMovieClipHitTestHandler,
|
|
10
10
|
defaultRenderViewHitTestHandler,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
defaultVideoHitTestHandler,
|
|
16
16
|
} from './displayHitTests';
|
|
17
17
|
|
|
18
|
-
function
|
|
18
|
+
function makeNode2D() {
|
|
19
19
|
const obj = createDisplayObject();
|
|
20
20
|
setRectangle(getNodeLocalBoundsRectangle(obj), 0, 0, 100, 100);
|
|
21
21
|
return obj;
|
|
@@ -23,107 +23,107 @@ function makeDisplayObject() {
|
|
|
23
23
|
|
|
24
24
|
describe('defaultBitmapHitTestHandler', () => {
|
|
25
25
|
it('returns true when point is within local bounds', () => {
|
|
26
|
-
const obj =
|
|
26
|
+
const obj = makeNode2D();
|
|
27
27
|
expect(defaultBitmapHitTestHandler(obj, 50, 50)).toBe(true);
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
it('returns false when point is outside local bounds', () => {
|
|
31
|
-
const obj =
|
|
31
|
+
const obj = makeNode2D();
|
|
32
32
|
expect(defaultBitmapHitTestHandler(obj, 200, 200)).toBe(false);
|
|
33
33
|
});
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
describe('defaultDisplayObjectHitTestHandler', () => {
|
|
37
|
-
it('always returns false — plain display objects have no hit geometry', () => {
|
|
38
|
-
const obj = makeDisplayObject();
|
|
39
|
-
expect(defaultDisplayObjectHitTestHandler(obj, 50, 50)).toBe(false);
|
|
40
|
-
expect(defaultDisplayObjectHitTestHandler(obj, 0, 0)).toBe(false);
|
|
41
|
-
expect(defaultDisplayObjectHitTestHandler(obj, 200, 200)).toBe(false);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
36
|
describe('defaultHtmlViewHitTestHandler', () => {
|
|
46
37
|
it('always returns false — browser manages HtmlView hit testing', () => {
|
|
47
|
-
const obj =
|
|
38
|
+
const obj = makeNode2D();
|
|
48
39
|
expect(defaultHtmlViewHitTestHandler(obj, 50, 50)).toBe(false);
|
|
49
40
|
});
|
|
50
41
|
});
|
|
51
42
|
|
|
52
43
|
describe('defaultMovieClipHitTestHandler', () => {
|
|
53
44
|
it('always returns false — containers have no self hit area', () => {
|
|
54
|
-
const obj =
|
|
45
|
+
const obj = makeNode2D();
|
|
55
46
|
expect(defaultMovieClipHitTestHandler(obj, 50, 50)).toBe(false);
|
|
56
47
|
});
|
|
57
48
|
});
|
|
58
49
|
|
|
50
|
+
describe('defaultNode2DHitTestHandler', () => {
|
|
51
|
+
it('always returns false — plain display objects have no hit geometry', () => {
|
|
52
|
+
const obj = makeNode2D();
|
|
53
|
+
expect(defaultNode2DHitTestHandler(obj, 50, 50)).toBe(false);
|
|
54
|
+
expect(defaultNode2DHitTestHandler(obj, 0, 0)).toBe(false);
|
|
55
|
+
expect(defaultNode2DHitTestHandler(obj, 200, 200)).toBe(false);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
59
|
describe('defaultRenderViewHitTestHandler', () => {
|
|
60
60
|
it('returns true when point is within local bounds', () => {
|
|
61
|
-
const obj =
|
|
61
|
+
const obj = makeNode2D();
|
|
62
62
|
expect(defaultRenderViewHitTestHandler(obj, 50, 50)).toBe(true);
|
|
63
63
|
});
|
|
64
64
|
|
|
65
65
|
it('returns false when point is outside local bounds', () => {
|
|
66
|
-
const obj =
|
|
66
|
+
const obj = makeNode2D();
|
|
67
67
|
expect(defaultRenderViewHitTestHandler(obj, 200, 200)).toBe(false);
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
70
|
|
|
71
71
|
describe('defaultRichTextHitTestHandler', () => {
|
|
72
72
|
it('returns true when point is within local bounds', () => {
|
|
73
|
-
const obj =
|
|
73
|
+
const obj = makeNode2D();
|
|
74
74
|
expect(defaultRichTextHitTestHandler(obj, 50, 50)).toBe(true);
|
|
75
75
|
});
|
|
76
76
|
|
|
77
77
|
it('returns false when point is outside local bounds', () => {
|
|
78
|
-
const obj =
|
|
78
|
+
const obj = makeNode2D();
|
|
79
79
|
expect(defaultRichTextHitTestHandler(obj, 200, 200)).toBe(false);
|
|
80
80
|
});
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
describe('defaultShapeHitTestHandler', () => {
|
|
84
84
|
it('returns true when point is within local bounds', () => {
|
|
85
|
-
const obj =
|
|
85
|
+
const obj = makeNode2D();
|
|
86
86
|
expect(defaultShapeHitTestHandler(obj, 50, 50)).toBe(true);
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
it('returns false when point is outside local bounds', () => {
|
|
90
|
-
const obj =
|
|
90
|
+
const obj = makeNode2D();
|
|
91
91
|
expect(defaultShapeHitTestHandler(obj, 200, 200)).toBe(false);
|
|
92
92
|
});
|
|
93
93
|
});
|
|
94
94
|
|
|
95
95
|
describe('defaultTextHitTestHandler', () => {
|
|
96
96
|
it('returns true when point is within local bounds', () => {
|
|
97
|
-
const obj =
|
|
97
|
+
const obj = makeNode2D();
|
|
98
98
|
expect(defaultTextHitTestHandler(obj, 50, 50)).toBe(true);
|
|
99
99
|
});
|
|
100
100
|
|
|
101
101
|
it('returns false when point is outside local bounds', () => {
|
|
102
|
-
const obj =
|
|
102
|
+
const obj = makeNode2D();
|
|
103
103
|
expect(defaultTextHitTestHandler(obj, 200, 200)).toBe(false);
|
|
104
104
|
});
|
|
105
105
|
});
|
|
106
106
|
|
|
107
107
|
describe('defaultTextInputHitTestHandler', () => {
|
|
108
108
|
it('returns true when point is within local bounds', () => {
|
|
109
|
-
const obj =
|
|
109
|
+
const obj = makeNode2D();
|
|
110
110
|
expect(defaultTextInputHitTestHandler(obj, 50, 50)).toBe(true);
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
it('returns false when point is outside local bounds', () => {
|
|
114
|
-
const obj =
|
|
114
|
+
const obj = makeNode2D();
|
|
115
115
|
expect(defaultTextInputHitTestHandler(obj, 200, 200)).toBe(false);
|
|
116
116
|
});
|
|
117
117
|
});
|
|
118
118
|
|
|
119
119
|
describe('defaultVideoHitTestHandler', () => {
|
|
120
120
|
it('returns true when point is within local bounds', () => {
|
|
121
|
-
const obj =
|
|
121
|
+
const obj = makeNode2D();
|
|
122
122
|
expect(defaultVideoHitTestHandler(obj, 50, 50)).toBe(true);
|
|
123
123
|
});
|
|
124
124
|
|
|
125
125
|
it('returns false when point is outside local bounds', () => {
|
|
126
|
-
const obj =
|
|
126
|
+
const obj = makeNode2D();
|
|
127
127
|
expect(defaultVideoHitTestHandler(obj, 200, 200)).toBe(false);
|
|
128
128
|
});
|
|
129
129
|
});
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import { createDisplayObject } from '@flighthq/displayobject';
|
|
2
1
|
import { createRectangle, setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { getNodeLocalBoundsRectangle } from '@flighthq/node';
|
|
3
|
+
import { createDisplayObject } from '@flighthq/scene2d';
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
containsDisplayObject,
|
|
7
|
-
getDisplayObjectOverlapRectangle,
|
|
8
|
-
hitTestDisplayObjectsShape,
|
|
9
|
-
} from './displayObjectOverlap';
|
|
5
|
+
import { containsNode2D, getNode2DOverlapRectangle, hitTestNode2DsShape } from './displayObjectOverlap';
|
|
10
6
|
|
|
11
7
|
function makeAt(x: number, y: number, w: number, h: number) {
|
|
12
8
|
const obj = createDisplayObject();
|
|
@@ -14,32 +10,32 @@ function makeAt(x: number, y: number, w: number, h: number) {
|
|
|
14
10
|
return obj;
|
|
15
11
|
}
|
|
16
12
|
|
|
17
|
-
describe('
|
|
13
|
+
describe('containsNode2D', () => {
|
|
18
14
|
it('returns true when inner is fully inside outer', () => {
|
|
19
15
|
const outer = makeAt(0, 0, 100, 100);
|
|
20
16
|
const inner = makeAt(10, 10, 20, 20);
|
|
21
|
-
expect(
|
|
17
|
+
expect(containsNode2D(outer, inner)).toBe(true);
|
|
22
18
|
});
|
|
23
19
|
|
|
24
20
|
it('returns false when inner extends beyond outer', () => {
|
|
25
21
|
const outer = makeAt(0, 0, 50, 50);
|
|
26
22
|
const inner = makeAt(30, 30, 40, 40);
|
|
27
|
-
expect(
|
|
23
|
+
expect(containsNode2D(outer, inner)).toBe(false);
|
|
28
24
|
});
|
|
29
25
|
|
|
30
26
|
it('returns false when inner is completely outside outer', () => {
|
|
31
27
|
const outer = makeAt(0, 0, 50, 50);
|
|
32
28
|
const inner = makeAt(100, 100, 20, 20);
|
|
33
|
-
expect(
|
|
29
|
+
expect(containsNode2D(outer, inner)).toBe(false);
|
|
34
30
|
});
|
|
35
31
|
});
|
|
36
32
|
|
|
37
|
-
describe('
|
|
33
|
+
describe('getNode2DOverlapRectangle', () => {
|
|
38
34
|
it('writes the intersection rectangle into out', () => {
|
|
39
35
|
const a = makeAt(0, 0, 100, 100);
|
|
40
36
|
const b = makeAt(50, 50, 100, 100);
|
|
41
37
|
const out = createRectangle();
|
|
42
|
-
const result =
|
|
38
|
+
const result = getNode2DOverlapRectangle(a, b, out);
|
|
43
39
|
expect(result).toBe(out);
|
|
44
40
|
expect(out.x).toBe(50);
|
|
45
41
|
expect(out.y).toBe(50);
|
|
@@ -51,28 +47,28 @@ describe('getDisplayObjectOverlapRectangle', () => {
|
|
|
51
47
|
const a = makeAt(0, 0, 50, 50);
|
|
52
48
|
const b = makeAt(100, 100, 50, 50);
|
|
53
49
|
const out = createRectangle();
|
|
54
|
-
|
|
50
|
+
getNode2DOverlapRectangle(a, b, out);
|
|
55
51
|
expect(out.width).toBe(0);
|
|
56
52
|
expect(out.height).toBe(0);
|
|
57
53
|
});
|
|
58
54
|
});
|
|
59
55
|
|
|
60
|
-
describe('
|
|
56
|
+
describe('hitTestNode2DsShape', () => {
|
|
61
57
|
it('returns true when centers overlap', () => {
|
|
62
58
|
const a = makeAt(0, 0, 100, 100);
|
|
63
59
|
const b = makeAt(20, 20, 60, 60);
|
|
64
|
-
expect(
|
|
60
|
+
expect(hitTestNode2DsShape(a, b)).toBe(true);
|
|
65
61
|
});
|
|
66
62
|
|
|
67
63
|
it('returns false when AABBs do not intersect', () => {
|
|
68
64
|
const a = makeAt(0, 0, 50, 50);
|
|
69
65
|
const b = makeAt(100, 100, 50, 50);
|
|
70
|
-
expect(
|
|
66
|
+
expect(hitTestNode2DsShape(a, b)).toBe(false);
|
|
71
67
|
});
|
|
72
68
|
|
|
73
69
|
it('returns false when AABBs barely intersect but no center is inside the other', () => {
|
|
74
70
|
const a = makeAt(0, 0, 10, 100);
|
|
75
71
|
const b = makeAt(8, 0, 10, 100);
|
|
76
|
-
expect(
|
|
72
|
+
expect(hitTestNode2DsShape(a, b)).toBe(false);
|
|
77
73
|
});
|
|
78
74
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createDisplayObject } from '@flighthq/displayobject';
|
|
2
1
|
import { addLogSink, createMemoryLogSink, getMemoryLogSinkEntries, removeLogSink } from '@flighthq/log';
|
|
3
2
|
import { addNodeChild } from '@flighthq/node';
|
|
3
|
+
import { createDisplayObject } from '@flighthq/scene2d';
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
disableInteractionGuards,
|
package/src/focusManager.test.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createDisplayObject } from '@flighthq/displayobject';
|
|
2
1
|
import { setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { addNodeChild, getNodeLocalBoundsRectangle, invalidateNodeLocalTransform } from '@flighthq/node';
|
|
3
|
+
import { createDisplayObject } from '@flighthq/scene2d';
|
|
4
4
|
import { connectSignal, createSignal, emitSignal } from '@flighthq/signals';
|
|
5
|
-
import type {
|
|
5
|
+
import type { Node2D, FocusEventData, InputKeyboardData } from '@flighthq/types';
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
clearFocus,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
import { enableInteractionSignals } from './interactionManager';
|
|
20
20
|
import { setNodeFocusable, setNodeTabIndex } from './nodeInteractionState';
|
|
21
21
|
|
|
22
|
-
function focusable(tabIndex: number = -1):
|
|
22
|
+
function focusable(tabIndex: number = -1): Node2D {
|
|
23
23
|
const node = createDisplayObject();
|
|
24
24
|
setNodeFocusable(node, true);
|
|
25
25
|
if (tabIndex !== -1) setNodeTabIndex(node, tabIndex);
|
|
@@ -27,7 +27,7 @@ function focusable(tabIndex: number = -1): DisplayObject {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// A focusable node positioned in world space, so directional navigation can compare bounds centers.
|
|
30
|
-
function placed(x: number, y: number):
|
|
30
|
+
function placed(x: number, y: number): Node2D {
|
|
31
31
|
const node = focusable();
|
|
32
32
|
node.x = x;
|
|
33
33
|
node.y = y;
|
|
@@ -58,7 +58,7 @@ function keyData(key: string, shiftKey: boolean = false): InputKeyboardData {
|
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
function sceneOf(...nodes: readonly
|
|
61
|
+
function sceneOf(...nodes: readonly Node2D[]): Node2D {
|
|
62
62
|
const root = createDisplayObject();
|
|
63
63
|
for (const node of nodes) addNodeChild(root, node);
|
|
64
64
|
return root;
|
package/src/hitTests.test.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createDisplayObject, createDisplayObjectGeneric, getDisplayObjectRuntime } from '@flighthq/displayobject';
|
|
2
1
|
import { createRectangle, setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { addNodeChild, getNodeLocalBoundsRectangle, invalidateNodeLocalTransform } from '@flighthq/node';
|
|
4
3
|
import { appendPathRectangle, createPath } from '@flighthq/path';
|
|
5
|
-
import
|
|
4
|
+
import { createDisplayObject, createNode2D, getNode2DRuntime } from '@flighthq/scene2d';
|
|
5
|
+
import type { Node2D, Node2DRuntime, HitTestResult, NodeAny } from '@flighthq/types';
|
|
6
6
|
import { DisplayObjectKind } from '@flighthq/types';
|
|
7
7
|
|
|
8
8
|
import {
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
findGraphHitTargetPrecise,
|
|
12
12
|
findGraphHitTargets,
|
|
13
13
|
findGraphHitTargetsPrecise,
|
|
14
|
-
|
|
14
|
+
hitTestNode2Ds,
|
|
15
15
|
hitTestGraphLocalBounds,
|
|
16
16
|
hitTestGraphPoint,
|
|
17
17
|
hitTestGraphPointPrecise,
|
|
@@ -26,14 +26,14 @@ function boundsPrecise(source: NodeAny, x: number, y: number): number {
|
|
|
26
26
|
return hitTestGraphLocalBounds(source, x, y) ? 0 : -1;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
function boundsObject(w: number, h: number):
|
|
29
|
+
function boundsObject(w: number, h: number): Node2D {
|
|
30
30
|
const obj = createDisplayObject();
|
|
31
31
|
setRectangle(getNodeLocalBoundsRectangle(obj), 0, 0, w, h);
|
|
32
32
|
setNodeHitTestEnabled(obj, true);
|
|
33
33
|
return obj;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
function emptyResult(node:
|
|
36
|
+
function emptyResult(node: Node2D): HitTestResult {
|
|
37
37
|
return { localX: 0, localY: 0, node, subIndex: -2 };
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -44,7 +44,7 @@ beforeAll(() => {
|
|
|
44
44
|
describe('describeGraphHit', () => {
|
|
45
45
|
it('fills node, local coordinates, and the sub-index from the kind exact provider', () => {
|
|
46
46
|
const kind = 'DescribeKind';
|
|
47
|
-
const node =
|
|
47
|
+
const node = createNode2D(kind);
|
|
48
48
|
node.x = 40;
|
|
49
49
|
node.y = 40;
|
|
50
50
|
invalidateNodeLocalTransform(node);
|
|
@@ -119,7 +119,7 @@ describe('findGraphHitTarget', () => {
|
|
|
119
119
|
expect(findGraphHitTarget(pathObj, 40, 40)).toBeNull();
|
|
120
120
|
|
|
121
121
|
const proxyOwner = createDisplayObject();
|
|
122
|
-
const proxy =
|
|
122
|
+
const proxy = createNode2D(DisplayObjectKind);
|
|
123
123
|
setRectangle(getNodeLocalBoundsRectangle(proxy), 0, 0, 20, 20);
|
|
124
124
|
setNodeHitTestEnabled(proxyOwner, true);
|
|
125
125
|
setNodeHitArea(proxyOwner, proxy);
|
|
@@ -131,7 +131,7 @@ describe('findGraphHitTarget', () => {
|
|
|
131
131
|
describe('findGraphHitTargetPrecise', () => {
|
|
132
132
|
it('uses the kind exact provider, so a bbox hit off the real geometry misses', () => {
|
|
133
133
|
const kind = 'PreciseFirstKind';
|
|
134
|
-
const node =
|
|
134
|
+
const node = createNode2D(kind);
|
|
135
135
|
setRectangle(getNodeLocalBoundsRectangle(node), 0, 0, 100, 100);
|
|
136
136
|
setNodeHitTestEnabled(node, true);
|
|
137
137
|
// Exact provider only accepts the left half.
|
|
@@ -162,7 +162,7 @@ describe('findGraphHitTargets', () => {
|
|
|
162
162
|
|
|
163
163
|
it('clears the out array and returns it', () => {
|
|
164
164
|
const obj = boundsObject(100, 100);
|
|
165
|
-
const out:
|
|
165
|
+
const out: Node2D[] = [createDisplayObject()];
|
|
166
166
|
const result = findGraphHitTargets(obj, 50, 50, out);
|
|
167
167
|
expect(result).toBe(out);
|
|
168
168
|
expect(out).toEqual([obj]);
|
|
@@ -175,7 +175,7 @@ describe('findGraphHitTargetsPrecise', () => {
|
|
|
175
175
|
registerHitTest(kind, hitTestGraphLocalBounds);
|
|
176
176
|
registerHitTestPrecise(kind, boundsPrecise);
|
|
177
177
|
const root = createDisplayObject();
|
|
178
|
-
const a =
|
|
178
|
+
const a = createNode2D(kind);
|
|
179
179
|
setRectangle(getNodeLocalBoundsRectangle(a), 0, 0, 100, 100);
|
|
180
180
|
setNodeHitTestEnabled(a, true);
|
|
181
181
|
addNodeChild(root, a);
|
|
@@ -184,55 +184,6 @@ describe('findGraphHitTargetsPrecise', () => {
|
|
|
184
184
|
});
|
|
185
185
|
});
|
|
186
186
|
|
|
187
|
-
describe('hitTestDisplayObjects', () => {
|
|
188
|
-
let a: DisplayObject;
|
|
189
|
-
let b: DisplayObject;
|
|
190
|
-
|
|
191
|
-
beforeEach(() => {
|
|
192
|
-
a = createDisplayObject();
|
|
193
|
-
b = createDisplayObject();
|
|
194
|
-
addNodeChild(createDisplayObject(), a);
|
|
195
|
-
addNodeChild(createDisplayObject(), b);
|
|
196
|
-
setRectangle(getNodeLocalBoundsRectangle(a), 0, 0, 10, 10);
|
|
197
|
-
setRectangle(getNodeLocalBoundsRectangle(b), 0, 0, 10, 10);
|
|
198
|
-
a.x = 0;
|
|
199
|
-
a.y = 0;
|
|
200
|
-
b.x = 5;
|
|
201
|
-
b.y = 5;
|
|
202
|
-
a.scaleX = a.scaleY = 1;
|
|
203
|
-
b.scaleX = b.scaleY = 1;
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
it('returns true when bounds intersect', () => {
|
|
207
|
-
expect(hitTestDisplayObjects(a, b)).toBe(true);
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
it('returns false when bounds do not intersect', () => {
|
|
211
|
-
b.x = 20;
|
|
212
|
-
b.y = 20;
|
|
213
|
-
invalidateNodeLocalTransform(b);
|
|
214
|
-
expect(hitTestDisplayObjects(a, b)).toBe(false);
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
it('returns false if either object has no parent', () => {
|
|
218
|
-
(getDisplayObjectRuntime(b) as DisplayObjectRuntime).parent = null;
|
|
219
|
-
expect(hitTestDisplayObjects(a, b)).toBe(false);
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
it('includes child bounds when a child extends beyond the object local bounds', () => {
|
|
223
|
-
const child = createDisplayObject();
|
|
224
|
-
child.x = 90;
|
|
225
|
-
child.y = 90;
|
|
226
|
-
invalidateNodeLocalTransform(child);
|
|
227
|
-
setRectangle(getNodeLocalBoundsRectangle(child), 0, 0, 20, 20);
|
|
228
|
-
addNodeChild(a, child);
|
|
229
|
-
b.x = 100;
|
|
230
|
-
b.y = 100;
|
|
231
|
-
invalidateNodeLocalTransform(b);
|
|
232
|
-
expect(hitTestDisplayObjects(a, b)).toBe(true);
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
|
|
236
187
|
describe('hitTestGraphLocalBounds', () => {
|
|
237
188
|
it('returns whether a world-space point is inside local bounds', () => {
|
|
238
189
|
const obj = createDisplayObject();
|
|
@@ -243,7 +194,7 @@ describe('hitTestGraphLocalBounds', () => {
|
|
|
243
194
|
});
|
|
244
195
|
|
|
245
196
|
describe('hitTestGraphPoint', () => {
|
|
246
|
-
let obj:
|
|
197
|
+
let obj: Node2D;
|
|
247
198
|
|
|
248
199
|
beforeEach(() => {
|
|
249
200
|
obj = boundsObject(100, 100);
|
|
@@ -284,7 +235,7 @@ describe('hitTestGraphPoint', () => {
|
|
|
284
235
|
describe('hitTestGraphPointPrecise', () => {
|
|
285
236
|
it('uses exact geometry, so a bbox hit off the real geometry misses', () => {
|
|
286
237
|
const kind = 'PreciseAnyKind';
|
|
287
|
-
const node =
|
|
238
|
+
const node = createNode2D(kind);
|
|
288
239
|
setRectangle(getNodeLocalBoundsRectangle(node), 0, 0, 100, 100);
|
|
289
240
|
setNodeHitTestEnabled(node, true);
|
|
290
241
|
registerHitTestPrecise(kind, (s, x, y) => (hitTestGraphLocalBounds(s, x, y) && x < 50 ? 0 : -1));
|
|
@@ -293,6 +244,55 @@ describe('hitTestGraphPointPrecise', () => {
|
|
|
293
244
|
});
|
|
294
245
|
});
|
|
295
246
|
|
|
247
|
+
describe('hitTestNode2Ds', () => {
|
|
248
|
+
let a: Node2D;
|
|
249
|
+
let b: Node2D;
|
|
250
|
+
|
|
251
|
+
beforeEach(() => {
|
|
252
|
+
a = createDisplayObject();
|
|
253
|
+
b = createDisplayObject();
|
|
254
|
+
addNodeChild(createDisplayObject(), a);
|
|
255
|
+
addNodeChild(createDisplayObject(), b);
|
|
256
|
+
setRectangle(getNodeLocalBoundsRectangle(a), 0, 0, 10, 10);
|
|
257
|
+
setRectangle(getNodeLocalBoundsRectangle(b), 0, 0, 10, 10);
|
|
258
|
+
a.x = 0;
|
|
259
|
+
a.y = 0;
|
|
260
|
+
b.x = 5;
|
|
261
|
+
b.y = 5;
|
|
262
|
+
a.scaleX = a.scaleY = 1;
|
|
263
|
+
b.scaleX = b.scaleY = 1;
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
it('returns true when bounds intersect', () => {
|
|
267
|
+
expect(hitTestNode2Ds(a, b)).toBe(true);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it('returns false when bounds do not intersect', () => {
|
|
271
|
+
b.x = 20;
|
|
272
|
+
b.y = 20;
|
|
273
|
+
invalidateNodeLocalTransform(b);
|
|
274
|
+
expect(hitTestNode2Ds(a, b)).toBe(false);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it('returns false if either object has no parent', () => {
|
|
278
|
+
(getNode2DRuntime(b) as Node2DRuntime).parent = null;
|
|
279
|
+
expect(hitTestNode2Ds(a, b)).toBe(false);
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
it('includes child bounds when a child extends beyond the object local bounds', () => {
|
|
283
|
+
const child = createDisplayObject();
|
|
284
|
+
child.x = 90;
|
|
285
|
+
child.y = 90;
|
|
286
|
+
invalidateNodeLocalTransform(child);
|
|
287
|
+
setRectangle(getNodeLocalBoundsRectangle(child), 0, 0, 20, 20);
|
|
288
|
+
addNodeChild(a, child);
|
|
289
|
+
b.x = 100;
|
|
290
|
+
b.y = 100;
|
|
291
|
+
invalidateNodeLocalTransform(b);
|
|
292
|
+
expect(hitTestNode2Ds(a, b)).toBe(true);
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
|
|
296
296
|
describe('hitTestNodeRegion', () => {
|
|
297
297
|
it('tests a node kind geometry, ignoring eligibility and children', () => {
|
|
298
298
|
const obj = createDisplayObject();
|
|
@@ -310,7 +310,7 @@ describe('hitTestNodeRegion', () => {
|
|
|
310
310
|
|
|
311
311
|
it('uses the exact provider when precise', () => {
|
|
312
312
|
const kind = 'RegionPreciseKind';
|
|
313
|
-
const node =
|
|
313
|
+
const node = createNode2D(kind);
|
|
314
314
|
setRectangle(getNodeLocalBoundsRectangle(node), 0, 0, 100, 100);
|
|
315
315
|
registerHitTestPrecise(kind, (s, x, y) => (hitTestGraphLocalBounds(s, x, y) && x < 50 ? 0 : -1));
|
|
316
316
|
expect(hitTestNodeRegion(node, 25, 50, true)).toBe(true);
|
|
@@ -322,7 +322,7 @@ describe('registerHitTest', () => {
|
|
|
322
322
|
it('registers a coarse handler that hitTestGraphPoint will use', () => {
|
|
323
323
|
const kind = 'RegisterTest';
|
|
324
324
|
registerHitTest(kind, () => true);
|
|
325
|
-
const node =
|
|
325
|
+
const node = createNode2D(kind);
|
|
326
326
|
setNodeHitTestEnabled(node, true);
|
|
327
327
|
expect(hitTestGraphPoint(node, 0, 0)).toBe(true);
|
|
328
328
|
});
|
|
@@ -333,7 +333,7 @@ describe('registerHitTestPrecise', () => {
|
|
|
333
333
|
const kind = 'RegisterPreciseTest';
|
|
334
334
|
registerHitTest(kind, () => true);
|
|
335
335
|
registerHitTestPrecise(kind, () => 3);
|
|
336
|
-
const node =
|
|
336
|
+
const node = createNode2D(kind);
|
|
337
337
|
setNodeHitTestEnabled(node, true);
|
|
338
338
|
expect(findGraphHitTargetPrecise(node, 0, 0)).toBe(node);
|
|
339
339
|
const out = emptyResult(node);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createDisplayObject } from '@flighthq/displayobject';
|
|
2
1
|
import { setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { addNodeChild, createNode, getNodeLocalBoundsRectangle, invalidateNodeLocalTransform } from '@flighthq/node';
|
|
3
|
+
import { createDisplayObject } from '@flighthq/scene2d';
|
|
4
4
|
import { connectSignal, createSignal, emitSignal } from '@flighthq/signals';
|
|
5
5
|
import type { Cursor, InputKeyboardData, InputPointerData, InputSignals } from '@flighthq/types';
|
|
6
6
|
import { DisplayObjectKind } from '@flighthq/types';
|
|
@@ -35,7 +35,7 @@ beforeAll(() => {
|
|
|
35
35
|
|
|
36
36
|
describe('captureInteractionPointer', () => {
|
|
37
37
|
it('routes pointer events to the captured target', () => {
|
|
38
|
-
const { child, manager } =
|
|
38
|
+
const { child, manager } = createHitScene3D();
|
|
39
39
|
let fired = 0;
|
|
40
40
|
connectSignal(enableInteractionSignals(child).onPointerMove, () => fired++);
|
|
41
41
|
|
|
@@ -48,7 +48,7 @@ describe('captureInteractionPointer', () => {
|
|
|
48
48
|
describe('connectInputToInteraction', () => {
|
|
49
49
|
it('routes normalized input signals into interaction dispatch', () => {
|
|
50
50
|
const input = createInputSource();
|
|
51
|
-
const { child, manager } =
|
|
51
|
+
const { child, manager } = createHitScene3D();
|
|
52
52
|
let fired = 0;
|
|
53
53
|
connectSignal(enableInteractionSignals(child).onPointerDown, () => fired++);
|
|
54
54
|
|
|
@@ -199,7 +199,7 @@ describe('disconnectInteractionSignal', () => {
|
|
|
199
199
|
|
|
200
200
|
describe('dispatchInteractionContextMenu', () => {
|
|
201
201
|
it('fires onContextMenu on a hit target', () => {
|
|
202
|
-
const { child, manager } =
|
|
202
|
+
const { child, manager } = createHitScene3D();
|
|
203
203
|
let fired = 0;
|
|
204
204
|
connectSignal(enableInteractionSignals(child).onContextMenu, () => fired++);
|
|
205
205
|
|
|
@@ -238,7 +238,7 @@ describe('dispatchInteractionKeyUp', () => {
|
|
|
238
238
|
|
|
239
239
|
describe('dispatchInteractionPointerCancel', () => {
|
|
240
240
|
it('fires onPointerCancel on the active pointer target', () => {
|
|
241
|
-
const { child, manager } =
|
|
241
|
+
const { child, manager } = createHitScene3D();
|
|
242
242
|
let fired = 0;
|
|
243
243
|
connectSignal(enableInteractionSignals(child).onPointerCancel, () => fired++);
|
|
244
244
|
|
|
@@ -248,7 +248,7 @@ describe('dispatchInteractionPointerCancel', () => {
|
|
|
248
248
|
});
|
|
249
249
|
|
|
250
250
|
it('clears pointer capture', () => {
|
|
251
|
-
const { child, manager } =
|
|
251
|
+
const { child, manager } = createHitScene3D();
|
|
252
252
|
let fired = 0;
|
|
253
253
|
connectSignal(enableInteractionSignals(child).onPointerCancel, () => fired++);
|
|
254
254
|
connectSignal(enableInteractionSignals(child).onPointerMove, () => fired++);
|
|
@@ -419,7 +419,7 @@ describe('dispatchInteractionPointerDown', () => {
|
|
|
419
419
|
});
|
|
420
420
|
|
|
421
421
|
it('tracks a click target when only onClick is connected', () => {
|
|
422
|
-
const { child, manager } =
|
|
422
|
+
const { child, manager } = createHitScene3D();
|
|
423
423
|
let fired = 0;
|
|
424
424
|
connectSignal(enableInteractionSignals(child).onClick, () => fired++);
|
|
425
425
|
|
|
@@ -431,7 +431,7 @@ describe('dispatchInteractionPointerDown', () => {
|
|
|
431
431
|
|
|
432
432
|
describe('dispatchInteractionPointerMove', () => {
|
|
433
433
|
it('fires onPointerMove on a hit target', () => {
|
|
434
|
-
const { child, manager } =
|
|
434
|
+
const { child, manager } = createHitScene3D();
|
|
435
435
|
let fired = 0;
|
|
436
436
|
connectSignal(enableInteractionSignals(child).onPointerMove, () => fired++);
|
|
437
437
|
|
|
@@ -457,7 +457,7 @@ describe('dispatchInteractionPointerMove', () => {
|
|
|
457
457
|
});
|
|
458
458
|
|
|
459
459
|
it('fires over and roll over when entering a target', () => {
|
|
460
|
-
const { child, manager } =
|
|
460
|
+
const { child, manager } = createHitScene3D();
|
|
461
461
|
const order: string[] = [];
|
|
462
462
|
const signals = enableInteractionSignals(child);
|
|
463
463
|
connectSignal(signals.onPointerOver, () => order.push('over'));
|
|
@@ -468,7 +468,7 @@ describe('dispatchInteractionPointerMove', () => {
|
|
|
468
468
|
});
|
|
469
469
|
|
|
470
470
|
it('fires out and roll out when leaving a target', () => {
|
|
471
|
-
const { child, manager } =
|
|
471
|
+
const { child, manager } = createHitScene3D();
|
|
472
472
|
const order: string[] = [];
|
|
473
473
|
const signals = enableInteractionSignals(child);
|
|
474
474
|
connectSignal(signals.onPointerOut, () => order.push('out'));
|
|
@@ -482,7 +482,7 @@ describe('dispatchInteractionPointerMove', () => {
|
|
|
482
482
|
|
|
483
483
|
describe('dispatchInteractionPointerUp', () => {
|
|
484
484
|
it('fires onPointerUp on a hit target', () => {
|
|
485
|
-
const { child, manager } =
|
|
485
|
+
const { child, manager } = createHitScene3D();
|
|
486
486
|
let fired = 0;
|
|
487
487
|
connectSignal(enableInteractionSignals(child).onPointerUp, () => fired++);
|
|
488
488
|
|
|
@@ -491,7 +491,7 @@ describe('dispatchInteractionPointerUp', () => {
|
|
|
491
491
|
});
|
|
492
492
|
|
|
493
493
|
it('fires onClick after down and up on the same target', () => {
|
|
494
|
-
const { child, manager } =
|
|
494
|
+
const { child, manager } = createHitScene3D();
|
|
495
495
|
let fired = 0;
|
|
496
496
|
connectSignal(enableInteractionSignals(child).onClick, () => fired++);
|
|
497
497
|
|
|
@@ -501,7 +501,7 @@ describe('dispatchInteractionPointerUp', () => {
|
|
|
501
501
|
});
|
|
502
502
|
|
|
503
503
|
it('fires onDoubleClick for two clicks within the manager delay', () => {
|
|
504
|
-
const { child, manager } =
|
|
504
|
+
const { child, manager } = createHitScene3D();
|
|
505
505
|
let fired = 0;
|
|
506
506
|
connectSignal(enableInteractionSignals(child).onDoubleClick, () => fired++);
|
|
507
507
|
|
|
@@ -513,7 +513,7 @@ describe('dispatchInteractionPointerUp', () => {
|
|
|
513
513
|
});
|
|
514
514
|
|
|
515
515
|
it('tracks double clicks independently by pointer id', () => {
|
|
516
|
-
const { child, manager } =
|
|
516
|
+
const { child, manager } = createHitScene3D();
|
|
517
517
|
let fired = 0;
|
|
518
518
|
connectSignal(enableInteractionSignals(child).onDoubleClick, () => fired++);
|
|
519
519
|
|
|
@@ -527,7 +527,7 @@ describe('dispatchInteractionPointerUp', () => {
|
|
|
527
527
|
});
|
|
528
528
|
|
|
529
529
|
it('fires onReleaseOutside on the original down target', () => {
|
|
530
|
-
const { child, manager } =
|
|
530
|
+
const { child, manager } = createHitScene3D();
|
|
531
531
|
let fired = 0;
|
|
532
532
|
connectSignal(enableInteractionSignals(child).onReleaseOutside, () => fired++);
|
|
533
533
|
|
|
@@ -539,7 +539,7 @@ describe('dispatchInteractionPointerUp', () => {
|
|
|
539
539
|
|
|
540
540
|
describe('dispatchInteractionWheel', () => {
|
|
541
541
|
it('fires onWheel with delta values', () => {
|
|
542
|
-
const { child, manager } =
|
|
542
|
+
const { child, manager } = createHitScene3D();
|
|
543
543
|
let receivedDeltaY = 0;
|
|
544
544
|
connectSignal(enableInteractionSignals(child).onWheel, (data) => {
|
|
545
545
|
receivedDeltaY = data.deltaY;
|
|
@@ -585,7 +585,7 @@ describe('getInteractionSignals', () => {
|
|
|
585
585
|
|
|
586
586
|
describe('releaseInteractionPointer', () => {
|
|
587
587
|
it('stops routing pointer events to the captured target', () => {
|
|
588
|
-
const { child, manager } =
|
|
588
|
+
const { child, manager } = createHitScene3D();
|
|
589
589
|
let fired = 0;
|
|
590
590
|
connectSignal(enableInteractionSignals(child).onPointerMove, () => fired++);
|
|
591
591
|
|
|
@@ -612,7 +612,7 @@ describe('setInteractionConnectGuard', () => {
|
|
|
612
612
|
});
|
|
613
613
|
});
|
|
614
614
|
|
|
615
|
-
function
|
|
615
|
+
function createHitScene3D() {
|
|
616
616
|
const root = createDisplayObject();
|
|
617
617
|
const child = createDisplayObject();
|
|
618
618
|
setRectangle(getNodeLocalBoundsRectangle(child), 0, 0, 100, 100);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createDisplayObject, createDisplayObjectGeneric } from '@flighthq/displayobject';
|
|
2
1
|
import { setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { addNodeChild, getNodeLocalBoundsRectangle, invalidateNodeLocalTransform } from '@flighthq/node';
|
|
3
|
+
import { createDisplayObject, createNode2D } from '@flighthq/scene2d';
|
|
4
4
|
import { createSpatialIndex, createUniformGridSpatialBackend } from '@flighthq/spatial';
|
|
5
5
|
import { DisplayObjectKind } from '@flighthq/types';
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ import { findSpatialInteractionTarget, refreshInteractionSpatialIndex } from './
|
|
|
10
10
|
import { setNodeHitArea, setNodeHitTestEnabled } from './nodeInteractionState';
|
|
11
11
|
|
|
12
12
|
function candidate(x: number, y: number, w: number, h: number) {
|
|
13
|
-
const obj =
|
|
13
|
+
const obj = createNode2D(DisplayObjectKind);
|
|
14
14
|
obj.x = x;
|
|
15
15
|
obj.y = y;
|
|
16
16
|
invalidateNodeLocalTransform(obj);
|
|
@@ -19,7 +19,7 @@ function candidate(x: number, y: number, w: number, h: number) {
|
|
|
19
19
|
return obj;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
function
|
|
22
|
+
function managedScene3D() {
|
|
23
23
|
registerHitTest(DisplayObjectKind, hitTestGraphLocalBounds);
|
|
24
24
|
const root = createDisplayObject();
|
|
25
25
|
const index = createSpatialIndex(createUniformGridSpatialBackend(64));
|
|
@@ -29,7 +29,7 @@ function managedScene() {
|
|
|
29
29
|
|
|
30
30
|
describe('findSpatialInteractionTarget', () => {
|
|
31
31
|
it('returns the candidate whose region contains the point', () => {
|
|
32
|
-
const { manager, root } =
|
|
32
|
+
const { manager, root } = managedScene3D();
|
|
33
33
|
const a = candidate(0, 0, 50, 50);
|
|
34
34
|
const b = candidate(200, 200, 50, 50);
|
|
35
35
|
addNodeChild(root, a);
|
|
@@ -42,7 +42,7 @@ describe('findSpatialInteractionTarget', () => {
|
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
it('returns the topmost (last-drawn) candidate when regions overlap', () => {
|
|
45
|
-
const { manager, root } =
|
|
45
|
+
const { manager, root } = managedScene3D();
|
|
46
46
|
const under = candidate(0, 0, 100, 100);
|
|
47
47
|
const over = candidate(0, 0, 100, 100);
|
|
48
48
|
addNodeChild(root, under);
|
|
@@ -53,7 +53,7 @@ describe('findSpatialInteractionTarget', () => {
|
|
|
53
53
|
});
|
|
54
54
|
|
|
55
55
|
it('returns null before the index is refreshed', () => {
|
|
56
|
-
const { manager, root } =
|
|
56
|
+
const { manager, root } = managedScene3D();
|
|
57
57
|
addNodeChild(root, candidate(0, 0, 50, 50));
|
|
58
58
|
expect(findSpatialInteractionTarget(manager, 25, 25)).toBeNull();
|
|
59
59
|
});
|
|
@@ -61,8 +61,8 @@ describe('findSpatialInteractionTarget', () => {
|
|
|
61
61
|
|
|
62
62
|
describe('refreshInteractionSpatialIndex', () => {
|
|
63
63
|
it('indexes only opted-in nodes', () => {
|
|
64
|
-
const { manager, root } =
|
|
65
|
-
const inert =
|
|
64
|
+
const { manager, root } = managedScene3D();
|
|
65
|
+
const inert = createNode2D(DisplayObjectKind);
|
|
66
66
|
setRectangle(getNodeLocalBoundsRectangle(inert), 0, 0, 50, 50);
|
|
67
67
|
addNodeChild(root, inert);
|
|
68
68
|
refreshInteractionSpatialIndex(manager);
|
|
@@ -75,7 +75,7 @@ describe('refreshInteractionSpatialIndex', () => {
|
|
|
75
75
|
});
|
|
76
76
|
|
|
77
77
|
it('indexes an atomic hitArea unit without descending into its children', () => {
|
|
78
|
-
const { manager, root } =
|
|
78
|
+
const { manager, root } = managedScene3D();
|
|
79
79
|
const unit = candidate(0, 0, 100, 100);
|
|
80
80
|
setNodeHitArea(unit, 'bounds');
|
|
81
81
|
const child = candidate(0, 0, 20, 20);
|
|
@@ -88,7 +88,7 @@ describe('refreshInteractionSpatialIndex', () => {
|
|
|
88
88
|
});
|
|
89
89
|
|
|
90
90
|
it('agrees with the linear pick after a transform change is re-synced', () => {
|
|
91
|
-
const { manager, root } =
|
|
91
|
+
const { manager, root } = managedScene3D();
|
|
92
92
|
const a = candidate(0, 0, 50, 50);
|
|
93
93
|
addNodeChild(root, a);
|
|
94
94
|
refreshInteractionSpatialIndex(manager);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createBitmap } from '@flighthq/displayobject';
|
|
2
1
|
import { setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { getNodeLocalBoundsRectangle } from '@flighthq/node';
|
|
3
|
+
import { createBitmap } from '@flighthq/scene2d';
|
|
4
4
|
|
|
5
5
|
import { findGraphHitTargetPrecise } from './hitTests';
|
|
6
6
|
import { setNodeHitTestEnabled } from './nodeInteractionState';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createBitmap, createStage } from '@flighthq/displayobject';
|
|
2
1
|
import { setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { getNodeLocalBoundsRectangle } from '@flighthq/node';
|
|
3
|
+
import { createBitmap, createScene2D } from '@flighthq/scene2d';
|
|
4
4
|
import { createShape } from '@flighthq/shape';
|
|
5
5
|
|
|
6
6
|
import { findGraphHitTarget } from './hitTests';
|
|
@@ -25,7 +25,7 @@ describe('registerDefaultHitTests', () => {
|
|
|
25
25
|
it('containers return null for self hit', () => {
|
|
26
26
|
registerDefaultHitTests();
|
|
27
27
|
|
|
28
|
-
const root =
|
|
28
|
+
const root = createScene2D().root;
|
|
29
29
|
setRectangle(getNodeLocalBoundsRectangle(root), 0, 0, 100, 100);
|
|
30
30
|
expect(findGraphHitTarget(root, 50, 50)).toBeNull();
|
|
31
31
|
});
|
package/src/spatialQuery.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createDisplayObject } from '@flighthq/displayobject';
|
|
2
1
|
import { createRectangle, setRectangle } from '@flighthq/geometry';
|
|
3
2
|
import { addNodeChild, getNodeLocalBoundsRectangle } from '@flighthq/node';
|
|
3
|
+
import { createDisplayObject } from '@flighthq/scene2d';
|
|
4
4
|
|
|
5
5
|
import { hitTestAreaQuery, hitTestAreaQueryCircle } from './spatialQuery';
|
|
6
6
|
|