@diffenderfer-games/hub 2.0.0-next.0 → 2.0.0-next.10
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/CHANGELOG.md +163 -0
- package/LICENSE +21 -21
- package/README.md +203 -139
- package/dist/auto.d.ts +8 -8
- package/dist/auto.js +3 -3
- package/dist/avatar-pixi.d.ts +165 -0
- package/dist/avatar-pixi.d.ts.map +1 -0
- package/dist/avatar-pixi.js +299 -0
- package/dist/avatar-pixi.js.map +1 -0
- package/dist/avatar-svg.d.ts +4 -0
- package/dist/avatar-svg.js +5 -0
- package/dist/avatar-three.d.ts +69 -0
- package/dist/avatar-three.d.ts.map +1 -0
- package/dist/avatar-three.js +49 -0
- package/dist/avatar-three.js.map +1 -0
- package/dist/avatar.d.ts +7 -0
- package/dist/avatar.js +500 -0
- package/dist/avatar.js.map +1 -0
- package/dist/daily.d.ts +2 -2
- package/dist/doctor/cli.mjs +119 -28
- package/dist/doctor/cli.mjs.map +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js +3 -3
- package/dist/input.d.ts +2 -2
- package/dist/input.js +2 -2
- package/dist/mp.d.ts +3 -3
- package/dist/race.d.ts +1 -1
- package/dist/rooms.d.ts +3 -3
- package/dist/rooms.js +1 -1
- package/dist/shared/animator.d.ts +104 -0
- package/dist/shared/animator.d.ts.map +1 -0
- package/dist/shared/art.js +1946 -0
- package/dist/shared/art.js.map +1 -0
- package/dist/shared/atlas.d.ts +138 -0
- package/dist/shared/atlas.d.ts.map +1 -0
- package/dist/shared/avatar.d.ts +123 -0
- package/dist/shared/avatar.d.ts.map +1 -0
- package/dist/shared/bridge.js +18 -4
- package/dist/shared/bridge.js.map +1 -1
- package/dist/shared/client-version.gen.js +1 -1
- package/dist/shared/daily.d.ts +145 -19
- package/dist/shared/daily.d.ts.map +1 -1
- package/dist/shared/daily.js +138 -25
- package/dist/shared/daily.js.map +1 -1
- package/dist/shared/defineProperty.js +39 -0
- package/dist/shared/describe.d.ts +32 -0
- package/dist/shared/describe.d.ts.map +1 -0
- package/dist/shared/describe.js +109 -0
- package/dist/shared/describe.js.map +1 -0
- package/dist/shared/globals.js +9 -42
- package/dist/shared/globals.js.map +1 -1
- package/dist/shared/index.d.ts +1122 -46
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/input.d.ts +74 -14
- package/dist/shared/input.d.ts.map +1 -1
- package/dist/shared/input.js +179 -25
- package/dist/shared/input.js.map +1 -1
- package/dist/shared/json-guards.js +48 -0
- package/dist/shared/json-guards.js.map +1 -0
- package/dist/shared/latest-state.js +1 -1
- package/dist/shared/live-canvas.js +62 -0
- package/dist/shared/live-canvas.js.map +1 -0
- package/dist/shared/mp.js +10 -2
- package/dist/shared/mp.js.map +1 -1
- package/dist/shared/multiplayer-types.d.ts +15 -2
- package/dist/shared/multiplayer-types.d.ts.map +1 -1
- package/dist/shared/overlays.js +800 -0
- package/dist/shared/overlays.js.map +1 -0
- package/dist/shared/page-stack.js +2 -1
- package/dist/shared/page-stack.js.map +1 -1
- package/dist/shared/pose-key.js +249 -0
- package/dist/shared/pose-key.js.map +1 -0
- package/dist/shared/race-types.d.ts +1 -1
- package/dist/shared/race.js +1 -1
- package/dist/shared/room-types.d.ts +28 -3
- package/dist/shared/room-types.d.ts.map +1 -1
- package/dist/shared/rooms.d.ts.map +1 -1
- package/dist/shared/rooms.js +23 -4
- package/dist/shared/rooms.js.map +1 -1
- package/dist/shared/runtime-opener.js +1 -1
- package/dist/shared/scene.d.ts +90 -0
- package/dist/shared/scene.d.ts.map +1 -0
- package/dist/shared/social.d.ts +90 -9
- package/dist/shared/social.d.ts.map +1 -1
- package/dist/shared/social.js +6 -1
- package/dist/shared/social.js.map +1 -1
- package/dist/shared/src.js +4563 -667
- package/dist/shared/src.js.map +1 -1
- package/dist/shared/svg-markup.js +2354 -0
- package/dist/shared/svg-markup.js.map +1 -0
- package/dist/shared/svg.js +27 -0
- package/dist/shared/svg.js.map +1 -0
- package/dist/shared/types.d.ts +174 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/wire-types.d.ts +6 -2
- package/dist/shared/wire-types.d.ts.map +1 -1
- package/dist/social.d.ts +5 -5
- package/dist/social.js +2 -2
- package/dist/turns-rules.d.ts +2 -0
- package/dist/turns-rules.js +1 -0
- package/dist/turns.d.ts +61 -0
- package/dist/turns.d.ts.map +1 -0
- package/dist/turns.js +183 -0
- package/dist/turns.js.map +1 -0
- package/package.json +125 -89
- package/src/auto.ts +39 -39
- package/src/avatar/adapters/pixi-avatar.ts +73 -0
- package/src/avatar/adapters/pixi-crowd.ts +329 -0
- package/src/avatar/adapters/pixi-types.ts +84 -0
- package/src/avatar/adapters/three.ts +126 -0
- package/src/avatar/animator/animator.ts +285 -0
- package/src/avatar/animator/reactions.ts +44 -0
- package/src/avatar/animator/schedule.ts +73 -0
- package/src/avatar/art/beard.ts +49 -0
- package/src/avatar/art/glasses.ts +67 -0
- package/src/avatar/art/hair.ts +254 -0
- package/src/avatar/art/headwear.ts +75 -0
- package/src/avatar/art/index.ts +21 -0
- package/src/avatar/art/shape.ts +87 -0
- package/src/avatar/art-store.ts +36 -0
- package/src/avatar/atlas.ts +246 -0
- package/src/avatar/catalog-view.ts +14 -0
- package/src/avatar/colour.ts +109 -0
- package/src/avatar/describe.ts +79 -0
- package/src/avatar/face.ts +187 -0
- package/src/avatar/geom.ts +173 -0
- package/src/avatar/layout.ts +47 -0
- package/src/avatar/look-like.ts +52 -0
- package/src/avatar/outputs/bitmap.ts +75 -0
- package/src/avatar/outputs/canvas-paint.ts +177 -0
- package/src/avatar/outputs/canvas.ts +62 -0
- package/src/avatar/outputs/custom-element.ts +140 -0
- package/src/avatar/outputs/element.ts +58 -0
- package/src/avatar/outputs/live-canvas.ts +57 -0
- package/src/avatar/outputs/overlay-svg.ts +22 -0
- package/src/avatar/outputs/pose-key.ts +30 -0
- package/src/avatar/outputs/svg-markup.ts +113 -0
- package/src/avatar/outputs/svg.ts +41 -0
- package/src/avatar/overlays.ts +128 -0
- package/src/avatar/render/body.ts +116 -0
- package/src/avatar/render/colours.ts +81 -0
- package/src/avatar/render/compose.ts +320 -0
- package/src/avatar/render/context.ts +117 -0
- package/src/avatar/render/eyes.ts +78 -0
- package/src/avatar/render/eyewear.ts +118 -0
- package/src/avatar/render/frame.ts +73 -0
- package/src/avatar/render/head.ts +81 -0
- package/src/avatar/render/mouth.ts +86 -0
- package/src/avatar/render/props.ts +91 -0
- package/src/avatar/render/types.ts +93 -0
- package/src/avatar/render/walker-parts.ts +121 -0
- package/src/avatar/render/walker.ts +199 -0
- package/src/avatar/scene.ts +119 -0
- package/src/avatar-pixi.ts +20 -0
- package/src/avatar-svg.ts +21 -0
- package/src/avatar-three.ts +18 -0
- package/src/avatar.ts +63 -0
- package/src/core/avatar/avatar-cache.ts +95 -0
- package/src/core/avatar/avatar-ref.ts +34 -0
- package/src/core/avatar/avatar-types.ts +43 -0
- package/src/core/avatar/hub-avatar.ts +308 -0
- package/src/core/connection.ts +408 -299
- package/src/core/errors.ts +160 -147
- package/src/core/game-data.ts +40 -38
- package/src/core/hub-economy.ts +216 -179
- package/src/core/hub-progress.ts +269 -205
- package/src/core/hub.ts +352 -131
- package/src/core/menu-control.ts +61 -61
- package/src/core/offline/cloud-saves.ts +62 -0
- package/src/core/offline/events.ts +50 -50
- package/src/core/offline/favorites.ts +21 -21
- package/src/core/offline/hub-kinds/avatar-kind.ts +42 -0
- package/src/core/offline/hub-kinds/daily-kind.ts +68 -0
- package/src/core/offline/hub-kinds/economy-kinds.ts +86 -0
- package/src/core/offline/hub-kinds/game-fields.ts +2 -0
- package/src/core/offline/hub-kinds/index.ts +52 -0
- package/src/core/offline/hub-kinds/legacy-ops.ts +37 -0
- package/src/core/offline/hub-kinds/progress-kinds.ts +165 -0
- package/src/core/offline/hub-kinds/resume-kind.ts +108 -0
- package/src/core/offline/hub-kinds/saved-kind.ts +93 -0
- package/src/core/offline/kind-adapters.ts +48 -0
- package/src/core/offline/local-inventory.ts +64 -0
- package/src/core/offline/local-store.ts +304 -261
- package/src/core/offline/offline-api.ts +65 -0
- package/src/core/offline/outbox-entry.ts +59 -0
- package/src/core/offline/outbox-kinds.ts +78 -0
- package/src/core/offline/outbox-merge.ts +39 -0
- package/src/core/offline/outbox-replayer.ts +141 -0
- package/src/core/offline/outbox-store.ts +85 -0
- package/src/core/offline/outbox.ts +232 -0
- package/src/core/offline/queue.ts +126 -171
- package/src/core/offline/replay-lease.ts +87 -0
- package/src/core/offline/replay-policy.ts +52 -0
- package/src/core/page-account.ts +121 -0
- package/src/core/page.ts +87 -74
- package/src/core/rest/endpoint-types.ts +22 -22
- package/src/core/rest/rest-client.ts +163 -152
- package/src/core/rest/routes.gen.ts +144 -88
- package/src/core/resume/hub-resume.ts +286 -0
- package/src/core/resume/local-resume.ts +130 -0
- package/src/core/resume/resume-list.ts +65 -0
- package/src/core/resume/resume-request.ts +52 -0
- package/src/core/resume/resume-types.ts +64 -0
- package/src/core/saved/daily-saves.ts +196 -0
- package/src/core/saved/daily-seed.ts +16 -0
- package/src/core/saved/hub-saved.ts +221 -0
- package/src/core/saved/local-saved.ts +122 -0
- package/src/core/saved/saved-list.ts +129 -0
- package/src/core/saved/saved-open.ts +104 -0
- package/src/core/saved/saved-order.ts +49 -0
- package/src/core/saved/saved-types.ts +24 -0
- package/src/core/storage/json-guards.ts +80 -74
- package/src/core/storage/key-value.ts +66 -66
- package/src/core/ticket.ts +43 -43
- package/src/core/turns/hub-turns.ts +161 -0
- package/src/core/turns/turn-game.ts +510 -0
- package/src/core/turns/your-turn-buzz.ts +69 -0
- package/src/core/types.ts +134 -134
- package/src/core/version/client-version.gen.ts +2 -2
- package/src/core/version/hub-version.ts +62 -62
- package/src/core/version/semver.ts +97 -97
- package/src/daily/daily-system.ts +276 -161
- package/src/daily/page-daily.ts +36 -36
- package/src/daily/types.ts +105 -67
- package/src/daily.ts +10 -10
- package/src/doctor/checks.ts +86 -76
- package/src/doctor/cli.ts +101 -106
- package/src/doctor/hub-version-fetch.ts +43 -0
- package/src/doctor/tsconfig.json +12 -12
- package/src/doctor/world-check.ts +61 -0
- package/src/globals.ts +115 -110
- package/src/index.ts +68 -50
- package/src/input/device-state.ts +146 -146
- package/src/input/edges.ts +55 -55
- package/src/input/focus-ring.ts +13 -0
- package/src/input/gamepad.ts +61 -61
- package/src/input/input-events.ts +32 -32
- package/src/input/input-registry.ts +171 -164
- package/src/input/input-system.ts +406 -393
- package/src/input/legacy-controls.ts +64 -64
- package/src/input/modality.ts +122 -0
- package/src/input/nav-state.ts +200 -191
- package/src/input/navigator.ts +182 -171
- package/src/input/on-screen-controls.ts +101 -101
- package/src/input/page-control.ts +43 -43
- package/src/input/page-input.ts +193 -193
- package/src/input/player-remaps.ts +77 -77
- package/src/input/source-values.ts +116 -116
- package/src/input/spatial.ts +47 -47
- package/src/input/types.ts +331 -331
- package/src/input/zero-config.ts +164 -177
- package/src/input.ts +26 -22
- package/src/mp.ts +10 -10
- package/src/overlay/controls-panel.ts +163 -163
- package/src/overlay/dom.ts +46 -46
- package/src/overlay/layout-clusters.ts +162 -162
- package/src/overlay/layout-geometry.ts +136 -136
- package/src/overlay/layout.ts +203 -203
- package/src/overlay/listener-scope.ts +23 -23
- package/src/overlay/on-screen-keyboard.ts +137 -137
- package/src/overlay/overlay.ts +234 -208
- package/src/overlay/styles.ts +13 -12
- package/src/overlay/virtual-controls.ts +262 -262
- package/src/race.ts +10 -10
- package/src/realtime/bridge.ts +126 -121
- package/src/realtime/cross-bundle.ts +29 -29
- package/src/realtime/fallback-notice.ts +48 -48
- package/src/realtime/hub-link.ts +65 -65
- package/src/realtime/latest-state.ts +33 -33
- package/src/realtime/multiplayer-forwarder.ts +40 -28
- package/src/realtime/multiplayer-types.ts +66 -52
- package/src/realtime/page-runtime.ts +60 -60
- package/src/realtime/race-forwarder.ts +59 -59
- package/src/realtime/race-types.ts +132 -132
- package/src/realtime/room-types.ts +151 -125
- package/src/realtime/rooms-forwarder.ts +104 -79
- package/src/realtime/runtime-api.ts +74 -49
- package/src/realtime/runtime-opener.ts +61 -61
- package/src/realtime/social-forwarder.ts +77 -72
- package/src/realtime/social-types.ts +86 -78
- package/src/realtime/types.ts +54 -53
- package/src/realtime/wire-types.ts +79 -72
- package/src/realtime/world-types.ts +20 -0
- package/src/rooms.ts +10 -10
- package/src/social.ts +19 -18
- package/src/turns-kit/check-rules.ts +281 -0
- package/src/turns-rules.ts +12 -0
- package/src/turns.ts +14 -0
- package/src/types.ts +13 -13
- package/src/uistack/page-stack.ts +45 -45
- package/src/uistack/play-suspension.ts +82 -82
- package/src/uistack/types.ts +76 -76
- package/src/uistack/ui-stack.ts +144 -144
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { l as Pose, s as LookLike, u as RenderOptions } from "./shared/types.js";
|
|
2
|
+
import { t as Animator } from "./shared/animator.js";
|
|
3
|
+
//#region src/avatar/adapters/three.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* The slice of three.js {@link avatarCanvasTexture} uses: `import * as THREE
|
|
6
|
+
* from 'three'`, or an object of the named imports. Generic over the game's
|
|
7
|
+
* own `CanvasTexture`, inferred from what is passed, so the texture that comes
|
|
8
|
+
* back is three's own type.
|
|
9
|
+
*/
|
|
10
|
+
interface ThreeTextureNs<TTexture extends ThreeTexture = ThreeTexture> {
|
|
11
|
+
readonly CanvasTexture: new (canvas: HTMLCanvasElement | OffscreenCanvas) => TTexture;
|
|
12
|
+
readonly SRGBColorSpace?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The slice of three.js {@link avatarSprite} uses (the namespace, or the named
|
|
16
|
+
* imports). The sprite that comes back is three's own `Sprite`, so
|
|
17
|
+
* `scene.add(sprite)` needs no cast. `TMap` is what the game's
|
|
18
|
+
* `SpriteMaterial` takes as its `map` (three's `Texture`); it is inferred on
|
|
19
|
+
* its own so an inline object of the named imports infers too.
|
|
20
|
+
*/
|
|
21
|
+
interface ThreeNs<TTexture extends ThreeTexture = ThreeTexture, TMaterial extends ThreeMaterial = ThreeMaterial, TSprite extends ThreeSprite = ThreeSprite, TMap = TTexture> extends ThreeTextureNs<TTexture> {
|
|
22
|
+
readonly SpriteMaterial: new (params: {
|
|
23
|
+
map: TMap;
|
|
24
|
+
transparent: boolean;
|
|
25
|
+
}) => TMaterial;
|
|
26
|
+
readonly Sprite: new (material: TMaterial) => TSprite;
|
|
27
|
+
}
|
|
28
|
+
/** A texture. */
|
|
29
|
+
interface ThreeTexture {
|
|
30
|
+
needsUpdate: boolean;
|
|
31
|
+
colorSpace?: string;
|
|
32
|
+
dispose(): void;
|
|
33
|
+
}
|
|
34
|
+
/** A material. */
|
|
35
|
+
interface ThreeMaterial {
|
|
36
|
+
dispose(): void;
|
|
37
|
+
}
|
|
38
|
+
/** A sprite. */
|
|
39
|
+
interface ThreeSprite {
|
|
40
|
+
readonly scale: {
|
|
41
|
+
set(x: number, y: number, z: number): void;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Options for the three.js helpers. */
|
|
45
|
+
interface ThreeAvatarOptions extends RenderOptions {
|
|
46
|
+
readonly animator?: Animator;
|
|
47
|
+
/** Texture pixels per `size` pixel (default 2). */
|
|
48
|
+
readonly resolution?: number;
|
|
49
|
+
}
|
|
50
|
+
/** A live avatar texture; `texture` is the game's own `CanvasTexture`. */
|
|
51
|
+
interface ThreeAvatarTexture<TTexture extends ThreeTexture = ThreeTexture> {
|
|
52
|
+
readonly texture: TTexture;
|
|
53
|
+
/** Redraws for the animator's pose at `t` (or a given pose), at most 30 times a second. */
|
|
54
|
+
update(t: number | Pose): void;
|
|
55
|
+
setLook(like: LookLike): void;
|
|
56
|
+
dispose(): void;
|
|
57
|
+
}
|
|
58
|
+
/** A `CanvasTexture` showing the avatar. */
|
|
59
|
+
export declare function avatarCanvasTexture<TTexture extends ThreeTexture>(three: ThreeTextureNs<TTexture>, like: LookLike, opts?: ThreeAvatarOptions): ThreeAvatarTexture<TTexture>;
|
|
60
|
+
/** A billboard `Sprite` of the avatar, `height` world units tall (default 1). */
|
|
61
|
+
export declare function avatarSprite<TTexture extends ThreeTexture & TMap, TMaterial extends ThreeMaterial, TSprite extends ThreeSprite, TMap>(three: ThreeNs<TTexture, TMaterial, TSprite, TMap>, like: LookLike, opts?: ThreeAvatarOptions & {
|
|
62
|
+
readonly height?: number;
|
|
63
|
+
}): {
|
|
64
|
+
readonly sprite: TSprite;
|
|
65
|
+
readonly avatar: ThreeAvatarTexture<TTexture>;
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export type { ThreeAvatarOptions, ThreeAvatarTexture, ThreeNs, ThreeTextureNs };
|
|
69
|
+
//# sourceMappingURL=avatar-three.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-three.d.ts","names":[],"sources":["../src/avatar/adapters/three.ts"],"mappings":";;;;;;;;;UAgBiB,eAAe,iBAAiB,eAAe;WACrD,oBAAoB,QAAQ,oBAAoB,oBAAoB;WACpE;;;;;;;;;UAUM,QACf,iBAAiB,eAAe,cAChC,kBAAkB,gBAAgB,eAClC,gBAAgB,cAAc,aAC9B,OAAO,kBACC,eAAe;WACd,qBAAqB;IAAU,KAAK;IAAM;QAA2B;WACrE,aAAa,UAAU,cAAc;;;UAI/B;EACf;EACA;EACA;;;UAIe;EACf;;;UAIe;WACN;IAAS,IAAI,WAAW,WAAW;;;;UAI7B,2BAA2B;WACjC,WAAW;;WAEX;;;UAIM,mBAAmB,iBAAiB,eAAe;WACzD,SAAS;;EAElB,OAAO,YAAY;EACnB,QAAQ,MAAM;EACd;;;wBAMc,oBAAoB,iBAAiB,cACnD,OAAO,eAAe,WACtB,MAAM,UACN,OAAM,qBACL,mBAAmB;;wBAoCN,aAAa,iBAAiB,eAAe,MAAM,kBAAkB,eAAe,gBAAgB,aAAa,MAC/H,OAAO,QAAQ,UAAU,WAAW,SAAS,OAC7C,MAAM,UACN,OAAM;WAAgC;;WAC1B,QAAQ;WAAkB,QAAQ,mBAAmB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { t as liveCanvas } from "./shared/live-canvas.js";
|
|
2
|
+
//#region src/avatar/adapters/three.ts
|
|
3
|
+
const MIN_FRAME_MS = 1e3 / 30;
|
|
4
|
+
/** A `CanvasTexture` showing the avatar. */
|
|
5
|
+
function avatarCanvasTexture(three, like, opts = {}) {
|
|
6
|
+
const live = liveCanvas(like, opts, opts.resolution ?? 2);
|
|
7
|
+
live.draw(opts.pose);
|
|
8
|
+
const texture = new three.CanvasTexture(live.canvas);
|
|
9
|
+
if (three.SRGBColorSpace) texture.colorSpace = three.SRGBColorSpace;
|
|
10
|
+
let last = -Infinity;
|
|
11
|
+
return {
|
|
12
|
+
texture,
|
|
13
|
+
update(t) {
|
|
14
|
+
if (typeof t === "number") {
|
|
15
|
+
if (t - last < MIN_FRAME_MS) return;
|
|
16
|
+
last = t;
|
|
17
|
+
}
|
|
18
|
+
const pose = typeof t === "number" ? opts.animator?.pose(t) : t;
|
|
19
|
+
if (live.draw(pose ?? opts.pose)) texture.needsUpdate = true;
|
|
20
|
+
},
|
|
21
|
+
setLook(next) {
|
|
22
|
+
live.setLook(next);
|
|
23
|
+
opts.animator?.setLook(next);
|
|
24
|
+
if (live.draw(opts.pose)) texture.needsUpdate = true;
|
|
25
|
+
},
|
|
26
|
+
dispose() {
|
|
27
|
+
texture.dispose();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** A billboard `Sprite` of the avatar, `height` world units tall (default 1). */
|
|
32
|
+
function avatarSprite(three, like, opts = {}) {
|
|
33
|
+
const avatar = avatarCanvasTexture(three, like, opts);
|
|
34
|
+
const sprite = new three.Sprite(new three.SpriteMaterial({
|
|
35
|
+
map: avatar.texture,
|
|
36
|
+
transparent: true
|
|
37
|
+
}));
|
|
38
|
+
const h = opts.height ?? 1;
|
|
39
|
+
const aspect = opts.frame === "full" ? 172 / 206 : 1;
|
|
40
|
+
sprite.scale.set(h * aspect, h, 1);
|
|
41
|
+
return {
|
|
42
|
+
sprite,
|
|
43
|
+
avatar
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
export { avatarCanvasTexture, avatarSprite };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=avatar-three.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-three.js","names":[],"sources":["../src/avatar/adapters/three.ts"],"mappings":";;AAuEA,MAAM,eAAe,MAAO;;AAG5B,SAAgB,oBACd,OACA,MACA,OAA2B,CAAC,GACE;CAC9B,MAAM,OAAO,WAAW,MAAM,MAAM,KAAK,cAAc,CAAC;CACxD,KAAK,KAAK,KAAK,IAAI;CACnB,MAAM,UAAU,IAAI,MAAM,cAAc,KAAK,MAAM;CACnD,IAAI,MAAM,gBACR,QAAQ,aAAa,MAAM;CAE7B,IAAI,OAAO;CACX,OAAO;EACL;EACA,OAAO,GAAG;GACR,IAAI,OAAO,MAAM,UAAU;IACzB,IAAI,IAAI,OAAO,cACb;IAEF,OAAO;GACT;GACA,MAAM,OAAO,OAAO,MAAM,WAAW,KAAK,UAAU,KAAK,CAAC,IAAI;GAC9D,IAAI,KAAK,KAAK,QAAQ,KAAK,IAAI,GAC7B,QAAQ,cAAc;EAE1B;EACA,QAAQ,MAAM;GACZ,KAAK,QAAQ,IAAI;GACjB,KAAK,UAAU,QAAQ,IAAI;GAC3B,IAAI,KAAK,KAAK,KAAK,IAAI,GACrB,QAAQ,cAAc;EAE1B;EACA,UAAU;GACR,QAAQ,QAAQ;EAClB;CACF;AACF;;AAGA,SAAgB,aACd,OACA,MACA,OAA0D,CAAC,GACkB;CAC7E,MAAM,SAAS,oBAAoB,OAAO,MAAM,IAAI;CACpD,MAAM,SAAS,IAAI,MAAM,OAAO,IAAI,MAAM,eAAe;EAAE,KAAK,OAAO;EAAS,aAAa;CAAK,CAAC,CAAC;CACpG,MAAM,IAAI,KAAK,UAAU;CACzB,MAAM,SAAS,KAAK,UAAU,SAAS,MAAM,MAAM;CACnD,OAAO,MAAM,IAAI,IAAI,QAAQ,GAAG,CAAC;CACjC,OAAO;EAAE;EAAQ;CAAO;AAC1B"}
|
package/dist/avatar.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { $ as facingFrom, A as isValidLook, B as seededRng, C as canonicalLook, D as encodeLook, E as distinctLooks, F as partsOf, G as toLook, H as deltaE, I as randomLook, J as WALKER_SEAT_DROP, K as sceneToSvg, L as render, M as normaliseHex, N as partById, O as isLookCode, P as partName, Q as defineAvatarElement, R as resolveColour, T as defaultLook, U as lightness, V as contrast, W as toCode, X as overlaySvg, Y as catalog, Z as paintOverlay, _ as PartCategory, a as CATALOG_REVISION, b as Rng, c as DecodedLook, d as LookAccessory, et as layout, f as LookColour, g as PaletteName, h as PALETTES, i as CATALOG, j as lookProblem, k as isTinted, l as FRAME_PRESETS, m as LookProblem, n as AccessorySlot, nt as AvatarElement, o as CatalogEntry, p as LookPart, q as WALKER_HEAD_SCALE, r as AvatarLook, rt as CanvasPlacement, s as DEFAULT_GEN, t as ACCESSORY_SLOTS, tt as lookToward, u as LOOK_CODE_PREFIX, v as Preset, w as decodeLook, x as SECOND_COLOUR_CODE, y as RandomLookOptions, z as sameLook } from "./shared/avatar.js";
|
|
2
|
+
import { S as mix, _ as FaceExtra, a as Frame, b as expressionFromEmote, c as Point, d as StatusProp, f as View, g as Expression, h as EXPRESSION_NAMES, i as Figure, l as Pose, m as EXPRESSIONS, n as BodyPose, o as LookDir, p as BrowParams, r as Facing, s as LookLike, t as Anchor, u as RenderOptions, v as FaceParams, x as isExpression, y as MouthParams } from "./shared/types.js";
|
|
3
|
+
import { t as SceneNode } from "./shared/scene.js";
|
|
4
|
+
import { a as ActivityIcon, c as overlays, i as createAtlas, l as Ctx2D, n as AtlasOptions, o as Overlay, r as AvatarAtlas, s as ReactionGlyph, t as AtlasFrame, u as paintNodes } from "./shared/atlas.js";
|
|
5
|
+
import { c as composeAvatar, i as ready, n as describe, o as Composed, r as onArtReady, s as HEAD_Y, t as avatarEmoji } from "./shared/describe.js";
|
|
6
|
+
import { a as animator, i as Feeling, n as AnimatorOptions, o as REACTIONS, r as At, s as Reaction, t as Animator } from "./shared/animator.js";
|
|
7
|
+
export { ACCESSORY_SLOTS, type AccessorySlot, type ActivityIcon, type Anchor, Animator, type AnimatorOptions, type At, type AtlasFrame, type AtlasOptions, AvatarAtlas, type AvatarElement, type AvatarLook, type BodyPose, type BrowParams, CATALOG, CATALOG_REVISION, type CanvasPlacement, type CatalogEntry, type Composed, type Ctx2D, DEFAULT_GEN, type DecodedLook, EXPRESSIONS, EXPRESSION_NAMES, type Expression, FRAME_PRESETS, type FaceExtra, type FaceParams, type Facing, type Feeling, type Figure, type Frame, HEAD_Y, LOOK_CODE_PREFIX, type LookAccessory, type LookColour, type LookDir, type LookLike, type LookPart, type LookProblem, type MouthParams, type Overlay, PALETTES, type PaletteName, type PartCategory, type Point, type Pose, type Preset, REACTIONS, type RandomLookOptions, type Reaction, type ReactionGlyph, type RenderOptions, type Rng, SECOND_COLOUR_CODE, type SceneNode, type StatusProp, type View, WALKER_HEAD_SCALE, WALKER_SEAT_DROP, animator, avatarEmoji, canonicalLook, catalog, composeAvatar, contrast, createAtlas, decodeLook, defaultLook, defineAvatarElement, deltaE, describe, distinctLooks, encodeLook, expressionFromEmote, facingFrom, isExpression, isLookCode, isTinted, isValidLook, layout, lightness, lookProblem, lookToward, mix, normaliseHex, onArtReady, overlaySvg, overlays, paintNodes, paintOverlay, partById, partName, partsOf, randomLook, ready, render, resolveColour, sameLook, sceneToSvg, seededRng, toCode, toLook };
|
package/dist/avatar.js
ADDED
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
import { t as _defineProperty } from "./shared/defineProperty.js";
|
|
2
|
+
import { F as lightness, I as toCode, L as toLook, N as contrast, P as deltaE, S as WALKER_FULL, a as composeAvatar, b as onArtReady, d as n, g as expressionFromEmote, h as EXPRESSION_NAMES, i as HEAD_Y, m as EXPRESSIONS, o as WALKER_HEAD_SCALE, r as sceneToSvg, s as WALKER_SEAT_DROP, v as isExpression, x as ready, y as mix } from "./shared/svg-markup.js";
|
|
3
|
+
import { a as paintNodes, i as renderCanvasAt, n as defaultLayer, r as renderCanvas, t as renderKey } from "./shared/pose-key.js";
|
|
4
|
+
import { n as renderSvg, t as nextPrefix } from "./shared/svg.js";
|
|
5
|
+
import { a as Animator, i as lookToward, l as renderBitmap, n as facingFrom, o as animator, r as layout, s as REACTIONS, t as overlays, u as renderDataUrl } from "./shared/overlays.js";
|
|
6
|
+
import { n as describe, t as avatarEmoji } from "./shared/describe.js";
|
|
7
|
+
import { ACCESSORY_SLOTS, CATALOG, CATALOG_REVISION, CATALOG_REVISION as CATALOG_REVISION$1, DEFAULT_GEN, FRAME_PRESETS, LOOK_CODE_PREFIX, PALETTES, PALETTES as PALETTES$1, SECOND_COLOUR_CODE, canonicalLook, decodeLook, defaultLook, distinctLooks, encodeLook, isLookCode, isTinted, isValidLook, lookProblem, normaliseHex, partById, partName, partsOf, partsOf as partsOf$1, randomLook, resolveColour, sameLook, seededRng } from "@diffenderfer-games/hub-contract/avatar";
|
|
8
|
+
//#region src/avatar/outputs/element.ts
|
|
9
|
+
/**
|
|
10
|
+
* `render.element`: a live DOM avatar. `update(pose)` re-renders only when
|
|
11
|
+
* the quantised pose changes, which is cheap enough for a dozen avatars at
|
|
12
|
+
* 30 fps in DOM games.
|
|
13
|
+
*/
|
|
14
|
+
/** A live avatar element; it upgrades itself from the silhouette when the art loads. */
|
|
15
|
+
function renderElement(like, opts = {}, doc = document) {
|
|
16
|
+
const el = doc.createElement("span");
|
|
17
|
+
el.className = "dg-avatar";
|
|
18
|
+
el.style.display = "inline-block";
|
|
19
|
+
el.style.lineHeight = "0";
|
|
20
|
+
let look = like;
|
|
21
|
+
let options = opts;
|
|
22
|
+
let key = "";
|
|
23
|
+
const draw = (isForced = false) => {
|
|
24
|
+
const next = renderKey(toCode(look), options);
|
|
25
|
+
if (!isForced && next === key) return;
|
|
26
|
+
key = next;
|
|
27
|
+
el.innerHTML = renderSvg(look, options);
|
|
28
|
+
};
|
|
29
|
+
draw(true);
|
|
30
|
+
onArtReady(() => {
|
|
31
|
+
draw(true);
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
el,
|
|
35
|
+
update(pose) {
|
|
36
|
+
options = {
|
|
37
|
+
...options,
|
|
38
|
+
pose
|
|
39
|
+
};
|
|
40
|
+
draw();
|
|
41
|
+
},
|
|
42
|
+
setLook(next) {
|
|
43
|
+
look = next;
|
|
44
|
+
draw(true);
|
|
45
|
+
},
|
|
46
|
+
setOptions(next) {
|
|
47
|
+
options = {
|
|
48
|
+
...next,
|
|
49
|
+
...options.pose ? { pose: options.pose } : {}
|
|
50
|
+
};
|
|
51
|
+
draw(true);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region src/avatar/outputs/custom-element.ts
|
|
57
|
+
/**
|
|
58
|
+
* `<dg-avatar>` (§3.8), registered by `defineAvatarElement()` (never as a
|
|
59
|
+
* side effect of importing). For DOM and React games and static pages:
|
|
60
|
+
*
|
|
61
|
+
* ```html
|
|
62
|
+
* <dg-avatar look="AV1…" size="48" expression="happy" look-x="-1" animate title="Sam's avatar"></dg-avatar>
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* With `animate` it runs its own animator (blinks, idle motion) at up to
|
|
66
|
+
* 30 fps while visible; its `animator` property gives full control.
|
|
67
|
+
*/
|
|
68
|
+
const FACINGS = [
|
|
69
|
+
"S",
|
|
70
|
+
"SE",
|
|
71
|
+
"E",
|
|
72
|
+
"NE",
|
|
73
|
+
"N",
|
|
74
|
+
"NW",
|
|
75
|
+
"W",
|
|
76
|
+
"SW"
|
|
77
|
+
];
|
|
78
|
+
const FRAMES = [
|
|
79
|
+
"head",
|
|
80
|
+
"bust",
|
|
81
|
+
"full"
|
|
82
|
+
];
|
|
83
|
+
const BODIES = [
|
|
84
|
+
"idle",
|
|
85
|
+
"walk",
|
|
86
|
+
"run",
|
|
87
|
+
"sit",
|
|
88
|
+
"play",
|
|
89
|
+
"wave",
|
|
90
|
+
"cheer",
|
|
91
|
+
"jump",
|
|
92
|
+
"dance",
|
|
93
|
+
"away"
|
|
94
|
+
];
|
|
95
|
+
const STATUSES = [
|
|
96
|
+
"goggles",
|
|
97
|
+
"headset",
|
|
98
|
+
"cards",
|
|
99
|
+
"controller",
|
|
100
|
+
"trophy",
|
|
101
|
+
"crown",
|
|
102
|
+
"book"
|
|
103
|
+
];
|
|
104
|
+
const FRAME_MS = 1e3 / 30;
|
|
105
|
+
/** The list member equal to `value`, if any (attribute values are untrusted). */
|
|
106
|
+
const oneOf = (list, value) => list.find((item) => item === value);
|
|
107
|
+
const toNumber = (value) => {
|
|
108
|
+
const parsed = value === null ? NaN : Number(value);
|
|
109
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
110
|
+
};
|
|
111
|
+
/** The attributes `<dg-avatar>` watches. */
|
|
112
|
+
const AVATAR_ATTRIBUTES = [
|
|
113
|
+
"look",
|
|
114
|
+
"size",
|
|
115
|
+
"frame",
|
|
116
|
+
"facing",
|
|
117
|
+
"expression",
|
|
118
|
+
"look-x",
|
|
119
|
+
"look-y",
|
|
120
|
+
"animate",
|
|
121
|
+
"title",
|
|
122
|
+
"background",
|
|
123
|
+
"body",
|
|
124
|
+
"status"
|
|
125
|
+
];
|
|
126
|
+
/**
|
|
127
|
+
* Registers `<dg-avatar>` (or another tag). Safe to call more than once;
|
|
128
|
+
* a no-op outside a browser.
|
|
129
|
+
*/
|
|
130
|
+
function defineAvatarElement(tag = "dg-avatar") {
|
|
131
|
+
if (typeof customElements === "undefined" || customElements.get(tag)) return;
|
|
132
|
+
class DgAvatar extends HTMLElement {
|
|
133
|
+
constructor(..._args) {
|
|
134
|
+
super(..._args);
|
|
135
|
+
_defineProperty(this, "view", null);
|
|
136
|
+
_defineProperty(this, "anim", null);
|
|
137
|
+
_defineProperty(this, "raf", 0);
|
|
138
|
+
_defineProperty(this, "last", 0);
|
|
139
|
+
_defineProperty(this, "base", "neutral");
|
|
140
|
+
}
|
|
141
|
+
/** The animator driving this element (created on first use). */
|
|
142
|
+
get animator() {
|
|
143
|
+
this.anim ?? (this.anim = animator(this.getAttribute("look") ?? "", { seed: this.getAttribute("look") ?? "dg" }));
|
|
144
|
+
return this.anim;
|
|
145
|
+
}
|
|
146
|
+
options() {
|
|
147
|
+
const background = this.getAttribute("background");
|
|
148
|
+
const frame = oneOf(FRAMES, this.getAttribute("frame"));
|
|
149
|
+
const facing = oneOf(FACINGS, this.getAttribute("facing"));
|
|
150
|
+
const title = this.getAttribute("title");
|
|
151
|
+
return {
|
|
152
|
+
size: toNumber(this.getAttribute("size")) ?? 48,
|
|
153
|
+
...frame ? { frame } : {},
|
|
154
|
+
...facing ? { facing } : {},
|
|
155
|
+
...title ? { title } : {},
|
|
156
|
+
...background === "none" || background === "badge" ? { background } : background?.startsWith("#") ? { background: `#${background.slice(1)}` } : {}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
stillPose() {
|
|
160
|
+
const expression = this.getAttribute("expression") ?? "";
|
|
161
|
+
const body = oneOf(BODIES, this.getAttribute("body"));
|
|
162
|
+
const status = oneOf(STATUSES, this.getAttribute("status"));
|
|
163
|
+
return {
|
|
164
|
+
...isExpression(expression) ? { expression } : {},
|
|
165
|
+
look: {
|
|
166
|
+
x: toNumber(this.getAttribute("look-x")) ?? 0,
|
|
167
|
+
y: toNumber(this.getAttribute("look-y")) ?? 0
|
|
168
|
+
},
|
|
169
|
+
...body ? { body } : {},
|
|
170
|
+
...status ? { status } : {}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
connectedCallback() {
|
|
174
|
+
var _this$style, _this$style2;
|
|
175
|
+
(_this$style = this.style).display || (_this$style.display = "inline-block");
|
|
176
|
+
(_this$style2 = this.style).lineHeight || (_this$style2.lineHeight = "0");
|
|
177
|
+
this.view = renderElement(this.getAttribute("look") ?? "", this.options(), this.ownerDocument);
|
|
178
|
+
this.replaceChildren(this.view.el);
|
|
179
|
+
this.view.update(this.stillPose());
|
|
180
|
+
ready();
|
|
181
|
+
this.loop();
|
|
182
|
+
}
|
|
183
|
+
disconnectedCallback() {
|
|
184
|
+
cancelAnimationFrame(this.raf);
|
|
185
|
+
this.raf = 0;
|
|
186
|
+
}
|
|
187
|
+
attributeChangedCallback(name) {
|
|
188
|
+
if (!this.view) return;
|
|
189
|
+
if (name === "look") {
|
|
190
|
+
const look = this.getAttribute("look") ?? "";
|
|
191
|
+
this.view.setLook(look);
|
|
192
|
+
this.anim?.setLook(look);
|
|
193
|
+
} else this.view.setOptions(this.options());
|
|
194
|
+
this.view.update(this.stillPose());
|
|
195
|
+
this.loop();
|
|
196
|
+
}
|
|
197
|
+
loop() {
|
|
198
|
+
if (!this.hasAttribute("animate") || this.raf !== 0 || !this.isConnected) return;
|
|
199
|
+
const tick = (t) => {
|
|
200
|
+
this.raf = 0;
|
|
201
|
+
if (!this.isConnected || !this.hasAttribute("animate")) return;
|
|
202
|
+
if (t - this.last >= FRAME_MS) {
|
|
203
|
+
this.last = t;
|
|
204
|
+
const expression = this.getAttribute("expression") ?? "neutral";
|
|
205
|
+
if (expression !== this.base && isExpression(expression)) {
|
|
206
|
+
this.base = expression;
|
|
207
|
+
this.animator.setBase(expression, { at: t });
|
|
208
|
+
}
|
|
209
|
+
const still = this.stillPose();
|
|
210
|
+
this.view?.update({
|
|
211
|
+
...this.animator.pose(t),
|
|
212
|
+
...still.body ? { body: still.body } : {},
|
|
213
|
+
...still.status ? { status: still.status } : {}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
this.raf = requestAnimationFrame(tick);
|
|
217
|
+
};
|
|
218
|
+
this.raf = requestAnimationFrame(tick);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
_defineProperty(DgAvatar, "observedAttributes", AVATAR_ATTRIBUTES);
|
|
222
|
+
customElements.define(tag, DgAvatar);
|
|
223
|
+
}
|
|
224
|
+
//#endregion
|
|
225
|
+
//#region src/avatar/outputs/overlay-svg.ts
|
|
226
|
+
/** An overlay as a standalone `<svg>` (for DOM surfaces) or painted on a canvas at its anchor. */
|
|
227
|
+
/** The overlay as an `<svg>` of its own size (decorative). */
|
|
228
|
+
function overlaySvg(overlay, scale = 1) {
|
|
229
|
+
const [left, top, w, h] = overlay.box;
|
|
230
|
+
const { body, defs } = sceneToSvg(overlay.nodes, nextPrefix({}));
|
|
231
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${n(left)} ${n(top)} ${n(w)} ${n(h)}" width="${n(w * scale)}" height="${n(h * scale)}" aria-hidden="true">${defs ? `<defs>${defs}</defs>` : ""}${body}</svg>`;
|
|
232
|
+
}
|
|
233
|
+
/** Paints an overlay with its anchor at (x, y). */
|
|
234
|
+
function paintOverlay(ctx, overlay, atX, atY, scale = 1) {
|
|
235
|
+
ctx.save();
|
|
236
|
+
ctx.translate(atX, atY);
|
|
237
|
+
ctx.scale(scale, scale);
|
|
238
|
+
paintNodes(ctx, overlay.nodes);
|
|
239
|
+
ctx.restore();
|
|
240
|
+
}
|
|
241
|
+
//#endregion
|
|
242
|
+
//#region src/avatar/catalog-view.ts
|
|
243
|
+
/** The catalog as the designer and games see it: parts per category, palettes and the revision. */
|
|
244
|
+
/** The catalog view. */
|
|
245
|
+
const catalog = {
|
|
246
|
+
/** The parts of a category in designer order (retired parts hidden). */
|
|
247
|
+
parts(category) {
|
|
248
|
+
return partsOf$1(category);
|
|
249
|
+
},
|
|
250
|
+
/** Every colour palette. */
|
|
251
|
+
palettes: PALETTES$1,
|
|
252
|
+
/** The catalog revision this build knows. */
|
|
253
|
+
revision: CATALOG_REVISION$1
|
|
254
|
+
};
|
|
255
|
+
//#endregion
|
|
256
|
+
//#region src/avatar/atlas.ts
|
|
257
|
+
const MIRRORED = {
|
|
258
|
+
W: "E",
|
|
259
|
+
SW: "SE",
|
|
260
|
+
NW: "NE"
|
|
261
|
+
};
|
|
262
|
+
const STEPS = {
|
|
263
|
+
walk: 8,
|
|
264
|
+
run: 8,
|
|
265
|
+
idle: 4,
|
|
266
|
+
dance: 8,
|
|
267
|
+
jump: 6,
|
|
268
|
+
cheer: 6
|
|
269
|
+
};
|
|
270
|
+
/** The rig box every frame bakes: wide enough for hats, props and the rim. */
|
|
271
|
+
const BOX = {
|
|
272
|
+
x: -90,
|
|
273
|
+
y: -210,
|
|
274
|
+
w: 180,
|
|
275
|
+
h: 226
|
|
276
|
+
};
|
|
277
|
+
/** The walker's box: its full frame plus a margin for the rim. */
|
|
278
|
+
const WALKER_BOX = {
|
|
279
|
+
x: WALKER_FULL[0] + 4,
|
|
280
|
+
y: WALKER_FULL[1] - 2,
|
|
281
|
+
w: WALKER_FULL[2] - 8,
|
|
282
|
+
h: WALKER_FULL[3] + 2
|
|
283
|
+
};
|
|
284
|
+
/** The atlas. */
|
|
285
|
+
var AvatarAtlas = class {
|
|
286
|
+
constructor(opts = {}) {
|
|
287
|
+
_defineProperty(this, "pageSize", void 0);
|
|
288
|
+
_defineProperty(this, "scale", void 0);
|
|
289
|
+
_defineProperty(this, "maxPages", void 0);
|
|
290
|
+
_defineProperty(this, "rim", void 0);
|
|
291
|
+
_defineProperty(this, "figure", void 0);
|
|
292
|
+
_defineProperty(this, "box", void 0);
|
|
293
|
+
_defineProperty(this, "makeCanvas", void 0);
|
|
294
|
+
_defineProperty(this, "pages", []);
|
|
295
|
+
_defineProperty(this, "frames", /* @__PURE__ */ new Map());
|
|
296
|
+
_defineProperty(this, "queue", /* @__PURE__ */ new Map());
|
|
297
|
+
_defineProperty(this, "latestByLook", /* @__PURE__ */ new Map());
|
|
298
|
+
_defineProperty(this, "clock", 0);
|
|
299
|
+
this.pageSize = opts.pageSize ?? 2048;
|
|
300
|
+
this.maxPages = opts.maxPages ?? 4;
|
|
301
|
+
this.scale = opts.scale ?? .32;
|
|
302
|
+
this.rim = opts.rim ?? true;
|
|
303
|
+
this.figure = opts.figure ?? "blob";
|
|
304
|
+
this.box = this.figure === "walker" ? WALKER_BOX : BOX;
|
|
305
|
+
this.makeCanvas = opts.makeCanvas ?? ((size) => defaultLayer(size, size));
|
|
306
|
+
}
|
|
307
|
+
/** The frame for a key: the baked frame, or `null` (queued for {@link bake}). */
|
|
308
|
+
frame(key) {
|
|
309
|
+
const id = this.keyOf(key);
|
|
310
|
+
const isMirror = MIRRORED[key.facing ?? "S"] !== void 0;
|
|
311
|
+
const hit = this.live(id);
|
|
312
|
+
if (hit) return {
|
|
313
|
+
...hit,
|
|
314
|
+
mirror: isMirror
|
|
315
|
+
};
|
|
316
|
+
this.queue.set(id, key);
|
|
317
|
+
const standIn = this.live(this.latestByLook.get(toCode(key.look)) ?? "");
|
|
318
|
+
return standIn ? {
|
|
319
|
+
...standIn,
|
|
320
|
+
mirror: isMirror
|
|
321
|
+
} : null;
|
|
322
|
+
}
|
|
323
|
+
/** A baked frame whose page still holds it (touching the page for the LRU). */
|
|
324
|
+
live(id) {
|
|
325
|
+
const hit = this.frames.get(id);
|
|
326
|
+
const page = hit ? this.pages[hit.page] : void 0;
|
|
327
|
+
if (!hit || page?.version !== hit.version) return;
|
|
328
|
+
page.used = this.clock += 1;
|
|
329
|
+
return hit;
|
|
330
|
+
}
|
|
331
|
+
/** Bakes queued frames for up to `budgetMs` (default 4 ms), oldest first. Returns how many were baked. */
|
|
332
|
+
bake(budgetMs = 4, now = () => typeof performance === "undefined" ? Date.now() : performance.now()) {
|
|
333
|
+
const start = now();
|
|
334
|
+
let baked = 0;
|
|
335
|
+
for (const [id, key] of this.queue) {
|
|
336
|
+
if (baked > 0 && now() - start > budgetMs) break;
|
|
337
|
+
this.queue.delete(id);
|
|
338
|
+
if (this.bakeOne(id, key)) baked += 1;
|
|
339
|
+
}
|
|
340
|
+
return baked;
|
|
341
|
+
}
|
|
342
|
+
/** Frames still waiting to bake. */
|
|
343
|
+
get pending() {
|
|
344
|
+
return this.queue.size;
|
|
345
|
+
}
|
|
346
|
+
/** Every page's image (for texture uploads). */
|
|
347
|
+
get sources() {
|
|
348
|
+
return this.pages.map((p) => p.canvas);
|
|
349
|
+
}
|
|
350
|
+
keyOf(key) {
|
|
351
|
+
const facing = MIRRORED[key.facing ?? "S"] ?? key.facing ?? "S";
|
|
352
|
+
const body = key.body ?? "idle";
|
|
353
|
+
const steps = STEPS[body] ?? 1;
|
|
354
|
+
const step = Math.floor((key.phase ?? 0) % 1 * steps);
|
|
355
|
+
return [
|
|
356
|
+
toCode(key.look),
|
|
357
|
+
facing,
|
|
358
|
+
body,
|
|
359
|
+
String(step),
|
|
360
|
+
key.face ?? "neutral",
|
|
361
|
+
key.status ?? "",
|
|
362
|
+
String(key.scale ?? this.scale)
|
|
363
|
+
].join("~");
|
|
364
|
+
}
|
|
365
|
+
place(w, h) {
|
|
366
|
+
for (let i = 0; i < this.pages.length; i += 1) {
|
|
367
|
+
const p = this.pages[i];
|
|
368
|
+
if (!p) continue;
|
|
369
|
+
if (p.shelfX + w > this.pageSize) {
|
|
370
|
+
p.shelfY += p.shelfH;
|
|
371
|
+
p.shelfX = 0;
|
|
372
|
+
p.shelfH = 0;
|
|
373
|
+
}
|
|
374
|
+
if (p.shelfY + h <= this.pageSize) {
|
|
375
|
+
const spot = {
|
|
376
|
+
page: i,
|
|
377
|
+
x: p.shelfX,
|
|
378
|
+
y: p.shelfY
|
|
379
|
+
};
|
|
380
|
+
p.shelfX += w;
|
|
381
|
+
p.shelfH = Math.max(p.shelfH, h);
|
|
382
|
+
return spot;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (this.pages.length < this.maxPages) {
|
|
386
|
+
const made = this.makeCanvas(this.pageSize);
|
|
387
|
+
if (!made) return null;
|
|
388
|
+
this.pages.push({
|
|
389
|
+
canvas: made.canvas,
|
|
390
|
+
ctx: made.ctx,
|
|
391
|
+
shelfX: 0,
|
|
392
|
+
shelfY: 0,
|
|
393
|
+
shelfH: 0,
|
|
394
|
+
used: 0,
|
|
395
|
+
version: 1
|
|
396
|
+
});
|
|
397
|
+
return this.place(w, h);
|
|
398
|
+
}
|
|
399
|
+
let oldest = 0;
|
|
400
|
+
this.pages.forEach((p, i) => {
|
|
401
|
+
if (p.used < (this.pages[oldest]?.used ?? Infinity)) oldest = i;
|
|
402
|
+
});
|
|
403
|
+
const page = this.pages[oldest];
|
|
404
|
+
if (!page) return null;
|
|
405
|
+
page.ctx.clearRect(0, 0, this.pageSize, this.pageSize);
|
|
406
|
+
page.version += 1;
|
|
407
|
+
page.shelfX = 0;
|
|
408
|
+
page.shelfY = 0;
|
|
409
|
+
page.shelfH = 0;
|
|
410
|
+
return this.place(w, h);
|
|
411
|
+
}
|
|
412
|
+
bakeOne(id, key) {
|
|
413
|
+
const scale = key.scale ?? this.scale;
|
|
414
|
+
const box = this.box;
|
|
415
|
+
const w = Math.ceil(box.w * scale) + 2;
|
|
416
|
+
const h = Math.ceil(box.h * scale) + 2;
|
|
417
|
+
const spot = this.place(w, h);
|
|
418
|
+
const page = spot ? this.pages[spot.page] : void 0;
|
|
419
|
+
if (!spot || !page) return false;
|
|
420
|
+
const facing = MIRRORED[key.facing ?? "S"] ?? key.facing ?? "S";
|
|
421
|
+
const body = key.body ?? "idle";
|
|
422
|
+
const steps = STEPS[body] ?? 1;
|
|
423
|
+
const phase = (Math.floor((key.phase ?? 0) % 1 * steps) + .5) / steps;
|
|
424
|
+
const face = key.face ?? "neutral";
|
|
425
|
+
const { nodes } = composeAvatar(toLook(key.look), {
|
|
426
|
+
frame: "full",
|
|
427
|
+
figure: this.figure,
|
|
428
|
+
facing,
|
|
429
|
+
rim: this.rim,
|
|
430
|
+
shadow: false,
|
|
431
|
+
pose: {
|
|
432
|
+
expression: face,
|
|
433
|
+
body,
|
|
434
|
+
phase,
|
|
435
|
+
status: key.status ?? null
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
const scratch = defaultLayer(w, h);
|
|
439
|
+
if (!scratch) return false;
|
|
440
|
+
scratch.ctx.translate(1 - box.x * scale, 1 - box.y * scale);
|
|
441
|
+
scratch.ctx.scale(scale, scale);
|
|
442
|
+
paintNodes(scratch.ctx, nodes, defaultLayer);
|
|
443
|
+
page.ctx.clearRect(spot.x, spot.y, w, h);
|
|
444
|
+
page.ctx.drawImage(scratch.canvas, spot.x, spot.y);
|
|
445
|
+
page.used = this.clock += 1;
|
|
446
|
+
this.latestByLook.set(toCode(key.look), id);
|
|
447
|
+
this.frames.set(id, {
|
|
448
|
+
page: spot.page,
|
|
449
|
+
source: page.canvas,
|
|
450
|
+
x: spot.x,
|
|
451
|
+
y: spot.y,
|
|
452
|
+
w,
|
|
453
|
+
h,
|
|
454
|
+
footX: 1 - box.x * scale,
|
|
455
|
+
footY: 1 - box.y * scale,
|
|
456
|
+
mirror: false,
|
|
457
|
+
version: page.version
|
|
458
|
+
});
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
};
|
|
462
|
+
/** A new atlas (one per scene; pages are shared by every avatar in it). */
|
|
463
|
+
function createAtlas(opts = {}) {
|
|
464
|
+
return new AvatarAtlas(opts);
|
|
465
|
+
}
|
|
466
|
+
//#endregion
|
|
467
|
+
//#region src/avatar.ts
|
|
468
|
+
/**
|
|
469
|
+
* `@diffenderfer-games/hub/avatar`: draw players' avatars in any game.
|
|
470
|
+
*
|
|
471
|
+
* ```ts
|
|
472
|
+
* import { ready, render, animator } from '@diffenderfer-games/hub/avatar';
|
|
473
|
+
*
|
|
474
|
+
* await ready(); // loads the art once
|
|
475
|
+
* el.innerHTML = render.svg(seat.look, { size: 48 });
|
|
476
|
+
* const anim = animator(seat.look, { seed: seat.userId });
|
|
477
|
+
* anim.express('happy');
|
|
478
|
+
* render.canvas(ctx, seat.look, { x, y, size: 64, pose: anim.pose(now) });
|
|
479
|
+
* ```
|
|
480
|
+
*
|
|
481
|
+
* The art loads lazily (`ready()`); before it does, renders draw the
|
|
482
|
+
* silhouette. Zero dependencies; the Pixi and three.js adapters take the
|
|
483
|
+
* library as an argument (`/avatar/pixi`, `/avatar/three`). Docs: "Avatars"
|
|
484
|
+
* in docs/hub.md.
|
|
485
|
+
*
|
|
486
|
+
* @packageDocumentation
|
|
487
|
+
*/
|
|
488
|
+
/** Every output: SVG markup, a live element, Canvas 2D, a bitmap or a data URL. */
|
|
489
|
+
const render = {
|
|
490
|
+
svg: renderSvg,
|
|
491
|
+
element: renderElement,
|
|
492
|
+
canvas: renderCanvas,
|
|
493
|
+
canvasAt: renderCanvasAt,
|
|
494
|
+
bitmap: renderBitmap,
|
|
495
|
+
dataUrl: renderDataUrl
|
|
496
|
+
};
|
|
497
|
+
//#endregion
|
|
498
|
+
export { ACCESSORY_SLOTS, Animator, AvatarAtlas, CATALOG, CATALOG_REVISION, DEFAULT_GEN, EXPRESSIONS, EXPRESSION_NAMES, FRAME_PRESETS, HEAD_Y, LOOK_CODE_PREFIX, PALETTES, REACTIONS, SECOND_COLOUR_CODE, WALKER_HEAD_SCALE, WALKER_SEAT_DROP, animator, avatarEmoji, canonicalLook, catalog, composeAvatar, contrast, createAtlas, decodeLook, defaultLook, defineAvatarElement, deltaE, describe, distinctLooks, encodeLook, expressionFromEmote, facingFrom, isExpression, isLookCode, isTinted, isValidLook, layout, lightness, lookProblem, lookToward, mix, normaliseHex, onArtReady, overlaySvg, overlays, paintNodes, paintOverlay, partById, partName, partsOf, randomLook, ready, render, resolveColour, sameLook, sceneToSvg, seededRng, toCode, toLook };
|
|
499
|
+
|
|
500
|
+
//# sourceMappingURL=avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.js","names":["partsOf","PALETTES","CATALOG_REVISION"],"sources":["../src/avatar/outputs/element.ts","../src/avatar/outputs/custom-element.ts","../src/avatar/outputs/overlay-svg.ts","../src/avatar/catalog-view.ts","../src/avatar/atlas.ts","../src/avatar.ts"],"mappings":"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"}
|
package/dist/daily.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as
|
|
2
|
-
export { DAILY_SINGLETON_API, DAILY_START_EVENT, type DailyAll, type DailyChallenge, type DailyCompleteResponse, type DailyCompletion, type DailyCompletionMeta, type DailyCompletions, type DailyDefinition, type DailyEventDetail, type DailyGameStatus, type DailyHost, type DailyStartResponse, type DailyStatus, DailySystem, getDaily, isDailySystem };
|
|
1
|
+
import { _ as DailyStartResponse, a as isDailySystem, c as DailyAll, d as DailyCompletionMeta, f as DailyDefinition, g as DailySaveInput, h as DailyHost, i as getDaily, l as DailyChallenge, m as DailyGameStatus, n as DailyCompletions, o as DAILY_START_EVENT, p as DailyEventDetail, r as DAILY_SINGLETON_API, s as DailySystem, t as DailyCompletion, u as DailyCompleteResponse, v as DailyStatus } from "./shared/daily.js";
|
|
2
|
+
export { DAILY_SINGLETON_API, DAILY_START_EVENT, type DailyAll, type DailyChallenge, type DailyCompleteResponse, type DailyCompletion, type DailyCompletionMeta, type DailyCompletions, type DailyDefinition, type DailyEventDetail, type DailyGameStatus, type DailyHost, type DailySaveInput, type DailyStartResponse, type DailyStatus, DailySystem, getDaily, isDailySystem };
|