@remix-gg/three 0.1.1 → 0.1.2
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/camera.d.ts +9 -0
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +32 -6
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/input/index.d.ts.map +1 -1
- package/dist/input/index.js +21 -2
- package/dist/platform/index.d.ts +4 -4
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +10 -33
- package/dist/platform/sdk-contract.d.ts +26 -15
- package/dist/platform/sdk-contract.d.ts.map +1 -1
- package/dist/viewport.d.ts +11 -5
- package/dist/viewport.d.ts.map +1 -1
- package/dist/viewport.js +2 -0
- package/package.json +1 -1
package/dist/camera.d.ts
CHANGED
|
@@ -27,6 +27,15 @@ export type PortraitRigOptions = {
|
|
|
27
27
|
* so the design box's height is exactly what `fov` covers at the design aspect.
|
|
28
28
|
*/
|
|
29
29
|
export declare function portraitRig(options?: PortraitRigOptions): CameraRig;
|
|
30
|
+
export type LandscapeRigOptions = PortraitRigOptions;
|
|
31
|
+
/**
|
|
32
|
+
* `portraitRig`'s landscape complement, for desktop-target games on the
|
|
33
|
+
* 1280x720 `LANDSCAPE_DESIGN` box: same frustum math, but a lower, farther
|
|
34
|
+
* camera with a narrower vertical FOV, so a short-and-wide frame composes
|
|
35
|
+
* horizontally instead of stacking depth into a tall column. Not the default —
|
|
36
|
+
* `createGame` still assumes portrait; pass it explicitly as `camera`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function landscapeRig(options?: LandscapeRigOptions): CameraRig;
|
|
30
39
|
export type OrthoRigOptions = {
|
|
31
40
|
/** World units visible vertically across the design box. */
|
|
32
41
|
frustumHeight?: number;
|
package/dist/camera.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAa,kBAAkB,EAAE,iBAAiB,EAAU,OAAO,EAAE,MAAM,OAAO,CAAA;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAE/D;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IAChC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAa,kBAAkB,EAAE,iBAAiB,EAAU,OAAO,EAAE,MAAM,OAAO,CAAA;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAE/D;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IAChC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAoCD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,SAAS,CAMvE;AAED,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,CAAA;AAEpD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAMzE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,SAAS,CA2BjE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,IAAI,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,gBAAqB,GAAG,SAAS,CAuCzF;AAED,qEAAqE;AACrE,KAAK,YAAY,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAA;AAEzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,gBAAqB,GAC7B,IAAI,CA0BN"}
|
package/dist/camera.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { MathUtils, OrthographicCamera, PerspectiveCamera, Sphere, Vector3 } from 'three';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Shared machinery of the fixed perspective rigs: frame the design box's height
|
|
4
|
+
* with exactly `fov` at the design aspect, then let `resize` absorb any other
|
|
5
|
+
* aspect. Orientation lives entirely in the defaults the public rigs pick.
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
const fov = options.fov ??
|
|
8
|
-
const position = options.position ??
|
|
9
|
-
const target = options.lookAt ??
|
|
7
|
+
function perspectiveRig(options, defaults) {
|
|
8
|
+
const fov = options.fov ?? defaults.fov;
|
|
9
|
+
const position = options.position ?? defaults.position;
|
|
10
|
+
const target = options.lookAt ?? defaults.lookAt;
|
|
10
11
|
const camera = new PerspectiveCamera(fov, 1, options.near ?? 0.1, options.far ?? 300);
|
|
11
12
|
camera.position.copy(position);
|
|
12
13
|
camera.lookAt(target);
|
|
@@ -25,6 +26,31 @@ export function portraitRig(options = {}) {
|
|
|
25
26
|
update() { },
|
|
26
27
|
};
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* The default: a perspective camera looking slightly down at the origin, framed
|
|
31
|
+
* so the design box's height is exactly what `fov` covers at the design aspect.
|
|
32
|
+
*/
|
|
33
|
+
export function portraitRig(options = {}) {
|
|
34
|
+
return perspectiveRig(options, {
|
|
35
|
+
fov: 50,
|
|
36
|
+
position: new Vector3(0, 6, 14),
|
|
37
|
+
lookAt: new Vector3(0, 1.5, 0),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* `portraitRig`'s landscape complement, for desktop-target games on the
|
|
42
|
+
* 1280x720 `LANDSCAPE_DESIGN` box: same frustum math, but a lower, farther
|
|
43
|
+
* camera with a narrower vertical FOV, so a short-and-wide frame composes
|
|
44
|
+
* horizontally instead of stacking depth into a tall column. Not the default —
|
|
45
|
+
* `createGame` still assumes portrait; pass it explicitly as `camera`.
|
|
46
|
+
*/
|
|
47
|
+
export function landscapeRig(options = {}) {
|
|
48
|
+
return perspectiveRig(options, {
|
|
49
|
+
fov: 40,
|
|
50
|
+
position: new Vector3(0, 5, 18),
|
|
51
|
+
lookAt: new Vector3(0, 1, 0),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
28
54
|
/** Orthographic rig. Isometric is this rig with `heading: Math.PI / 4`. */
|
|
29
55
|
export function orthoRig(options = {}) {
|
|
30
56
|
const frustumHeight = options.frustumHeight ?? 14;
|
package/dist/index.d.ts
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export { createGame, type RemixGame, type RemixGameOptions } from './game.js';
|
|
12
12
|
export { stepClock, MAX_FRAME_DELTA, type StepResult } from './loop.js';
|
|
13
|
-
export { createViewport, fitFrustum, safeRectOf, DEFAULT_DESIGN, type DesignBox, type FitMode, type FrustumFit, type Rect, type Viewport, } from './viewport.js';
|
|
14
|
-
export { fitBounds, followRig, orthoRig, portraitRig, type CameraRig, type FollowRigOptions, type GameCamera, type OrthoRigOptions, type PortraitRigOptions, } from './camera.js';
|
|
13
|
+
export { createViewport, fitFrustum, safeRectOf, DEFAULT_DESIGN, LANDSCAPE_DESIGN, type DesignBox, type FitMode, type FrustumFit, type Rect, type Viewport, } from './viewport.js';
|
|
14
|
+
export { fitBounds, followRig, landscapeRig, orthoRig, portraitRig, type CameraRig, type FollowRigOptions, type GameCamera, type LandscapeRigOptions, type OrthoRigOptions, type PortraitRigOptions, } from './camera.js';
|
|
15
15
|
export { createGestureState, reduceGestures, DEFAULT_THRESHOLDS, type GestureEvent, type GestureEventMap, type GestureState, type GestureThresholds, type PointerSample, } from './input/gestures.js';
|
|
16
16
|
export type { DragEvent, Input, PinchEvent, Pointer, SwipeDirection, SwipeEvent, TapEvent, } from './input/index.js';
|
|
17
17
|
export { createAssets, type AssetManifest, type Assets } from './assets.js';
|
|
@@ -26,5 +26,5 @@ export { applyLighting, blobShadow, type BlobShadow, type Lighting, type Lightin
|
|
|
26
26
|
export { createHud, type Hud, type HudAnchor, type HudBanner, type HudChip, type HudScore, } from './hud/index.js';
|
|
27
27
|
export { HUD_CSS } from './hud/styles.js';
|
|
28
28
|
export { awaitSdk, createPlatform, type Platform } from './platform/index.js';
|
|
29
|
-
export type { FarcadeSDKGlobal, GameInfo, GameState, HapticFeedbackType, InventoryItem, Player, SafeAreaInset, ShopItem, ViewContext, } from './platform/sdk-contract.js';
|
|
29
|
+
export type { FarcadeSDKGlobal, GameInfo, GamePresentation, GameState, HapticFeedbackType, InventoryItem, Player, PresentationInput, PresentationOrientation, PresentationTarget, SafeAreaInset, ShopItem, ViewContext, } from './platform/sdk-contract.js';
|
|
30
30
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AACvE,OAAO,EACL,cAAc,EACd,UAAU,EACV,UAAU,EACV,cAAc,EACd,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,QAAQ,GACd,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,SAAS,EACT,KAAK,EACL,UAAU,EACV,OAAO,EACP,cAAc,EACd,UAAU,EACV,QAAQ,GACT,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,MAAM,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,OAAO,EACP,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EACL,aAAa,EACb,UAAU,EACV,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,SAAS,EACT,KAAK,GAAG,EACR,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,QAAQ,GACd,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC7E,YAAY,EACV,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,MAAM,EACN,aAAa,EACb,QAAQ,EACR,WAAW,GACZ,MAAM,4BAA4B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export { createGame } from './game.js';
|
|
12
12
|
export { stepClock, MAX_FRAME_DELTA } from './loop.js';
|
|
13
|
-
export { createViewport, fitFrustum, safeRectOf, DEFAULT_DESIGN, } from './viewport.js';
|
|
14
|
-
export { fitBounds, followRig, orthoRig, portraitRig, } from './camera.js';
|
|
13
|
+
export { createViewport, fitFrustum, safeRectOf, DEFAULT_DESIGN, LANDSCAPE_DESIGN, } from './viewport.js';
|
|
14
|
+
export { fitBounds, followRig, landscapeRig, orthoRig, portraitRig, } from './camera.js';
|
|
15
15
|
export { createGestureState, reduceGestures, DEFAULT_THRESHOLDS, } from './input/gestures.js';
|
|
16
16
|
export { createAssets } from './assets.js';
|
|
17
17
|
export { createEscalatingChance, createPityTimer, createShuffleBag, seededRandom, } from './random.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAsB,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EAGb,MAAM,eAAe,CAAA;AAEtB,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAC1C,YAAY,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,GACT,MAAM,eAAe,CAAA;AAEtB;;;;;;GAMG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,EAAE,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IACjG,oFAAoF;IACpF,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,YAAY,EAAE,CAAA;IACpE,8EAA8E;IAC9E,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAA;IAChF,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACxC,CAAA;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,QAAQ,EACf,OAAO,GAAE,YAAiB,GACzB,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAsB,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EAGb,MAAM,eAAe,CAAA;AAEtB,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAC1C,YAAY,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,GACT,MAAM,eAAe,CAAA;AAEtB;;;;;;GAMG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,EAAE,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IACjG,oFAAoF;IACpF,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,YAAY,EAAE,CAAA;IACpE,8EAA8E;IAC9E,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAA;IAChF,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACxC,CAAA;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,QAAQ,EACf,OAAO,GAAE,YAAiB,GACzB,KAAK,CA4IP"}
|
package/dist/input/index.js
CHANGED
|
@@ -28,13 +28,32 @@ export function createInput(canvas, viewport, rig, scene, options = {}) {
|
|
|
28
28
|
viewport.toDesign(event.clientX, event.clientY, design);
|
|
29
29
|
return { id: event.pointerId, x: design.x, y: design.y, time: event.timeStamp, phase };
|
|
30
30
|
}
|
|
31
|
+
function capture(pointerId) {
|
|
32
|
+
try {
|
|
33
|
+
canvas.setPointerCapture?.(pointerId);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Desktop's emulated cross-origin preview recreates the pointer event in
|
|
37
|
+
// the game document. Chromium correctly refuses native capture for that
|
|
38
|
+
// synthetic id, but the preview host already owns the real capture and
|
|
39
|
+
// continues forwarding the stream, so tracking must still begin here.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function releaseCapture(pointerId) {
|
|
43
|
+
try {
|
|
44
|
+
canvas.releasePointerCapture?.(pointerId);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Losing capture is already the requested end state.
|
|
48
|
+
}
|
|
49
|
+
}
|
|
31
50
|
const onDown = (event) => {
|
|
32
51
|
if (!enabled)
|
|
33
52
|
return;
|
|
34
53
|
event.preventDefault();
|
|
35
54
|
// Capture so a finger that slides off the canvas keeps reporting; without
|
|
36
55
|
// it a drag that leaves the edge sticks forever in the "down" state.
|
|
37
|
-
|
|
56
|
+
capture(event.pointerId);
|
|
38
57
|
dispatch(sampleOf(event, 'down'));
|
|
39
58
|
};
|
|
40
59
|
const onMove = (event) => {
|
|
@@ -45,7 +64,7 @@ export function createInput(canvas, viewport, rig, scene, options = {}) {
|
|
|
45
64
|
const onUp = (event) => {
|
|
46
65
|
if (!enabled)
|
|
47
66
|
return;
|
|
48
|
-
|
|
67
|
+
releaseCapture(event.pointerId);
|
|
49
68
|
dispatch(sampleOf(event, 'up'));
|
|
50
69
|
};
|
|
51
70
|
const onCancel = (event) => {
|
package/dist/platform/index.d.ts
CHANGED
|
@@ -29,10 +29,10 @@ export type Platform = {
|
|
|
29
29
|
/**
|
|
30
30
|
* Resolves `window.FarcadeSDK`, rAF-polling until it appears.
|
|
31
31
|
*
|
|
32
|
-
* The
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
32
|
+
* The staged SDK module runs before the authored game module in Desktop, but
|
|
33
|
+
* published hosts may still attach the global asynchronously. Resolve `null`
|
|
34
|
+
* past the deadline rather than rejecting so a game opened as a bare file can
|
|
35
|
+
* still boot.
|
|
36
36
|
*/
|
|
37
37
|
export declare function awaitSdk(timeoutMs?: number): Promise<FarcadeSDKGlobal | null>;
|
|
38
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,4EAA4E;IAC5E,KAAK,IAAI,IAAI,CAAA;IACb,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACjC,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IACvC,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IACtD,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IACpD,MAAM,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACvC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;CAClC,CAAA;AAaD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAc3E;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,4EAA4E;IAC5E,KAAK,IAAI,IAAI,CAAA;IACb,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACjC,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IACvC,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IACtD,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IACpD,MAAM,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACvC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;CAClC,CAAA;AAaD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAc3E;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,QAAQ,CA2GrE"}
|
package/dist/platform/index.js
CHANGED
|
@@ -11,10 +11,10 @@ const STANDALONE_INFO = {
|
|
|
11
11
|
/**
|
|
12
12
|
* Resolves `window.FarcadeSDK`, rAF-polling until it appears.
|
|
13
13
|
*
|
|
14
|
-
* The
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* The staged SDK module runs before the authored game module in Desktop, but
|
|
15
|
+
* published hosts may still attach the global asynchronously. Resolve `null`
|
|
16
|
+
* past the deadline rather than rejecting so a game opened as a bare file can
|
|
17
|
+
* still boot.
|
|
18
18
|
*/
|
|
19
19
|
export function awaitSdk(timeoutMs = 2000) {
|
|
20
20
|
const global = globalThis;
|
|
@@ -75,25 +75,10 @@ export function createPlatform(sdk) {
|
|
|
75
75
|
const handleGameStateUpdated = (data) => {
|
|
76
76
|
state = data ? data.gameState : null;
|
|
77
77
|
};
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
sdk.onPlayAgain(handlePlayAgain);
|
|
83
|
-
else
|
|
84
|
-
sdk.on?.('play_again', handlePlayAgain);
|
|
85
|
-
if (typeof sdk.onToggleMute === 'function')
|
|
86
|
-
sdk.onToggleMute(handleToggleMute);
|
|
87
|
-
else
|
|
88
|
-
sdk.on?.('toggle_mute', handleToggleMute);
|
|
89
|
-
if (typeof sdk.onGameInfo === 'function')
|
|
90
|
-
sdk.onGameInfo(handleGameInfo);
|
|
91
|
-
else
|
|
92
|
-
sdk.on?.('game_info', handleGameInfo);
|
|
93
|
-
if (typeof sdk.onGameStateUpdated === 'function')
|
|
94
|
-
sdk.onGameStateUpdated(handleGameStateUpdated);
|
|
95
|
-
else
|
|
96
|
-
sdk.on?.('game_state_updated', handleGameStateUpdated);
|
|
78
|
+
sdk.onPlayAgain(handlePlayAgain);
|
|
79
|
+
sdk.onToggleMute(handleToggleMute);
|
|
80
|
+
sdk.onGameInfo(handleGameInfo);
|
|
81
|
+
sdk.onGameStateUpdated(handleGameStateUpdated);
|
|
97
82
|
}
|
|
98
83
|
const purchasedItems = () => info?.player.purchasedItems ?? [];
|
|
99
84
|
return {
|
|
@@ -152,11 +137,7 @@ export function createPlatform(sdk) {
|
|
|
152
137
|
onToggleMute: (cb) => subscribe(listeners.toggleMute, cb),
|
|
153
138
|
onGameInfo: (cb) => subscribe(listeners.gameInfo, cb),
|
|
154
139
|
haptic(type) {
|
|
155
|
-
|
|
156
|
-
if (actions?.hapticFeedback)
|
|
157
|
-
actions.hapticFeedback(type);
|
|
158
|
-
else
|
|
159
|
-
sdk?.hapticFeedback?.(type);
|
|
140
|
+
sdk?.singlePlayer.actions.hapticFeedback(type);
|
|
160
141
|
},
|
|
161
142
|
hasItem: (slug) => purchasedItems().includes(slug),
|
|
162
143
|
itemCount: (slug) => purchasedItems().filter((item) => item === slug).length,
|
|
@@ -167,11 +148,7 @@ export function createPlatform(sdk) {
|
|
|
167
148
|
},
|
|
168
149
|
reportError(error) {
|
|
169
150
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
170
|
-
|
|
171
|
-
if (actions?.reportError)
|
|
172
|
-
actions.reportError({ message: err.message, error: err });
|
|
173
|
-
else
|
|
174
|
-
sdk?.reportError?.({ message: err.message, error: err });
|
|
151
|
+
sdk?.singlePlayer.actions.reportError({ message: err.message, error: err });
|
|
175
152
|
},
|
|
176
153
|
};
|
|
177
154
|
}
|
|
@@ -43,12 +43,32 @@ export type ShopItem = {
|
|
|
43
43
|
iconUrl?: string | null;
|
|
44
44
|
tier?: number | null;
|
|
45
45
|
};
|
|
46
|
+
export type PresentationTarget = 'mobile' | 'desktop';
|
|
47
|
+
export type PresentationOrientation = 'portrait' | 'landscape';
|
|
48
|
+
export type PresentationInput = 'touch' | 'keyboard' | 'pointer';
|
|
49
|
+
/**
|
|
50
|
+
* How the host is presenting the game: which surface it targets, which way it
|
|
51
|
+
* is oriented, and what input the player actually has. Sourced from the game's
|
|
52
|
+
* own declaration (`remix.json` → the platform), echoed back by the host.
|
|
53
|
+
*/
|
|
54
|
+
export type GamePresentation = {
|
|
55
|
+
target: PresentationTarget;
|
|
56
|
+
orientation: PresentationOrientation;
|
|
57
|
+
/** e.g. `'16:9'`. Advisory — hosts may letterbox or expand around it. */
|
|
58
|
+
preferredAspectRatio?: string;
|
|
59
|
+
input: PresentationInput[];
|
|
60
|
+
};
|
|
46
61
|
export type GameInfo = {
|
|
47
62
|
players: Player[];
|
|
48
63
|
player: Player;
|
|
49
64
|
shopItems?: ShopItem[];
|
|
50
65
|
viewContext: ViewContext;
|
|
51
66
|
contentSafeAreaInset: SafeAreaInset;
|
|
67
|
+
/**
|
|
68
|
+
* Absent on hosts that predate the desktop target. Absence means the
|
|
69
|
+
* platform default: mobile, portrait, touch.
|
|
70
|
+
*/
|
|
71
|
+
presentation?: GamePresentation;
|
|
52
72
|
initialGameState: {
|
|
53
73
|
id: string;
|
|
54
74
|
gameState: GameState;
|
|
@@ -73,25 +93,16 @@ export type GameErrorData = {
|
|
|
73
93
|
colno?: number;
|
|
74
94
|
error?: Error;
|
|
75
95
|
};
|
|
76
|
-
export type FarcadeSDKEventMap = {
|
|
77
|
-
play_again: Record<string, never>;
|
|
78
|
-
toggle_mute: ToggleMuteData;
|
|
79
|
-
game_info: GameInfo;
|
|
80
|
-
game_state_updated: GameStateUpdatedData;
|
|
81
|
-
};
|
|
82
96
|
/** The subset of `window.FarcadeSDK` this SDK actually calls. */
|
|
83
97
|
export type FarcadeSDKGlobal = {
|
|
84
98
|
ready: () => Promise<GameInfo>;
|
|
85
99
|
purchase: (data: {
|
|
86
100
|
item: string;
|
|
87
101
|
}) => Promise<PurchaseCompleteData>;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
onToggleMute?: (cb: (data: ToggleMuteData) => void) => void;
|
|
93
|
-
onGameInfo?: (cb: (data: GameInfo) => void) => void;
|
|
94
|
-
onGameStateUpdated?: (cb: (data: GameStateUpdatedData) => void) => void;
|
|
102
|
+
onPlayAgain: (cb: () => void) => void;
|
|
103
|
+
onToggleMute: (cb: (data: ToggleMuteData) => void) => void;
|
|
104
|
+
onGameInfo: (cb: (data: GameInfo) => void) => void;
|
|
105
|
+
onGameStateUpdated: (cb: (data: GameStateUpdatedData) => void) => void;
|
|
95
106
|
readonly gameInfo?: GameInfo;
|
|
96
107
|
readonly gameState?: GameState | null;
|
|
97
108
|
readonly shopItems: ShopItem[];
|
|
@@ -105,8 +116,8 @@ export type FarcadeSDKGlobal = {
|
|
|
105
116
|
saveGameState: (data: {
|
|
106
117
|
gameState: GameState;
|
|
107
118
|
}) => void;
|
|
108
|
-
reportError
|
|
109
|
-
hapticFeedback
|
|
119
|
+
reportError: (data: GameErrorData) => void;
|
|
120
|
+
hapticFeedback: (type?: HapticFeedbackType) => void;
|
|
110
121
|
};
|
|
111
122
|
};
|
|
112
123
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-contract.d.ts","sourceRoot":"","sources":["../../src/platform/sdk-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,CAAA;AAE7E,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,aAAwD,CAAA;AAE3F,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE/C,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,oBAAoB,EAAE,aAAa,CAAA;IACnC,gBAAgB,EAAE;QAChB,EAAE,EAAE,MAAM,CAAA;QACV,SAAS,EAAE,SAAS,CAAA;KACrB,GAAG,IAAI,CAAA;CACT,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AAElF,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAEjD,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CAAA;AAE9E,MAAM,MAAM,oBAAoB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtE,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,
|
|
1
|
+
{"version":3,"file":"sdk-contract.d.ts","sourceRoot":"","sources":["../../src/platform/sdk-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,CAAA;AAE7E,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,aAAwD,CAAA;AAE3F,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE/C,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,CAAA;AAErD,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,WAAW,CAAA;AAE9D,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAA;AAEhE;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,kBAAkB,CAAA;IAC1B,WAAW,EAAE,uBAAuB,CAAA;IACpC,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,KAAK,EAAE,iBAAiB,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,oBAAoB,EAAE,aAAa,CAAA;IACnC;;;OAGG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,gBAAgB,EAAE;QAChB,EAAE,EAAE,MAAM,CAAA;QACV,SAAS,EAAE,SAAS,CAAA;KACrB,GAAG,IAAI,CAAA;CACT,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AAElF,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAEjD,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CAAA;AAE9E,MAAM,MAAM,oBAAoB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtE,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,iEAAiE;AACjE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACnE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IACrC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,KAAK,IAAI,CAAA;IAC1D,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,KAAK,IAAI,CAAA;IAClD,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,KAAK,IAAI,CAAA;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE;QACZ,OAAO,EAAE;YACP,QAAQ,EAAE,CAAC,IAAI,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAA;aAAE,KAAK,IAAI,CAAA;YAC3C,aAAa,EAAE,CAAC,IAAI,EAAE;gBAAE,SAAS,EAAE,SAAS,CAAA;aAAE,KAAK,IAAI,CAAA;YACvD,WAAW,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAA;YAC1C,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAA;SACpD,CAAA;KACF,CAAA;CACF,CAAA"}
|
package/dist/viewport.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { Vector2 } from 'three';
|
|
2
2
|
import { type SafeAreaInset } from './platform/sdk-contract.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* whichever axis has surplus, so the
|
|
6
|
-
*
|
|
7
|
-
* documented contract — letterboxing to a fixed
|
|
4
|
+
* The design-box model: the canvas FILLS the viewport and the frustum expands
|
|
5
|
+
* along whichever axis has surplus, so the design box is always fully visible
|
|
6
|
+
* and backgrounds bleed into the overscan. This is the platform's own
|
|
7
|
+
* documented contract — letterboxing to a fixed-aspect canvas wastes ~30% of a
|
|
8
8
|
* real phone screen (the dev dashboard previews at 390x844, aspect 0.462,
|
|
9
|
-
* against the box's 0.667).
|
|
9
|
+
* against the portrait box's 0.667).
|
|
10
|
+
*
|
|
11
|
+
* The math is orientation-agnostic; only the boxes are opinionated:
|
|
12
|
+
* `DEFAULT_DESIGN` (720x1080) for portrait mobile games, `LANDSCAPE_DESIGN`
|
|
13
|
+
* (1280x720) for desktop-target landscape games.
|
|
10
14
|
*/
|
|
11
15
|
export type FitMode = 'expand' | 'crop';
|
|
12
16
|
export type DesignBox = {
|
|
@@ -14,6 +18,8 @@ export type DesignBox = {
|
|
|
14
18
|
height: number;
|
|
15
19
|
};
|
|
16
20
|
export declare const DEFAULT_DESIGN: DesignBox;
|
|
21
|
+
/** The landscape design box for desktop-target games. Pair with `landscapeRig()`. */
|
|
22
|
+
export declare const LANDSCAPE_DESIGN: DesignBox;
|
|
17
23
|
export type Rect = {
|
|
18
24
|
x: number;
|
|
19
25
|
y: number;
|
package/dist/viewport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../src/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,4BAA4B,CAAA;AAErF
|
|
1
|
+
{"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../src/viewport.ts"],"names":[],"mappings":"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"}
|
package/dist/viewport.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Vector2 } from 'three';
|
|
2
2
|
import { ZERO_SAFE_AREA_INSET } from './platform/sdk-contract.js';
|
|
3
3
|
export const DEFAULT_DESIGN = { width: 720, height: 1080 };
|
|
4
|
+
/** The landscape design box for desktop-target games. Pair with `landscapeRig()`. */
|
|
5
|
+
export const LANDSCAPE_DESIGN = { width: 1280, height: 720 };
|
|
4
6
|
/**
|
|
5
7
|
* The reference density: the design box rendered on a 393 CSS-px-wide phone.
|
|
6
8
|
* The HUD scales against this so 16px reads as 16px on the target device and
|