tosijs-3d 0.12.0 → 0.12.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +4 -2
  2. package/changelog/v0.12.1.md +13 -0
  3. package/changelog/v0.12.2.md +26 -0
  4. package/dist/character-builder.d.ts +1 -24
  5. package/dist/character-builder.d.ts.map +1 -1
  6. package/dist/character-builder.js +62 -71
  7. package/dist/character-builder.js.map +1 -1
  8. package/dist/character-core.d.ts.map +1 -1
  9. package/dist/character-core.js +9 -1
  10. package/dist/character-core.js.map +1 -1
  11. package/dist/character-settings.d.ts.map +1 -1
  12. package/dist/character-settings.js +1 -0
  13. package/dist/character-settings.js.map +1 -1
  14. package/dist/character-store.d.ts +16 -0
  15. package/dist/character-store.d.ts.map +1 -1
  16. package/dist/character-store.js +17 -0
  17. package/dist/character-store.js.map +1 -1
  18. package/dist/character.d.ts.map +1 -1
  19. package/dist/character.js +22 -60
  20. package/dist/character.js.map +1 -1
  21. package/dist/cloth-bake.d.ts +12 -0
  22. package/dist/cloth-bake.d.ts.map +1 -0
  23. package/dist/cloth-bake.js +75 -0
  24. package/dist/cloth-bake.js.map +1 -0
  25. package/dist/extremes-bones.d.ts +31 -0
  26. package/dist/extremes-bones.d.ts.map +1 -0
  27. package/dist/extremes-bones.js +130 -0
  28. package/dist/extremes-bones.js.map +1 -0
  29. package/dist/extremes-corners.d.ts +17 -0
  30. package/dist/extremes-corners.d.ts.map +1 -0
  31. package/dist/extremes-corners.js +137 -0
  32. package/dist/extremes-corners.js.map +1 -0
  33. package/dist/extremes-penetration.d.ts +53 -0
  34. package/dist/extremes-penetration.d.ts.map +1 -0
  35. package/dist/extremes-penetration.js +120 -0
  36. package/dist/extremes-penetration.js.map +1 -0
  37. package/dist/extremes-report.d.ts +73 -0
  38. package/dist/extremes-report.d.ts.map +1 -0
  39. package/dist/extremes-report.js +303 -0
  40. package/dist/extremes-report.js.map +1 -0
  41. package/dist/extremes-sheet.d.ts +18 -0
  42. package/dist/extremes-sheet.d.ts.map +1 -0
  43. package/dist/extremes-sheet.js +239 -0
  44. package/dist/extremes-sheet.js.map +1 -0
  45. package/dist/extremes-sweep.d.ts +117 -0
  46. package/dist/extremes-sweep.d.ts.map +1 -0
  47. package/dist/extremes-sweep.js +258 -0
  48. package/dist/extremes-sweep.js.map +1 -0
  49. package/dist/eye-art.d.ts +52 -0
  50. package/dist/eye-art.d.ts.map +1 -0
  51. package/dist/eye-art.js +152 -0
  52. package/dist/eye-art.js.map +1 -0
  53. package/dist/fit-extremes.d.ts +7 -0
  54. package/dist/fit-extremes.d.ts.map +1 -0
  55. package/dist/fit-extremes.js +55 -0
  56. package/dist/fit-extremes.js.map +1 -0
  57. package/dist/glb-chunks.d.ts +44 -0
  58. package/dist/glb-chunks.d.ts.map +1 -0
  59. package/dist/glb-chunks.js +253 -0
  60. package/dist/glb-chunks.js.map +1 -0
  61. package/dist/hair-place.d.ts +135 -0
  62. package/dist/hair-place.d.ts.map +1 -0
  63. package/dist/hair-place.js +396 -0
  64. package/dist/hair-place.js.map +1 -0
  65. package/dist/human-face.d.ts +11 -1
  66. package/dist/human-face.d.ts.map +1 -1
  67. package/dist/human-face.js +86 -3
  68. package/dist/human-face.js.map +1 -1
  69. package/dist/human-hair.d.ts +5 -87
  70. package/dist/human-hair.d.ts.map +1 -1
  71. package/dist/human-hair.js +11 -245
  72. package/dist/human-hair.js.map +1 -1
  73. package/dist/index.d.ts +11 -6
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +6 -3
  76. package/dist/index.js.map +1 -1
  77. package/dist/mesh-sdf.d.ts +30 -0
  78. package/dist/mesh-sdf.d.ts.map +1 -0
  79. package/dist/mesh-sdf.js +453 -0
  80. package/dist/mesh-sdf.js.map +1 -0
  81. package/dist/png.d.ts +12 -0
  82. package/dist/png.d.ts.map +1 -1
  83. package/dist/png.js +82 -1
  84. package/dist/png.js.map +1 -1
  85. package/dist/proxy-cover.d.ts +23 -0
  86. package/dist/proxy-cover.d.ts.map +1 -1
  87. package/dist/proxy-cover.js +31 -18
  88. package/dist/proxy-cover.js.map +1 -1
  89. package/dist/skin-paint.d.ts +35 -0
  90. package/dist/skin-paint.d.ts.map +1 -0
  91. package/dist/skin-paint.js +156 -0
  92. package/dist/skin-paint.js.map +1 -0
  93. package/dist/skinned-glb.d.ts +107 -0
  94. package/dist/skinned-glb.d.ts.map +1 -0
  95. package/dist/skinned-glb.js +396 -0
  96. package/dist/skinned-glb.js.map +1 -0
  97. package/dist/widgets3d.d.ts +13 -0
  98. package/dist/widgets3d.d.ts.map +1 -1
  99. package/dist/widgets3d.js +31 -1
  100. package/dist/widgets3d.js.map +1 -1
  101. package/package.json +3 -1
  102. package/static/attributes.json +4 -0
  103. package/static/attributes.txt +1 -0
package/CHANGELOG.md CHANGED
@@ -12,13 +12,15 @@ Upgrading across a minor? Start with [Migration](/Migration/).
12
12
 
13
13
  ## Unreleased
14
14
 
15
- ## 0.12.0
15
+ ## 0.12.2
16
16
 
17
- The latest release. Vehicles you drive (a car and a tank on one pure model, with a chase camera that works flat and in a headset), a procedural city to drive them in, City Drive and Cross Country, models no longer drawn mirrored, and the character core promised engine-free. ⚠️ Breaking: see [0.12.0](/v0.12.0/) and [Migration](/Migration/).
17
+ The latest release. More of the character, engine-free (eyes from Tonio's art, hair placement, lips and stubble as vertex colours, cloth recoloured into its texture, the extremes sweep), and the builder's save and rename ask in a popup. See [0.12.2](/v0.12.2/).
18
18
 
19
19
  ## Every version
20
20
 
21
21
  <!-- toc -->
22
+ - [0.12.2](/v0.12.2/)
23
+ - [0.12.1](/v0.12.1/)
22
24
  - [0.12.0](/v0.12.0/)
23
25
  - [0.11.6](/v0.11.6/)
24
26
  - [0.11.5](/v0.11.5/)
@@ -0,0 +1,13 @@
1
+ # 0.12.1
2
+
3
+ <!--{ "parent": "CHANGELOG", "order": 9987999 }-->
4
+
5
+ A rigged, morphing body written out as a GLB, with no engine: the skinned GLB writer, moved here from Dramatis so other engines can use it.
6
+
7
+ Size: barrel (min, packages external) 1510.4 KB raw / 523.7 KB gz, unchanged (both modules are subpaths, not in the barrel).
8
+
9
+ ## Added
10
+
11
+ - **`tosijs-3d/skinned-glb`**: `writeSkinnedGlb` writes one skeleton, meshes skinned to it (four influences each, renormalised in float32), sparse morph targets named in `extras.targetNames`, and metallic-roughness materials (plus sheen) with embedded images. The result is clean under the Khronos glTF validator and loads in Babylon.
12
+ - **`tosijs-3d/glb-chunks`**: a GLB's chunks read and written, and its accessors read back. New code reads and writes GLB through it.
13
+ - Both are in the engine-free [character core](/character-core/): no Babylon in their import graph, types included.
@@ -0,0 +1,26 @@
1
+ # 0.12.2
2
+
3
+ <!--{ "parent": "CHANGELOG", "order": 9987998 }-->
4
+
5
+ More of the character, engine-free: eyes from Tonio's art, hair placed with no engine, lips and stubble as vertex colours, cloth recoloured into its texture, and the extremes sweep, all moved here from Dramatis. The character builder's save and rename ask in a popup.
6
+
7
+ Size: barrel (min, packages external) 1516.6 KB raw / 526.0 KB gz, up 6.2 KB / 2.3 KB gz (+0.4%): the eye art painter, `pngDecode` and the save popup are in the barrel; the rest are subpaths.
8
+
9
+ ## Added
10
+
11
+ - **Eyes from a picture**: `eyeTexture({ style: 'basic' | 'anime' })` paints Tonio's CC0 eye art with its iris recoloured, and a character's new `eyeStyle` setting picks it (`basic` by default; `drawn` keeps the eye drawn in code, which also shows while the art loads). `tosijs-3d/eye-art` is the engine-free half: the art's URLs, `recolourEyePng`, and `gltfEyeUvs` for an export. `pngDecode` joins `pngEncode`.
12
+ - **`tosijs-3d/hair-place`**: hair placed on a body's head with no engine (`headScalp`, `placeHair`, and the hair library read from its GLB with `readHairLibrary`). `human-hair` uses it and re-exports what it exported before.
13
+ - **Baked materials**: `tosijs-3d/skin-paint` (`lipTint`, `stubbleTint`, `stubbleMask`) gives the lips and stubble as per-vertex colours over the skin's albedo, and `writeSkinnedGlb` writes them as `COLOR_0` (a primitive's new `colors`), which glTF multiplies into the base colour, so no texture is needed. `tosijs-3d/cloth-bake` (`recolourCloth`, `textureMean`, `clothSheenColour`) bakes a garment's recolour into its texture as cloth-shading draws it. `lipTint` and `stubbleTint` moved from character-builder and are still exported from the barrel.
14
+ - **`tosijs-3d/fit-extremes`** and **`bun run extremes`**: every MakeHuman garment and Quaternius hairstyle on 133 bodies at the sliders' corners, measured for penetration (raw, and visible past the skin's tuck) and bone sanity, with a markdown/JSON report and a headless contact sheet of the worst cases.
15
+ - **`tosijs-3d/mesh-sdf`**: signed distance to a triangle mesh.
16
+ - **`coverDepths`** (proxy-cover): how deep each skin vertex goes under what is worn, the rule `coverSkin` applies before its fade.
17
+ - **`button3d({ popup })`**: a button that opens a small form (controls, flat and in a headset) in a popup anchored to it; the controls get a handle to close it or show the next step.
18
+ - All the new modules are in the engine-free [character core](/character-core/).
19
+
20
+ ## Changed
21
+
22
+ - **Character builder**: `save…` asks for the name in a popup (filled in with the current one), refuses a blank name or the working figure's with a reason, and asks before replacing another saved character; `rename…` renames the picked one. Both work in a headset. `nameCharacter` (character-store) is the rule.
23
+
24
+ ## Fixed
25
+
26
+ - Stubble no longer darkens the lower lip.
@@ -1,7 +1,6 @@
1
1
  import * as BABYLON from '@babylonjs/core';
2
2
  import type { HumanPack } from './human-pack.js';
3
3
  import { type SkinShadingPlugin } from './skin-shading.js';
4
- import type { HumanSkin } from './human-rig.js';
5
4
  export interface HumanBody {
6
5
  /** Move, turn and scale the body by this. */
7
6
  root: BABYLON.TransformNode;
@@ -29,27 +28,5 @@ export declare function skinMaterial(scene: BABYLON.Scene, options?: {
29
28
  /** `false` for plain PBR, without skin-shading's scatter, rim and back-light. */
30
29
  shading?: boolean;
31
30
  }): SkinMaterial;
32
- /**
33
- * Per-vertex colours (RGBA, the skin's vertices) that turn a skin material's
34
- * colour into the lips' where `lips` (a pack region, every vertex) says so.
35
- * They multiply the material's albedo, so they are the ratio lip / skin.
36
- * Their alpha carries `thin` (per skin vertex, from `skinThinness`), which
37
- * skin-shading's back-light reads; without it, alpha is 0 (nothing glows).
38
- */
39
- export declare function lipTint(skin: HumanSkin, lips: Float32Array, tone: number, redness?: number, into?: Float32Array, thin?: ArrayLike<number>): Float32Array;
40
- /**
41
- * Stubble: multiply `colours` (RGBA per skin vertex, from `lipTint`) toward
42
- * a hair colour where `mask` (0..1 per skin vertex) says the beard grows,
43
- * by `amount` (0 clean-shaven, 1 a few days' growth). `skinRgb` and `hairRgb`
44
- * are linear; the result stays a ratio over the skin's own colour.
45
- */
46
- export declare function stubbleTint(colours: Float32Array, mask: ArrayLike<number>, amount: number, skinRgb: {
47
- r: number;
48
- g: number;
49
- b: number;
50
- }, hairRgb: {
51
- r: number;
52
- g: number;
53
- b: number;
54
- }): Float32Array;
31
+ export { lipTint, stubbleTint } from './skin-paint.js';
55
32
  //# sourceMappingURL=character-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"character-builder.d.ts","sourceRoot":"","sources":["../src/character-builder.ts"],"names":[],"mappings":"AA23BA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,IAAI,EAAE,OAAO,CAAC,aAAa,CAAA;IAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAA;IAClB,8EAA8E;IAC9E,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;IACrC,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,IAAI,EAAE,SAAS,EACf,IAAI,SAAU,GACb,SAAS,CAwDX;AAED,MAAM,WAAW,YAAa,SAAQ,OAAO,CAAC,WAAW;IACvD,2EAA2E;IAC3E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,wFAAwF;IACxF,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAA;CACb,GACL,YAAY,CAmBd;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,SAAM,EACb,IAAI,CAAC,EAAE,YAAY,EACnB,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GACvB,YAAY,CAgBd;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5C,OAAO,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,YAAY,CA2Bd"}
1
+ {"version":3,"file":"character-builder.d.ts","sourceRoot":"","sources":["../src/character-builder.ts"],"names":[],"mappings":"AA66BA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEvE,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,IAAI,EAAE,OAAO,CAAC,aAAa,CAAA;IAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAA;IAClB,8EAA8E;IAC9E,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;IACrC,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,IAAI,EAAE,SAAS,EACf,IAAI,SAAU,GACb,SAAS,CAwDX;AAED,MAAM,WAAW,YAAa,SAAQ,OAAO,CAAC,WAAW;IACvD,2EAA2E;IAC3E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,wFAAwF;IACxF,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAA;CACb,GACL,YAAY,CAmBd;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA"}
@@ -11,26 +11,58 @@ plays UAL's clips at any shape.
11
11
  ## Demo
12
12
 
13
13
  ```js
14
- import { b3d, b3dSun, b3dLight, slider3d, select3d, toggle3d, label3d, text3d, assetUrl, DEFAULT_HUMAN_BODY, HAIR_COLOURS, colorPicker3d, clothRecipe, materialPicker3d, studioEnvironment, irisColor, lipSync, readSkeleton, retargetClip, button3d, ui, writeGarmentGlb, writeGarmentObj, readGarment, writeCharacter, readCharacter, mountTailorTool, chooseFile, b3dPanel, panel3d, makeCharacter, loadCharacterAssets, DEFAULT_CHARACTER, CHARACTER_SLOTS, CHARACTER_SOURCES, characterStore, WORKING_CHARACTER } from 'tosijs-3d'
14
+ import { b3d, b3dSun, b3dLight, slider3d, select3d, toggle3d, label3d, text3d, assetUrl, DEFAULT_HUMAN_BODY, HAIR_COLOURS, colorPicker3d, clothRecipe, materialPicker3d, studioEnvironment, irisColor, lipSync, readSkeleton, retargetClip, button3d, ui, writeGarmentGlb, writeGarmentObj, readGarment, writeCharacter, readCharacter, mountTailorTool, chooseFile, b3dPanel, panel3d, makeCharacter, loadCharacterAssets, DEFAULT_CHARACTER, CHARACTER_SLOTS, CHARACTER_SOURCES, characterStore, WORKING_CHARACTER, nameCharacter } from 'tosijs-3d'
15
15
  import { tosi } from 'tosijs'
16
16
  import { mountRigTool } from 'tosijs-3d/rig-tool'
17
17
 
18
18
  // Everything the panel sets, as it starts: what a saved character is read against.
19
- const START = { ...DEFAULT_HUMAN_BODY, gender: 1, clip: 'Walk_Loop', tone: 0.3, redness: 0.5, iris: 0.2, irisColour: '#5a3519', hair: 'short02', beard: 'none', moustache: 'none', brows: 'eyebrow001', hairBase: HAIR_COLOURS.brown.base, hairHighlight: HAIR_COLOURS.brown.highlight, hairUp: 0, hairForward: 0, hairSize: 1, outfit: 'male_casualsuit02', bodysuit: 'none', armour: 'none', top: 'none', bottom: 'none', shoes: 'shoes01', hat: 'none', glasses: 'none', gloves: 'none', mask: 'none', editing: 'outfit', look: 'as made', clothLook: clothRecipe({ fabric: 'cotton', colour: '#7a2e2e', recolour: 0 }), paused: false, stubble: 0, blink: true, talk: false, mic: false, smile: 0, browsUp: 0, frown: 0, tailorThickness: 0.005, tailorSkirt: false, tailorLook: clothRecipe({ fabric: 'cotton', colour: '#3b5b8a', recolour: 1 }), tailorAlone: false, tailorName: '', tailorSlot: 'top', exportBody: true, rigs: {}, surfaces: {}, source: 'MakeHuman', characterName: '', characterPick: '' }
19
+ const START = { ...DEFAULT_HUMAN_BODY, gender: 1, clip: 'Walk_Loop', tone: 0.3, redness: 0.5, iris: 0.2, irisColour: '#5a3519', eyeStyle: 'basic', hair: 'short02', beard: 'none', moustache: 'none', brows: 'eyebrow001', hairBase: HAIR_COLOURS.brown.base, hairHighlight: HAIR_COLOURS.brown.highlight, hairUp: 0, hairForward: 0, hairSize: 1, outfit: 'male_casualsuit02', bodysuit: 'none', armour: 'none', top: 'none', bottom: 'none', shoes: 'shoes01', hat: 'none', glasses: 'none', gloves: 'none', mask: 'none', editing: 'outfit', look: 'as made', clothLook: clothRecipe({ fabric: 'cotton', colour: '#7a2e2e', recolour: 0 }), paused: false, stubble: 0, blink: true, talk: false, mic: false, smile: 0, browsUp: 0, frown: 0, tailorThickness: 0.005, tailorSkirt: false, tailorLook: clothRecipe({ fabric: 'cotton', colour: '#3b5b8a', recolour: 1 }), tailorAlone: false, tailorName: '', tailorSlot: 'top', exportBody: true, rigs: {}, surfaces: {}, source: 'MakeHuman', characterName: '', characterPick: '' }
20
20
  const { walker } = tosi({ walker: structuredClone(START) })
21
21
  // What a character file keeps: not the editor's view of one slot (that is in
22
22
  // cloth), the microphone (it would ask on load), or the save controls.
23
23
  const KEPT = Object.keys(START).filter((k) => !['editing', 'look', 'clothLook', 'mic', 'characterName', 'characterPick'].includes(k))
24
24
  // Saving and loading characters, wired when the page is up.
25
- const character = { save: () => {}, load: () => {}, forget: () => {}, exportJson: () => {}, importJson: () => {}, changed: () => {}, saved: [], note: '' }
25
+ const character = { save: () => {}, rename: () => {}, load: () => {}, forget: () => {}, exportJson: () => {}, importJson: () => {}, changed: () => {}, saved: [], note: '' }
26
+ // A name asked for in a popup (works in a headset too): refused with its
27
+ // reason, and a confirm before it replaces ANOTHER saved character.
28
+ const namePopup = (pop, { prompt, initial, current, verb, act }) => {
29
+ let typed = initial
30
+ const go = () => {
31
+ const d = nameCharacter(typed, character.saved, current)
32
+ if (!d.ok) return pop.show(form(d.message))
33
+ if (!d.replaces) {
34
+ pop.close()
35
+ return act(d.name)
36
+ }
37
+ pop.show([
38
+ text3d({ text: `${d.name} is already saved. Replace it?` }),
39
+ button3d({ label: 'replace', handleClick: () => { pop.close(); act(d.name) } }),
40
+ button3d({ label: 'cancel', handleClick: () => pop.close() }),
41
+ ])
42
+ }
43
+ const form = (message) => [
44
+ text3d({ text: message }),
45
+ ui.inputField({ value: typed, placeholder: 'name', handleChange: (v) => { typed = v }, handleEnter: (v) => { typed = v; go() } }),
46
+ button3d({ label: verb, handleClick: go }),
47
+ button3d({ label: 'cancel', handleClick: () => pop.close() }),
48
+ ]
49
+ return form(prompt)
50
+ }
26
51
  const characterRows = () => [
27
52
  label3d({ text: 'Character', collapsible: true }),
28
- ui.inputField({ value: walker.characterName.value, placeholder: 'name the character', handleChange: (v) => { walker.characterName.value = v } }),
29
- button3d({ label: 'save', handleClick: () => character.save() }),
53
+ ...(walker.characterName.value ? [text3d({ text: walker.characterName.value })] : []),
54
+ button3d({
55
+ label: 'save…',
56
+ popup: (pop) => namePopup(pop, { prompt: 'save as', initial: walker.characterName.value, current: walker.characterName.value, verb: 'save', act: (name) => character.save(name) }),
57
+ }),
30
58
  ...(character.saved.length
31
59
  ? [
32
60
  select3d({ label: 'saved', value: walker.characterPick, options: character.saved }),
33
61
  button3d({ label: 'load', handleClick: () => character.load() }),
62
+ button3d({
63
+ label: 'rename…',
64
+ popup: (pop) => namePopup(pop, { prompt: `rename ${walker.characterPick.value} to`, initial: walker.characterPick.value, current: walker.characterPick.value, verb: 'rename', act: (name) => character.rename(walker.characterPick.value, name) }),
65
+ }),
34
66
  button3d({ label: 'forget', handleClick: () => character.forget() }),
35
67
  ]
36
68
  : []),
@@ -192,6 +224,7 @@ preview.append(
192
224
  slider3d({ label: 'tone', value: walker.tone, min: 0, max: 1, step: 0.01 }),
193
225
  slider3d({ label: 'redness', value: walker.redness, min: 0, max: 1, step: 0.01 }),
194
226
  label3d({ text: 'Eyes', collapsible: true }),
227
+ select3d({ label: 'eye style', value: walker.eyeStyle, options: ['basic', 'anime', 'drawn'] }),
195
228
  colorPicker3d({ label: 'eye colour', value: walker.irisColour, alpha: false, defaultPresets: 'off', presets: [['dark brown', 0], ['brown', 0.15], ['amber', 0.3], ['hazel', 0.45], ['green', 0.6], ['blue-green', 0.72], ['blue', 0.85], ['grey', 1]].map(([name, t]) => { const c = irisColor(t); const h = (x) => Math.round(x * 255).toString(16).padStart(2, '0'); return { name, value: '#' + h(c.r) + h(c.g) + h(c.b) } }) }),
196
229
  label3d({ text: 'Face', collapsible: true }),
197
230
  toggle3d({ label: 'blink', value: walker.blink }),
@@ -741,18 +774,33 @@ preview.append(
741
774
  }, 800)
742
775
  }
743
776
  for (const k of [...KEPT, 'look', 'clothLook']) walker[k].observe(() => character.changed())
744
- character.save = async () => {
745
- const name = walker.characterName.value.trim()
746
- if (!name || name === WORKING) return tell('name the character first')
777
+ character.save = async (name) => {
747
778
  try {
748
779
  await store.put(name, snapshot(name))
749
780
  } catch (e) {
750
781
  return tell(`could not save: ${e?.message ?? e}`)
751
782
  }
783
+ walker.characterName.value = name
752
784
  walker.characterPick.value = name
753
785
  tell(`saved ${name}`)
754
786
  listSaved()
755
787
  }
788
+ // Put under the new name, then the old one goes.
789
+ character.rename = async (from, to) => {
790
+ if (to === from) return
791
+ try {
792
+ const doc = await store.get(from)
793
+ if (!doc) return tell(`no character called ${from}`)
794
+ await store.put(to, { ...doc, name: to })
795
+ await store.delete(from)
796
+ } catch (e) {
797
+ return tell(`could not rename: ${e?.message ?? e}`)
798
+ }
799
+ if (walker.characterName.value === from) walker.characterName.value = to
800
+ walker.characterPick.value = to
801
+ tell(`renamed ${from} to ${to}`)
802
+ listSaved()
803
+ }
756
804
  character.load = async () => {
757
805
  const name = walker.characterPick.value
758
806
  const doc = name && (await store.get(name).catch(() => null))
@@ -826,8 +874,10 @@ saved with the character; **cancel** keeps the one it had. The first binding is
826
874
  off the body's outline.
827
875
 
828
876
  **Character** keeps your work. The figure you are working on is kept in this
829
- browser as you change it and comes back when you open the page again. **Save**
830
- it under a name to keep several, **load** or **forget** one, or **export
877
+ browser as you change it and comes back when you open the page again. **Save…**
878
+ asks for a name (the one it has, to start with) to keep it under, and asks
879
+ first before replacing another saved character. Pick a saved one to **load**,
880
+ **rename…** or **forget** it. **Export
831
881
  JSON** to take it elsewhere and **import JSON…** to bring one in. A file
832
882
  carries everything the panel sets, and the garments of your own the character
833
883
  wears travel inside it ([character-file](/character-file/)).
@@ -889,7 +939,7 @@ body's triangles.
889
939
  */
890
940
  /*{ "parent": "b3d-biped", "order": 80 }*/
891
941
  import * as BABYLON from '@babylonjs/core';
892
- import { lipAlbedo, skinAlbedo } from './skin-tone.js';
942
+ import { skinAlbedo } from './skin-tone.js';
893
943
  import { skinShading } from './skin-shading.js';
894
944
  export function humanBody(scene, pack, name = 'human') {
895
945
  const root = new BABYLON.TransformNode(name, scene);
@@ -968,64 +1018,5 @@ export function skinMaterial(scene, options = {}) {
968
1018
  m.shading = options.shading === false ? null : skinShading(m);
969
1019
  return m;
970
1020
  }
971
- /**
972
- * Per-vertex colours (RGBA, the skin's vertices) that turn a skin material's
973
- * colour into the lips' where `lips` (a pack region, every vertex) says so.
974
- * They multiply the material's albedo, so they are the ratio lip / skin.
975
- * Their alpha carries `thin` (per skin vertex, from `skinThinness`), which
976
- * skin-shading's back-light reads; without it, alpha is 0 (nothing glows).
977
- */
978
- export function lipTint(skin, lips, tone, redness = 0.5, into, thin) {
979
- const s = skinAlbedo(tone, redness);
980
- const l = lipAlbedo(tone, redness);
981
- const ratio = [l.r / s.r, l.g / s.g, l.b / s.b];
982
- const out = into ?? new Float32Array(skin.vertices.length * 4);
983
- skin.vertices.forEach((v, i) => {
984
- // The mask is how far the lip targets move a vertex, so the lips' own
985
- // edges are faint in it: anything past half is all lip.
986
- const m = Math.min(1, Math.max(0, (lips[v] - 0.05) / 0.45));
987
- const t = m * m * (3 - 2 * m);
988
- out[i * 4] = 1 + (ratio[0] - 1) * t;
989
- out[i * 4 + 1] = 1 + (ratio[1] - 1) * t;
990
- out[i * 4 + 2] = 1 + (ratio[2] - 1) * t;
991
- out[i * 4 + 3] = thin ? thin[i] : 0;
992
- });
993
- return out;
994
- }
995
- /**
996
- * Stubble: multiply `colours` (RGBA per skin vertex, from `lipTint`) toward
997
- * a hair colour where `mask` (0..1 per skin vertex) says the beard grows,
998
- * by `amount` (0 clean-shaven, 1 a few days' growth). `skinRgb` and `hairRgb`
999
- * are linear; the result stays a ratio over the skin's own colour.
1000
- */
1001
- export function stubbleTint(colours, mask, amount, skinRgb, hairRgb) {
1002
- if (amount <= 0)
1003
- return colours;
1004
- /*
1005
- Short hairs over skin read as a SHADOW: the hair seen through the skin is
1006
- darker than the hair itself, and a little cool (a five o'clock shadow is
1007
- blue-grey on fair skin). So the skin goes most of the way to a darkened
1008
- hair colour with a touch of blue. Mixing toward the hair colour itself was
1009
- too faint to see at full, worst on light-brown hair.
1010
- */
1011
- const dark = {
1012
- r: hairRgb.r * 0.45,
1013
- g: hairRgb.g * 0.5,
1014
- b: hairRgb.b * 0.6 + 0.01,
1015
- };
1016
- const ratio = [
1017
- (dark.r * 0.6 + skinRgb.r * 0.4) / Math.max(1e-4, skinRgb.r),
1018
- (dark.g * 0.6 + skinRgb.g * 0.4) / Math.max(1e-4, skinRgb.g),
1019
- (dark.b * 0.6 + skinRgb.b * 0.4) / Math.max(1e-4, skinRgb.b),
1020
- ];
1021
- for (let i = 0; i < mask.length; i++) {
1022
- const k = mask[i] * Math.min(1, amount);
1023
- if (k <= 0)
1024
- continue;
1025
- for (let c = 0; c < 3; c++) {
1026
- colours[i * 4 + c] *= 1 + (Math.min(1, ratio[c]) - 1) * k;
1027
- }
1028
- }
1029
- return colours;
1030
- }
1021
+ export { lipTint, stubbleTint } from './skin-paint.js';
1031
1022
  //# sourceMappingURL=character-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"character-builder.js","sourceRoot":"","sources":["../src/character-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAw3BE;AACF,0CAA0C;AAE1C,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAA;AAYvE,MAAM,UAAU,SAAS,CACvB,KAAoB,EACpB,IAAe,EACf,IAAI,GAAG,OAAO;IAEd,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACnD,sDAAsD;IACtD,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,QAAQ,EAAE,KAAK,CAAC,CAAA;IAChE,MAAM,CAAC,kBAAkB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9D,MAAM,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;IAEpB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,KAAK,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAA;IACrC,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACjD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACtB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5B,sEAAsE;IACtE,sEAAsE;IACtE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAA;IAChE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,OAAO,EAAE,KAAK,CAAC,CAAA;IACpE,QAAQ,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5D,QAAQ,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC7D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAExB,0DAA0D;IAC1D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACtD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAE3C,SAAS,MAAM,CAAC,SAAuB;QACrC,IAAI,IAAI,GAAG,QAAQ,CAAA;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;gBAAE,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;QACzB,oEAAoE;QACpE,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7D,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CAAA;QACF,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QACrE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACjE,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAEtB,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,OAAO;YACL,QAAQ,CAAC,OAAO,EAAE,CAAA;YAClB,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,MAAM,CAAC,OAAO,EAAE,CAAA;YAChB,IAAI,CAAC,OAAO,EAAE,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAoB,EACpB,UAMI,EAAE;IAEN,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,WAAW,CAC/B,OAAO,CAAC,IAAI,IAAI,MAAM,EACtB,KAAK,CACU,CAAA;IACjB,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAA;IACd,wEAAwE;IACxE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAA;IACjB,2EAA2E;IAC3E,4DAA4D;IAC5D,CAAC,CAAC,oBAAoB,GAAG,GAAG,CAAA;IAC5B,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,EAAE,EAAE;QAClC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACnC,oDAAoD;QACpD,CAAC,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC,CAAA;IACD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,CAAA;IACtD,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IAC7D,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CACrB,IAAe,EACf,IAAkB,EAClB,IAAY,EACZ,OAAO,GAAG,GAAG,EACb,IAAmB,EACnB,IAAwB;IAExB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACnC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7B,sEAAsE;QACtE,wDAAwD;QACxD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAC3D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACnC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACvC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACvC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,OAAqB,EACrB,IAAuB,EACvB,MAAc,EACd,OAA4C,EAC5C,OAA4C;IAE5C,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,OAAO,CAAA;IAC/B;;;;;;MAME;IACF,MAAM,IAAI,GAAG;QACX,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;QACnB,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG;QAClB,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI;KAC1B,CAAA;IACD,MAAM,KAAK,GAAG;QACZ,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;KAC7D,CAAA;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAQ;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"character-builder.js","sourceRoot":"","sources":["../src/character-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA06BE;AACF,0CAA0C;AAE1C,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAA;AAWvE,MAAM,UAAU,SAAS,CACvB,KAAoB,EACpB,IAAe,EACf,IAAI,GAAG,OAAO;IAEd,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACnD,sDAAsD;IACtD,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,QAAQ,EAAE,KAAK,CAAC,CAAA;IAChE,MAAM,CAAC,kBAAkB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9D,MAAM,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;IAEpB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,KAAK,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAA;IACrC,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACjD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACtB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5B,sEAAsE;IACtE,sEAAsE;IACtE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAA;IAChE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,OAAO,EAAE,KAAK,CAAC,CAAA;IACpE,QAAQ,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5D,QAAQ,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC7D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAExB,0DAA0D;IAC1D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACtD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAE3C,SAAS,MAAM,CAAC,SAAuB;QACrC,IAAI,IAAI,GAAG,QAAQ,CAAA;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;gBAAE,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;QACzB,oEAAoE;QACpE,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7D,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CAAA;QACF,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QACrE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACjE,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAEtB,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,OAAO;YACL,QAAQ,CAAC,OAAO,EAAE,CAAA;YAClB,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,MAAM,CAAC,OAAO,EAAE,CAAA;YAChB,IAAI,CAAC,OAAO,EAAE,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAoB,EACpB,UAMI,EAAE;IAEN,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,WAAW,CAC/B,OAAO,CAAC,IAAI,IAAI,MAAM,EACtB,KAAK,CACU,CAAA;IACjB,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAA;IACd,wEAAwE;IACxE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAA;IACjB,2EAA2E;IAC3E,4DAA4D;IAC5D,CAAC,CAAC,oBAAoB,GAAG,GAAG,CAAA;IAC5B,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,EAAE,EAAE;QAClC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACnC,oDAAoD;QACpD,CAAC,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC,CAAA;IACD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,CAAA;IACtD,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IAC7D,OAAO,CAAC,CAAA;AACV,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"character-core.d.ts","sourceRoot":"","sources":["../src/character-core.ts"],"names":[],"mappings":"AA+CA,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"character-core.d.ts","sourceRoot":"","sources":["../src/character-core.ts"],"names":[],"mappings":"AAuDA,OAAO,EAAE,CAAA"}
@@ -1,7 +1,7 @@
1
1
  /*#
2
2
  # character core
3
3
 
4
- **The character creator's working parts, for any engine.** Twenty modules
4
+ **The character creator's working parts, for any engine.** Twenty-nine modules
5
5
  make a character without Babylon or a DOM: they read MakeHuman's body, shape
6
6
  it, fit and bind a skeleton, retarget clips, fit hair and clothes, and save
7
7
  the result. Each is its own subpath, so a three.js app (or a server, or a
@@ -28,9 +28,17 @@ import { humanBodyMaker } from 'tosijs-3d/human-rig'
28
28
  | [`hair-fit`](/hair-fit/) | a hairstyle warped onto a head |
29
29
  | [`garment-cut`](/garment-cut/), [`uv-unwrap`](/uv-unwrap/), [`garment-file`](/garment-file/) | the tailor: garments cut from a body, unwrapped, saved as GLB or OBJ |
30
30
  | [`skin-tone`](/skin-tone/) | skin colour from one dial |
31
+ | [`skin-paint`](/skin-paint/) | the lips and stubble over the skin, as vertex colours (glTF's `COLOR_0`) |
32
+ | [`cloth-bake`](/cloth-bake/) | a recoloured garment's texture, baked to a picture |
33
+ | [`eye-art`](/eye-art/) | Tonio's eye art with its iris recoloured, and UVs that map both eyes onto it |
34
+ | `png` | PNG read and written, byte for byte, with no canvas |
31
35
  | [`character-file`](/character-file/) | a character as one versioned JSON document |
32
36
  | [`character-settings`](/character-settings/) | every setting a character has, with its default; the slots; hair colours; the body pack's URL |
33
37
  | [`proxy-cover`](/proxy-cover/) | the skin under what is worn, tucked in and hidden |
38
+ | [`skinned-glb`](/skinned-glb/), [`glb-chunks`](/glb-chunks/) | a rigged, morphing body out as a GLB (validator-clean); GLB chunks read and written |
39
+ | [`hair-place`](/hair-place/) | Quaternius' hairstyles placed on a body's head, and the library read from its GLB |
40
+ | [`mesh-sdf`](/mesh-sdf/) | signed distance to a triangle mesh: inside, and how deep |
41
+ | [`fit-extremes`](/fit-extremes/) | every garment and hairstyle on the bodies at the sliders' corners, checked for penetration and bone sanity |
34
42
  | [`asset-url`](/asset-url/) | where hosted assets (the body pack, the hair) are fetched from |
35
43
 
36
44
  What makes it a promise: `pure-core.test.ts` walks their import graph, type
@@ -1 +1 @@
1
- {"version":3,"file":"character-core.js","sourceRoot":"","sources":["../src/character-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CE;AACF,0CAA0C"}
1
+ {"version":3,"file":"character-core.js","sourceRoot":"","sources":["../src/character-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDE;AACF,0CAA0C"}
@@ -1 +1 @@
1
- {"version":3,"file":"character-settings.d.ts","sourceRoot":"","sources":["../src/character-settings.ts"],"names":[],"mappings":"AAeA,wDAAwD;AACxD,eAAO,MAAM,cAAc,6BAA6B,CAAA;AACxD,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAEnC,iFAAiF;AACjF,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,QAAQ,CACjC,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBnD,CAAA;AAEF,+CAA+C;AAC/C,eAAO,MAAM,eAAe,yGAWlB,CAAA;AAEV,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAoCjD,CAAA"}
1
+ {"version":3,"file":"character-settings.d.ts","sourceRoot":"","sources":["../src/character-settings.ts"],"names":[],"mappings":"AAeA,wDAAwD;AACxD,eAAO,MAAM,cAAc,6BAA6B,CAAA;AACxD,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAEnC,iFAAiF;AACjF,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,QAAQ,CACjC,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBnD,CAAA;AAEF,+CAA+C;AAC/C,eAAO,MAAM,eAAe,yGAWlB,CAAA;AAEV,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAqCjD,CAAA"}
@@ -59,6 +59,7 @@ export const DEFAULT_CHARACTER = {
59
59
  redness: 0.5,
60
60
  iris: 0.2,
61
61
  irisColour: '#5a3519',
62
+ eyeStyle: 'basic',
62
63
  hair: 'short02',
63
64
  beard: 'none',
64
65
  moustache: 'none',
@@ -1 +1 @@
1
- {"version":3,"file":"character-settings.js","sourceRoot":"","sources":["../src/character-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;EASE;AACF,+CAA+C;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAA;AACxD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAEnC,iFAAiF;AACjF,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAA;AACpD,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAErB,MAAM,CAAC,MAAM,CAAC;IAChB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACvD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACjD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACjD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC1D,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACvD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACxD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC1D,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC/C,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;CACxD,CAAC,CAAA;AAEF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK;IACL,MAAM;IACN,SAAS;CACD,CAAA;AAEV,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAwB;IACpD,GAAG,kBAAkB;IACrB,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,MAAM;IACjB,KAAK,EAAE,YAAY;IACnB,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI;IACjC,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;IAC3C,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,mBAAmB;IAC3B,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,WAAW,EAAE,KAAK;IAClB,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,WAAW;CACpB,CAAA"}
1
+ {"version":3,"file":"character-settings.js","sourceRoot":"","sources":["../src/character-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;EASE;AACF,+CAA+C;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAA;AACxD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAEnC,iFAAiF;AACjF,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAA;AACpD,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAErB,MAAM,CAAC,MAAM,CAAC;IAChB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACvD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACjD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACjD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC1D,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACvD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACxD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC1D,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC/C,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;CACxD,CAAC,CAAA;AAEF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK;IACL,MAAM;IACN,SAAS;CACD,CAAA;AAEV,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAwB;IACpD,GAAG,kBAAkB;IACrB,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,MAAM;IACjB,KAAK,EAAE,YAAY;IACnB,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI;IACjC,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS;IAC3C,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,mBAAmB;IAC3B,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,WAAW,EAAE,KAAK;IAClB,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,WAAW;CACpB,CAAA"}
@@ -2,6 +2,22 @@ import type { CharacterDoc } from './character-file.js';
2
2
  export declare const CHARACTER_DB = "tosijs-characters";
3
3
  /** The figure the builder is working on, kept as it changes. */
4
4
  export declare const WORKING_CHARACTER = "(working)";
5
+ /** What a name typed to save or rename a character comes to. */
6
+ export type CharacterName = {
7
+ ok: false;
8
+ message: string;
9
+ } | {
10
+ ok: true;
11
+ name: string;
12
+ replaces: boolean;
13
+ };
14
+ /**
15
+ * A name typed to save or rename a character: trimmed, refused (with a
16
+ * reason) when blank or the working figure's own key, and whether it
17
+ * REPLACES another saved character. `current` is the name being saved again
18
+ * or renamed: saving under it again replaces nothing.
19
+ */
20
+ export declare function nameCharacter(typed: string, saved: readonly string[], current?: string): CharacterName;
5
21
  /** Where in a document a run of bytes is: `garments/<name>` or `bodies/<name>`. */
6
22
  type BlobPath = string;
7
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"character-store.d.ts","sourceRoot":"","sources":["../src/character-store.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,eAAO,MAAM,YAAY,sBAAsB,CAAA;AAC/C,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAE5C,mFAAmF;AACnF,KAAK,QAAQ,GAAG,MAAM,CAAA;AAStB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG;IAC7C,GAAG,EAAE,YAAY,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;CAChC,CAqBA;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CACvB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,YAAY,CAed;AAuBD,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACzB,2CAA2C;IAC3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC/C,0DAA0D;IAC1D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,iCAAiC;AACjC,wBAAgB,cAAc,IAAI,cAAc,CAwG/C"}
1
+ {"version":3,"file":"character-store.d.ts","sourceRoot":"","sources":["../src/character-store.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,eAAO,MAAM,YAAY,sBAAsB,CAAA;AAC/C,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAE5C,gEAAgE;AAChE,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAA;AAEjD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,SAAK,GACX,aAAa,CASf;AAED,mFAAmF;AACnF,KAAK,QAAQ,GAAG,MAAM,CAAA;AAStB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG;IAC7C,GAAG,EAAE,YAAY,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;CAChC,CAqBA;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CACvB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,YAAY,CAed;AAuBD,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACzB,2CAA2C;IAC3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC/C,0DAA0D;IAC1D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,iCAAiC;AACjC,wBAAgB,cAAc,IAAI,cAAc,CAwG/C"}
@@ -31,6 +31,23 @@ open it there.
31
31
  export const CHARACTER_DB = 'tosijs-characters';
32
32
  /** The figure the builder is working on, kept as it changes. */
33
33
  export const WORKING_CHARACTER = '(working)';
34
+ /**
35
+ * A name typed to save or rename a character: trimmed, refused (with a
36
+ * reason) when blank or the working figure's own key, and whether it
37
+ * REPLACES another saved character. `current` is the name being saved again
38
+ * or renamed: saving under it again replaces nothing.
39
+ */
40
+ export function nameCharacter(typed, saved, current = '') {
41
+ const name = typed.trim();
42
+ if (!name)
43
+ return { ok: false, message: 'a saved character needs a name' };
44
+ if (name === WORKING_CHARACTER)
45
+ return {
46
+ ok: false,
47
+ message: `"${WORKING_CHARACTER}" is kept for the figure you are working on`,
48
+ };
49
+ return { ok: true, name, replaces: name !== current && saved.includes(name) };
50
+ }
34
51
  /**
35
52
  * A document's bytes taken out (pure): the document left, and each base64
36
53
  * run by where it was.
@@ -1 +1 @@
1
- {"version":3,"file":"character-store.js","sourceRoot":"","sources":["../src/character-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"character-store.js","sourceRoot":"","sources":["../src/character-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"character.d.ts","sourceRoot":"","sources":["../src/character.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"character.d.ts","sourceRoot":"","sources":["../src/character.ts"],"names":[],"mappings":"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"}