@flighthq/interaction 0.5.1-next.1069.554a2ac → 0.5.1-next.1201.9b49dee
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/README.md
CHANGED
|
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/interaction`. The `@
|
|
|
13
13
|
This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
|
|
14
14
|
|
|
15
15
|
- [Flight project](https://github.com/flighthq/flight)
|
|
16
|
-
- [Source for @flighthq/interaction@0.5.1-next.
|
|
17
|
-
- [License](https://github.com/flighthq/flight/blob/
|
|
16
|
+
- [Source for @flighthq/interaction@0.5.1-next.1201.9b49dee](https://github.com/flighthq/flight/tree/9b49dee3f22f6b2838c3d237edcc77bca65734f2/packages/interaction)
|
|
17
|
+
- [License](https://github.com/flighthq/flight/blob/9b49dee3f22f6b2838c3d237edcc77bca65734f2/LICENSE.md)
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function registerSpriteHitTest(
|
|
1
|
+
import type { HostBitmapReadbackProvider } from '@flighthq/types/contract';
|
|
2
|
+
export declare function registerSpriteHitTest(hostBitmapReadback: Readonly<HostBitmapReadbackProvider>, alphaThreshold?: number): void;
|
|
3
3
|
//# sourceMappingURL=registerSpriteHitTest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSpriteHitTest.d.ts","sourceRoot":"","sources":["../src/registerSpriteHitTest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,
|
|
1
|
+
{"version":3,"file":"registerSpriteHitTest.d.ts","sourceRoot":"","sources":["../src/registerSpriteHitTest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,0BAA0B,EAM3B,MAAM,0BAA0B,CAAC;AAKlC,wBAAgB,qBAAqB,CACnC,kBAAkB,EAAE,QAAQ,CAAC,0BAA0B,CAAC,EACxD,cAAc,GAAE,MAAU,GACzB,IAAI,CAIN"}
|
|
@@ -3,11 +3,11 @@ import { inverseMatrixTransformPointXY } from '@flighthq/geometry/contract';
|
|
|
3
3
|
import { getNodeWorldMatrix } from '@flighthq/node/contract';
|
|
4
4
|
import { BitmapTextureSourceKind, ImageChannel, ImageTextureSourceKind, SpriteKind } from '@flighthq/types/contract';
|
|
5
5
|
import { hitTestGraphLocalBounds, registerHitTestPrecise } from './hitTests';
|
|
6
|
-
export function registerSpriteHitTest(
|
|
7
|
-
registerHitTestPrecise(SpriteKind, (source, x, y) => hitTestSpriteAlpha(
|
|
6
|
+
export function registerSpriteHitTest(hostBitmapReadback, alphaThreshold = 1) {
|
|
7
|
+
registerHitTestPrecise(SpriteKind, (source, x, y) => hitTestSpriteAlpha(hostBitmapReadback, source, x, y, alphaThreshold));
|
|
8
8
|
}
|
|
9
9
|
// Returns 0 on a hit (opaque pixel, or bounds fallback when pixels are unreadable), -1 on a miss.
|
|
10
|
-
function hitTestSpriteAlpha(
|
|
10
|
+
function hitTestSpriteAlpha(hostBitmapReadback, source, x, y, alphaThreshold) {
|
|
11
11
|
if (!hitTestGraphLocalBounds(source, x, y))
|
|
12
12
|
return -1;
|
|
13
13
|
const sprite = source;
|
|
@@ -17,7 +17,7 @@ function hitTestSpriteAlpha(host, source, x, y, alphaThreshold) {
|
|
|
17
17
|
const image = texture.source;
|
|
18
18
|
if (image === null)
|
|
19
19
|
return 0;
|
|
20
|
-
const bitmap = bitmapForImage(
|
|
20
|
+
const bitmap = bitmapForImage(hostBitmapReadback, image);
|
|
21
21
|
if (bitmap === null)
|
|
22
22
|
return 0;
|
|
23
23
|
inverseMatrixTransformPointXY(bitmapAlphaLocalPoint, getNodeWorldMatrix(source), x, y);
|
|
@@ -27,7 +27,7 @@ function hitTestSpriteAlpha(host, source, x, y, alphaThreshold) {
|
|
|
27
27
|
return -1;
|
|
28
28
|
return getBitmapPixelChannel(bitmap, px, py, ImageChannel.Alpha) >= alphaThreshold ? 0 : -1;
|
|
29
29
|
}
|
|
30
|
-
function bitmapForImage(
|
|
30
|
+
function bitmapForImage(hostBitmapReadback, image) {
|
|
31
31
|
if (image.kind === BitmapTextureSourceKind)
|
|
32
32
|
return image;
|
|
33
33
|
if (image.kind !== ImageTextureSourceKind)
|
|
@@ -36,7 +36,7 @@ function bitmapForImage(host, image) {
|
|
|
36
36
|
const cached = bitmapCache.get(resource);
|
|
37
37
|
if (cached !== undefined)
|
|
38
38
|
return cached;
|
|
39
|
-
const bitmap = captureBitmapFromImageResource(
|
|
39
|
+
const bitmap = captureBitmapFromImageResource(hostBitmapReadback, resource);
|
|
40
40
|
// Cache only successes so an image that is not yet readable is retried later.
|
|
41
41
|
if (bitmap !== null)
|
|
42
42
|
bitmapCache.set(resource, bitmap);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSpriteHitTest.js","sourceRoot":"","sources":["../src/registerSpriteHitTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAU7D,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAErH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,UAAU,qBAAqB,
|
|
1
|
+
{"version":3,"file":"registerSpriteHitTest.js","sourceRoot":"","sources":["../src/registerSpriteHitTest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/interaction",
|
|
3
|
-
"version": "0.5.1-next.
|
|
3
|
+
"version": "0.5.1-next.1201.9b49dee",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,21 +38,21 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/bitmap": "0.5.1-next.
|
|
42
|
-
"@flighthq/clip": "0.5.1-next.
|
|
43
|
-
"@flighthq/entity": "0.5.1-next.
|
|
44
|
-
"@flighthq/geometry": "0.5.1-next.
|
|
45
|
-
"@flighthq/log": "0.5.1-next.
|
|
46
|
-
"@flighthq/node": "0.5.1-next.
|
|
47
|
-
"@flighthq/path": "0.5.1-next.
|
|
48
|
-
"@flighthq/registry": "0.5.1-next.
|
|
49
|
-
"@flighthq/shape": "0.5.1-next.
|
|
50
|
-
"@flighthq/signals": "0.5.1-next.
|
|
51
|
-
"@flighthq/spatial": "0.5.1-next.
|
|
52
|
-
"@flighthq/text": "0.5.1-next.
|
|
53
|
-
"@flighthq/textlayout": "0.5.1-next.
|
|
54
|
-
"@flighthq/tilemap": "0.5.1-next.
|
|
55
|
-
"@flighthq/types": "0.5.1-next.
|
|
41
|
+
"@flighthq/bitmap": "0.5.1-next.1201.9b49dee",
|
|
42
|
+
"@flighthq/clip": "0.5.1-next.1201.9b49dee",
|
|
43
|
+
"@flighthq/entity": "0.5.1-next.1201.9b49dee",
|
|
44
|
+
"@flighthq/geometry": "0.5.1-next.1201.9b49dee",
|
|
45
|
+
"@flighthq/log": "0.5.1-next.1201.9b49dee",
|
|
46
|
+
"@flighthq/node": "0.5.1-next.1201.9b49dee",
|
|
47
|
+
"@flighthq/path": "0.5.1-next.1201.9b49dee",
|
|
48
|
+
"@flighthq/registry": "0.5.1-next.1201.9b49dee",
|
|
49
|
+
"@flighthq/shape": "0.5.1-next.1201.9b49dee",
|
|
50
|
+
"@flighthq/signals": "0.5.1-next.1201.9b49dee",
|
|
51
|
+
"@flighthq/spatial": "0.5.1-next.1201.9b49dee",
|
|
52
|
+
"@flighthq/text": "0.5.1-next.1201.9b49dee",
|
|
53
|
+
"@flighthq/textlayout": "0.5.1-next.1201.9b49dee",
|
|
54
|
+
"@flighthq/tilemap": "0.5.1-next.1201.9b49dee",
|
|
55
|
+
"@flighthq/types": "0.5.1-next.1201.9b49dee"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@flighthq/quadbatch": "*",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { setRectangle } from '@flighthq/geometry/contract';
|
|
2
2
|
import { getNodeLocalBoundsRectangle } from '@flighthq/node/contract';
|
|
3
3
|
import { createSprite } from '@flighthq/scene2d/contract';
|
|
4
|
-
import type {
|
|
4
|
+
import type { HostBitmapReadbackProvider } from '@flighthq/types/contract';
|
|
5
5
|
|
|
6
6
|
import { findGraphHitTargetPrecise } from './hitTests';
|
|
7
7
|
import { setNodeHitTestEnabled } from './nodeInteractionState';
|
|
@@ -9,11 +9,11 @@ import { registerSpriteHitTest } from './registerSpriteHitTest';
|
|
|
9
9
|
|
|
10
10
|
const stubHost = {
|
|
11
11
|
graphics: { bitmapReadback: { readBitmap: () => ({ bitmap: null, reason: 'ok' }) } },
|
|
12
|
-
} as
|
|
12
|
+
} as { readonly graphics: { readonly bitmapReadback: HostBitmapReadbackProvider } };
|
|
13
13
|
|
|
14
14
|
describe('registerSpriteHitTest', () => {
|
|
15
15
|
it('installs a precise Sprite provider with a no-image bounds fallback', () => {
|
|
16
|
-
registerSpriteHitTest(stubHost);
|
|
16
|
+
registerSpriteHitTest(stubHost.graphics.bitmapReadback);
|
|
17
17
|
const bitmap = createSprite();
|
|
18
18
|
setRectangle(getNodeLocalBoundsRectangle(bitmap), 0, 0, 100, 100);
|
|
19
19
|
setNodeHitTestEnabled(bitmap, true);
|