@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.
Files changed (293) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/LICENSE +21 -21
  3. package/README.md +203 -139
  4. package/dist/auto.d.ts +8 -8
  5. package/dist/auto.js +3 -3
  6. package/dist/avatar-pixi.d.ts +165 -0
  7. package/dist/avatar-pixi.d.ts.map +1 -0
  8. package/dist/avatar-pixi.js +299 -0
  9. package/dist/avatar-pixi.js.map +1 -0
  10. package/dist/avatar-svg.d.ts +4 -0
  11. package/dist/avatar-svg.js +5 -0
  12. package/dist/avatar-three.d.ts +69 -0
  13. package/dist/avatar-three.d.ts.map +1 -0
  14. package/dist/avatar-three.js +49 -0
  15. package/dist/avatar-three.js.map +1 -0
  16. package/dist/avatar.d.ts +7 -0
  17. package/dist/avatar.js +500 -0
  18. package/dist/avatar.js.map +1 -0
  19. package/dist/daily.d.ts +2 -2
  20. package/dist/doctor/cli.mjs +119 -28
  21. package/dist/doctor/cli.mjs.map +1 -1
  22. package/dist/index.d.ts +8 -8
  23. package/dist/index.js +3 -3
  24. package/dist/input.d.ts +2 -2
  25. package/dist/input.js +2 -2
  26. package/dist/mp.d.ts +3 -3
  27. package/dist/race.d.ts +1 -1
  28. package/dist/rooms.d.ts +3 -3
  29. package/dist/rooms.js +1 -1
  30. package/dist/shared/animator.d.ts +104 -0
  31. package/dist/shared/animator.d.ts.map +1 -0
  32. package/dist/shared/art.js +1946 -0
  33. package/dist/shared/art.js.map +1 -0
  34. package/dist/shared/atlas.d.ts +138 -0
  35. package/dist/shared/atlas.d.ts.map +1 -0
  36. package/dist/shared/avatar.d.ts +123 -0
  37. package/dist/shared/avatar.d.ts.map +1 -0
  38. package/dist/shared/bridge.js +18 -4
  39. package/dist/shared/bridge.js.map +1 -1
  40. package/dist/shared/client-version.gen.js +1 -1
  41. package/dist/shared/daily.d.ts +145 -19
  42. package/dist/shared/daily.d.ts.map +1 -1
  43. package/dist/shared/daily.js +138 -25
  44. package/dist/shared/daily.js.map +1 -1
  45. package/dist/shared/defineProperty.js +39 -0
  46. package/dist/shared/describe.d.ts +32 -0
  47. package/dist/shared/describe.d.ts.map +1 -0
  48. package/dist/shared/describe.js +109 -0
  49. package/dist/shared/describe.js.map +1 -0
  50. package/dist/shared/globals.js +9 -42
  51. package/dist/shared/globals.js.map +1 -1
  52. package/dist/shared/index.d.ts +1122 -46
  53. package/dist/shared/index.d.ts.map +1 -1
  54. package/dist/shared/input.d.ts +74 -14
  55. package/dist/shared/input.d.ts.map +1 -1
  56. package/dist/shared/input.js +179 -25
  57. package/dist/shared/input.js.map +1 -1
  58. package/dist/shared/json-guards.js +48 -0
  59. package/dist/shared/json-guards.js.map +1 -0
  60. package/dist/shared/latest-state.js +1 -1
  61. package/dist/shared/live-canvas.js +62 -0
  62. package/dist/shared/live-canvas.js.map +1 -0
  63. package/dist/shared/mp.js +10 -2
  64. package/dist/shared/mp.js.map +1 -1
  65. package/dist/shared/multiplayer-types.d.ts +15 -2
  66. package/dist/shared/multiplayer-types.d.ts.map +1 -1
  67. package/dist/shared/overlays.js +800 -0
  68. package/dist/shared/overlays.js.map +1 -0
  69. package/dist/shared/page-stack.js +2 -1
  70. package/dist/shared/page-stack.js.map +1 -1
  71. package/dist/shared/pose-key.js +249 -0
  72. package/dist/shared/pose-key.js.map +1 -0
  73. package/dist/shared/race-types.d.ts +1 -1
  74. package/dist/shared/race.js +1 -1
  75. package/dist/shared/room-types.d.ts +28 -3
  76. package/dist/shared/room-types.d.ts.map +1 -1
  77. package/dist/shared/rooms.d.ts.map +1 -1
  78. package/dist/shared/rooms.js +23 -4
  79. package/dist/shared/rooms.js.map +1 -1
  80. package/dist/shared/runtime-opener.js +1 -1
  81. package/dist/shared/scene.d.ts +90 -0
  82. package/dist/shared/scene.d.ts.map +1 -0
  83. package/dist/shared/social.d.ts +90 -9
  84. package/dist/shared/social.d.ts.map +1 -1
  85. package/dist/shared/social.js +6 -1
  86. package/dist/shared/social.js.map +1 -1
  87. package/dist/shared/src.js +4563 -667
  88. package/dist/shared/src.js.map +1 -1
  89. package/dist/shared/svg-markup.js +2354 -0
  90. package/dist/shared/svg-markup.js.map +1 -0
  91. package/dist/shared/svg.js +27 -0
  92. package/dist/shared/svg.js.map +1 -0
  93. package/dist/shared/types.d.ts +174 -0
  94. package/dist/shared/types.d.ts.map +1 -0
  95. package/dist/shared/wire-types.d.ts +6 -2
  96. package/dist/shared/wire-types.d.ts.map +1 -1
  97. package/dist/social.d.ts +5 -5
  98. package/dist/social.js +2 -2
  99. package/dist/turns-rules.d.ts +2 -0
  100. package/dist/turns-rules.js +1 -0
  101. package/dist/turns.d.ts +61 -0
  102. package/dist/turns.d.ts.map +1 -0
  103. package/dist/turns.js +183 -0
  104. package/dist/turns.js.map +1 -0
  105. package/package.json +125 -89
  106. package/src/auto.ts +39 -39
  107. package/src/avatar/adapters/pixi-avatar.ts +73 -0
  108. package/src/avatar/adapters/pixi-crowd.ts +329 -0
  109. package/src/avatar/adapters/pixi-types.ts +84 -0
  110. package/src/avatar/adapters/three.ts +126 -0
  111. package/src/avatar/animator/animator.ts +285 -0
  112. package/src/avatar/animator/reactions.ts +44 -0
  113. package/src/avatar/animator/schedule.ts +73 -0
  114. package/src/avatar/art/beard.ts +49 -0
  115. package/src/avatar/art/glasses.ts +67 -0
  116. package/src/avatar/art/hair.ts +254 -0
  117. package/src/avatar/art/headwear.ts +75 -0
  118. package/src/avatar/art/index.ts +21 -0
  119. package/src/avatar/art/shape.ts +87 -0
  120. package/src/avatar/art-store.ts +36 -0
  121. package/src/avatar/atlas.ts +246 -0
  122. package/src/avatar/catalog-view.ts +14 -0
  123. package/src/avatar/colour.ts +109 -0
  124. package/src/avatar/describe.ts +79 -0
  125. package/src/avatar/face.ts +187 -0
  126. package/src/avatar/geom.ts +173 -0
  127. package/src/avatar/layout.ts +47 -0
  128. package/src/avatar/look-like.ts +52 -0
  129. package/src/avatar/outputs/bitmap.ts +75 -0
  130. package/src/avatar/outputs/canvas-paint.ts +177 -0
  131. package/src/avatar/outputs/canvas.ts +62 -0
  132. package/src/avatar/outputs/custom-element.ts +140 -0
  133. package/src/avatar/outputs/element.ts +58 -0
  134. package/src/avatar/outputs/live-canvas.ts +57 -0
  135. package/src/avatar/outputs/overlay-svg.ts +22 -0
  136. package/src/avatar/outputs/pose-key.ts +30 -0
  137. package/src/avatar/outputs/svg-markup.ts +113 -0
  138. package/src/avatar/outputs/svg.ts +41 -0
  139. package/src/avatar/overlays.ts +128 -0
  140. package/src/avatar/render/body.ts +116 -0
  141. package/src/avatar/render/colours.ts +81 -0
  142. package/src/avatar/render/compose.ts +320 -0
  143. package/src/avatar/render/context.ts +117 -0
  144. package/src/avatar/render/eyes.ts +78 -0
  145. package/src/avatar/render/eyewear.ts +118 -0
  146. package/src/avatar/render/frame.ts +73 -0
  147. package/src/avatar/render/head.ts +81 -0
  148. package/src/avatar/render/mouth.ts +86 -0
  149. package/src/avatar/render/props.ts +91 -0
  150. package/src/avatar/render/types.ts +93 -0
  151. package/src/avatar/render/walker-parts.ts +121 -0
  152. package/src/avatar/render/walker.ts +199 -0
  153. package/src/avatar/scene.ts +119 -0
  154. package/src/avatar-pixi.ts +20 -0
  155. package/src/avatar-svg.ts +21 -0
  156. package/src/avatar-three.ts +18 -0
  157. package/src/avatar.ts +63 -0
  158. package/src/core/avatar/avatar-cache.ts +95 -0
  159. package/src/core/avatar/avatar-ref.ts +34 -0
  160. package/src/core/avatar/avatar-types.ts +43 -0
  161. package/src/core/avatar/hub-avatar.ts +308 -0
  162. package/src/core/connection.ts +408 -299
  163. package/src/core/errors.ts +160 -147
  164. package/src/core/game-data.ts +40 -38
  165. package/src/core/hub-economy.ts +216 -179
  166. package/src/core/hub-progress.ts +269 -205
  167. package/src/core/hub.ts +352 -131
  168. package/src/core/menu-control.ts +61 -61
  169. package/src/core/offline/cloud-saves.ts +62 -0
  170. package/src/core/offline/events.ts +50 -50
  171. package/src/core/offline/favorites.ts +21 -21
  172. package/src/core/offline/hub-kinds/avatar-kind.ts +42 -0
  173. package/src/core/offline/hub-kinds/daily-kind.ts +68 -0
  174. package/src/core/offline/hub-kinds/economy-kinds.ts +86 -0
  175. package/src/core/offline/hub-kinds/game-fields.ts +2 -0
  176. package/src/core/offline/hub-kinds/index.ts +52 -0
  177. package/src/core/offline/hub-kinds/legacy-ops.ts +37 -0
  178. package/src/core/offline/hub-kinds/progress-kinds.ts +165 -0
  179. package/src/core/offline/hub-kinds/resume-kind.ts +108 -0
  180. package/src/core/offline/hub-kinds/saved-kind.ts +93 -0
  181. package/src/core/offline/kind-adapters.ts +48 -0
  182. package/src/core/offline/local-inventory.ts +64 -0
  183. package/src/core/offline/local-store.ts +304 -261
  184. package/src/core/offline/offline-api.ts +65 -0
  185. package/src/core/offline/outbox-entry.ts +59 -0
  186. package/src/core/offline/outbox-kinds.ts +78 -0
  187. package/src/core/offline/outbox-merge.ts +39 -0
  188. package/src/core/offline/outbox-replayer.ts +141 -0
  189. package/src/core/offline/outbox-store.ts +85 -0
  190. package/src/core/offline/outbox.ts +232 -0
  191. package/src/core/offline/queue.ts +126 -171
  192. package/src/core/offline/replay-lease.ts +87 -0
  193. package/src/core/offline/replay-policy.ts +52 -0
  194. package/src/core/page-account.ts +121 -0
  195. package/src/core/page.ts +87 -74
  196. package/src/core/rest/endpoint-types.ts +22 -22
  197. package/src/core/rest/rest-client.ts +163 -152
  198. package/src/core/rest/routes.gen.ts +144 -88
  199. package/src/core/resume/hub-resume.ts +286 -0
  200. package/src/core/resume/local-resume.ts +130 -0
  201. package/src/core/resume/resume-list.ts +65 -0
  202. package/src/core/resume/resume-request.ts +52 -0
  203. package/src/core/resume/resume-types.ts +64 -0
  204. package/src/core/saved/daily-saves.ts +196 -0
  205. package/src/core/saved/daily-seed.ts +16 -0
  206. package/src/core/saved/hub-saved.ts +221 -0
  207. package/src/core/saved/local-saved.ts +122 -0
  208. package/src/core/saved/saved-list.ts +129 -0
  209. package/src/core/saved/saved-open.ts +104 -0
  210. package/src/core/saved/saved-order.ts +49 -0
  211. package/src/core/saved/saved-types.ts +24 -0
  212. package/src/core/storage/json-guards.ts +80 -74
  213. package/src/core/storage/key-value.ts +66 -66
  214. package/src/core/ticket.ts +43 -43
  215. package/src/core/turns/hub-turns.ts +161 -0
  216. package/src/core/turns/turn-game.ts +510 -0
  217. package/src/core/turns/your-turn-buzz.ts +69 -0
  218. package/src/core/types.ts +134 -134
  219. package/src/core/version/client-version.gen.ts +2 -2
  220. package/src/core/version/hub-version.ts +62 -62
  221. package/src/core/version/semver.ts +97 -97
  222. package/src/daily/daily-system.ts +276 -161
  223. package/src/daily/page-daily.ts +36 -36
  224. package/src/daily/types.ts +105 -67
  225. package/src/daily.ts +10 -10
  226. package/src/doctor/checks.ts +86 -76
  227. package/src/doctor/cli.ts +101 -106
  228. package/src/doctor/hub-version-fetch.ts +43 -0
  229. package/src/doctor/tsconfig.json +12 -12
  230. package/src/doctor/world-check.ts +61 -0
  231. package/src/globals.ts +115 -110
  232. package/src/index.ts +68 -50
  233. package/src/input/device-state.ts +146 -146
  234. package/src/input/edges.ts +55 -55
  235. package/src/input/focus-ring.ts +13 -0
  236. package/src/input/gamepad.ts +61 -61
  237. package/src/input/input-events.ts +32 -32
  238. package/src/input/input-registry.ts +171 -164
  239. package/src/input/input-system.ts +406 -393
  240. package/src/input/legacy-controls.ts +64 -64
  241. package/src/input/modality.ts +122 -0
  242. package/src/input/nav-state.ts +200 -191
  243. package/src/input/navigator.ts +182 -171
  244. package/src/input/on-screen-controls.ts +101 -101
  245. package/src/input/page-control.ts +43 -43
  246. package/src/input/page-input.ts +193 -193
  247. package/src/input/player-remaps.ts +77 -77
  248. package/src/input/source-values.ts +116 -116
  249. package/src/input/spatial.ts +47 -47
  250. package/src/input/types.ts +331 -331
  251. package/src/input/zero-config.ts +164 -177
  252. package/src/input.ts +26 -22
  253. package/src/mp.ts +10 -10
  254. package/src/overlay/controls-panel.ts +163 -163
  255. package/src/overlay/dom.ts +46 -46
  256. package/src/overlay/layout-clusters.ts +162 -162
  257. package/src/overlay/layout-geometry.ts +136 -136
  258. package/src/overlay/layout.ts +203 -203
  259. package/src/overlay/listener-scope.ts +23 -23
  260. package/src/overlay/on-screen-keyboard.ts +137 -137
  261. package/src/overlay/overlay.ts +234 -208
  262. package/src/overlay/styles.ts +13 -12
  263. package/src/overlay/virtual-controls.ts +262 -262
  264. package/src/race.ts +10 -10
  265. package/src/realtime/bridge.ts +126 -121
  266. package/src/realtime/cross-bundle.ts +29 -29
  267. package/src/realtime/fallback-notice.ts +48 -48
  268. package/src/realtime/hub-link.ts +65 -65
  269. package/src/realtime/latest-state.ts +33 -33
  270. package/src/realtime/multiplayer-forwarder.ts +40 -28
  271. package/src/realtime/multiplayer-types.ts +66 -52
  272. package/src/realtime/page-runtime.ts +60 -60
  273. package/src/realtime/race-forwarder.ts +59 -59
  274. package/src/realtime/race-types.ts +132 -132
  275. package/src/realtime/room-types.ts +151 -125
  276. package/src/realtime/rooms-forwarder.ts +104 -79
  277. package/src/realtime/runtime-api.ts +74 -49
  278. package/src/realtime/runtime-opener.ts +61 -61
  279. package/src/realtime/social-forwarder.ts +77 -72
  280. package/src/realtime/social-types.ts +86 -78
  281. package/src/realtime/types.ts +54 -53
  282. package/src/realtime/wire-types.ts +79 -72
  283. package/src/realtime/world-types.ts +20 -0
  284. package/src/rooms.ts +10 -10
  285. package/src/social.ts +19 -18
  286. package/src/turns-kit/check-rules.ts +281 -0
  287. package/src/turns-rules.ts +12 -0
  288. package/src/turns.ts +14 -0
  289. package/src/types.ts +13 -13
  290. package/src/uistack/page-stack.ts +45 -45
  291. package/src/uistack/play-suspension.ts +82 -82
  292. package/src/uistack/types.ts +76 -76
  293. 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"}
@@ -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 DailyStatus, a as isDailySystem, c as DailyAll, d as DailyCompletionMeta, f as DailyDefinition, g as DailyStartResponse, 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 } 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 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 };