tosijs-3d 0.10.13 → 0.10.15

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 (104) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/b3d-aircraft.js +2 -2
  3. package/dist/b3d-biped.d.ts +28 -27
  4. package/dist/b3d-biped.d.ts.map +1 -1
  5. package/dist/b3d-biped.js +36 -35
  6. package/dist/b3d-biped.js.map +1 -1
  7. package/dist/b3d-exploder.js +2 -2
  8. package/dist/b3d-galaxy.js +2 -2
  9. package/dist/b3d-hud.js +1 -1
  10. package/dist/b3d-launcher.js +1 -1
  11. package/dist/b3d-library.js +1 -1
  12. package/dist/b3d-light-shafts.js +2 -2
  13. package/dist/b3d-lightning.js +1 -1
  14. package/dist/b3d-moon.d.ts.map +1 -1
  15. package/dist/b3d-moon.js +3 -2
  16. package/dist/b3d-moon.js.map +1 -1
  17. package/dist/b3d-panel.d.ts.map +1 -1
  18. package/dist/b3d-panel.js +11 -10
  19. package/dist/b3d-panel.js.map +1 -1
  20. package/dist/b3d-physics.js +2 -2
  21. package/dist/b3d-planet.js +2 -2
  22. package/dist/b3d-sound.js +2 -2
  23. package/dist/b3d-ssao.d.ts +6 -3
  24. package/dist/b3d-ssao.d.ts.map +1 -1
  25. package/dist/b3d-ssao.js +6 -3
  26. package/dist/b3d-ssao.js.map +1 -1
  27. package/dist/b3d-terrain.js +4 -4
  28. package/dist/b3d-warhead.js +1 -1
  29. package/dist/biome-chart.js +1 -1
  30. package/dist/control-input.d.ts +5 -3
  31. package/dist/control-input.d.ts.map +1 -1
  32. package/dist/control-input.js +1 -1
  33. package/dist/control-input.js.map +1 -1
  34. package/dist/frame-panel.d.ts +8 -0
  35. package/dist/frame-panel.d.ts.map +1 -1
  36. package/dist/frame-panel.js +35 -28
  37. package/dist/frame-panel.js.map +1 -1
  38. package/dist/galaxy-data.d.ts +2 -2
  39. package/dist/game-controller.d.ts +2 -1
  40. package/dist/game-controller.d.ts.map +1 -1
  41. package/dist/game-controller.js +9 -5
  42. package/dist/game-controller.js.map +1 -1
  43. package/dist/index.d.ts +7 -3
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +5 -3
  46. package/dist/index.js.map +1 -1
  47. package/dist/land-and-sky.js +2 -2
  48. package/dist/landform.d.ts +2 -3
  49. package/dist/landform.d.ts.map +1 -1
  50. package/dist/landform.js.map +1 -1
  51. package/dist/playground.js +3 -3
  52. package/dist/retarget-babylon.d.ts.map +1 -1
  53. package/dist/retarget-babylon.js +34 -6
  54. package/dist/retarget-babylon.js.map +1 -1
  55. package/dist/retarget.d.ts +5 -1
  56. package/dist/retarget.d.ts.map +1 -1
  57. package/dist/retarget.js +85 -21
  58. package/dist/retarget.js.map +1 -1
  59. package/dist/rig-recipe-babylon.d.ts +27 -0
  60. package/dist/rig-recipe-babylon.d.ts.map +1 -0
  61. package/dist/rig-recipe-babylon.js +170 -0
  62. package/dist/rig-recipe-babylon.js.map +1 -0
  63. package/dist/rig-recipe.d.ts +72 -0
  64. package/dist/rig-recipe.d.ts.map +1 -0
  65. package/dist/rig-recipe.js +107 -0
  66. package/dist/rig-recipe.js.map +1 -0
  67. package/dist/rig-tool.d.ts +53 -0
  68. package/dist/rig-tool.d.ts.map +1 -0
  69. package/dist/rig-tool.js +1164 -0
  70. package/dist/rig-tool.js.map +1 -0
  71. package/dist/scene-schemas.d.ts +2 -2
  72. package/dist/scene-schemas.js +2 -2
  73. package/dist/spring-chain-babylon.d.ts +5 -0
  74. package/dist/spring-chain-babylon.d.ts.map +1 -1
  75. package/dist/spring-chain-babylon.js +11 -0
  76. package/dist/spring-chain-babylon.js.map +1 -1
  77. package/dist/svg-icons.d.ts +12 -0
  78. package/dist/svg-icons.d.ts.map +1 -1
  79. package/dist/svg-icons.js +12 -11
  80. package/dist/svg-icons.js.map +1 -1
  81. package/dist/svg-texture.d.ts +8 -0
  82. package/dist/svg-texture.d.ts.map +1 -1
  83. package/dist/svg-texture.js +21 -0
  84. package/dist/svg-texture.js.map +1 -1
  85. package/dist/tosi-b3d.d.ts +19 -2
  86. package/dist/tosi-b3d.d.ts.map +1 -1
  87. package/dist/tosi-b3d.js +255 -102
  88. package/dist/tosi-b3d.js.map +1 -1
  89. package/dist/touch-gesture.d.ts +11 -0
  90. package/dist/touch-gesture.d.ts.map +1 -1
  91. package/dist/touch-gesture.js +24 -0
  92. package/dist/touch-gesture.js.map +1 -1
  93. package/dist/touch-orbit.d.ts +3 -1
  94. package/dist/touch-orbit.d.ts.map +1 -1
  95. package/dist/touch-orbit.js +81 -28
  96. package/dist/touch-orbit.js.map +1 -1
  97. package/dist/virtual-gamepad.js +1 -1
  98. package/dist/widgets3d.d.ts +24 -8
  99. package/dist/widgets3d.d.ts.map +1 -1
  100. package/dist/widgets3d.js +73 -33
  101. package/dist/widgets3d.js.map +1 -1
  102. package/package.json +2 -2
  103. package/static/attributes.json +10 -10
  104. package/static/attributes.txt +10 -10
package/CHANGELOG.md CHANGED
@@ -6,6 +6,46 @@ All notable changes to **tosijs-3d**. This project is pre-1.0 (`0.x`), so minor
6
6
  versions may carry breaking peer-dependency changes — each is called out in a
7
7
  **⚠️ Breaking** block in its version section below, with what a consumer must do.
8
8
 
9
+ ## 0.10.15
10
+
11
+ ### Added
12
+
13
+ - **The rig tool** (`/rig-tool/`, `tosijs-3d/rig-tool`; Tonio). Load a demo character (the weasels and the space marine are rigged from markers on the spot, as the auto-rig page does, and a weasel's tail is a spring from the start) or your own GLB, check which bone plays each role (fingers included), set the arm space, hang spring chains on it (a new strand with a tube, such as a ponytail, or bones the model already has, such as a tail), and try any UAL clip beside the mannequin, scaled to the character. It opens in the rest pose with a dot on each role's bone: tap a dot, then the body, to give the role a bone (or hang a spring chain there); drag a strand's root and tip to place it. Save the result as a **rig recipe** (JSON), load it back, or copy it; the working recipe is kept per model in the browser. The element's `.rig` (`recipe`, `applied`, `load`) lets a page or an editor drive it.
14
+ - **Rig recipes**: `RigRecipe`, `validateRigRecipe` (headless, says what is wrong and where) and `strandDirection` in `rig-recipe`, and `applyRigRecipe(scene, root, skeleton, recipe)`, which puts a saved recipe on the same model in a game: the skeleton read with the recipe's roles, ready for `retargetClip`, and the springs live.
15
+
16
+ - **Panning in the default view controls** (Tonio). Shift-drag pans with a mouse, a trackpad's two-finger drag pans (a pinch still zooms), and right-drag and ctrl-drag pan by the same rule as touch: the point you grabbed follows the pointer, at any zoom. `touchOrbit(camera, { trackpadPan: false })` leaves the wheel to Babylon. A trackpad and a mouse wheel send the same event, so `wheelClassifier` (in `touch-gesture`) tells them apart by heuristic: a pinch carries `ctrlKey`, a mouse notch is big, a trackpad moves sideways or starts small. A wheel over a panel is still the panel's.
17
+
18
+ ### Fixed
19
+
20
+ - **Panels no longer blink when they rebuild.** A frame panel is an SVG drawn into its texture asynchronously, so a new plane is blank until that draw lands; on a headset (and a 4× throttled laptop: seven blank frames per rebuild) every refresh flashed. A rebuild now puts the new element into the SAME plane, and the texture keeps its old picture until the new one is drawn. This applies to the settings panel in a headset, the flat in-scene settings panel, and system panels (`frame-panel`'s new `setSvg`, `SvgTexture.setElement`).
21
+ - **The system bar and pinned flat panels are reconciled, not all rebuilt**, when the set of panels changes: the unchanged ones keep their mesh.
22
+ - **A rebuilt settings panel keeps its scroll position**: flat in the scene, in the HTML overlay, and in a headset.
23
+ - **Retargeted characters keep their heads and hands** (Tonio). Where a bone with no joint below it points (a head, a hand) was measured through the mesh's world matrix, which is wrong under a scaled armature: omnidude's (Mixamo, 0.01) all landed by the origin, so every clip played his head upside down and twisted his hands. It is now measured through each bone's inverse bind matrix and up the rest chain, as the bones are.
24
+ - **Fingers and thumbs are retargeted.** `humanoidRoles` finds each finger's three joints across UE, Mixamo and Rigify spellings (never the tip's end bone or a metacarpal), so a clip's grip comes across instead of the fingers staying splayed at rest. A hand is aimed along a finger both rigs have, so the wrist's twist comes across too.
25
+ - **A settings-panel rebuild waits for the press to end**, so `refreshScenePanel()` during a slider drag no longer cuts the drag off (`panel3d`'s new read-only `pressing`).
26
+
27
+ Size: barrel (min, packages external) 1167.3 KB raw / 399.6 KB gz, +0.8% on 0.10.14 (the rig recipe and retarget's finger roles; the rig tool is a subpath, outside the barrel).
28
+
29
+ ## 0.10.14
30
+
31
+ ### Fixed
32
+
33
+ - **A press during a system panel's content swap is no longer lost** (#111 follow-up, ensemble). Setting `el.svg = next` on an open panel closed and reopened it, which left a moment with no plane: a click landing then went nowhere (ensemble's host-actions test failed one run in four after a store refresh swapped every panel's content), and `contentToClient` returned null. A framed panel (the default title bar) now swaps the content under the same frame, so the plane, texture, spot and focus stay. `panelopen` still goes to the old content (close) and the new (open). A press already down in the old content ends there rather than releasing onto the new. `chrome="none"` panels still close and reopen.
34
+ - **The docs a consumer reads describe what the code does** (#116, ensemble). `select3d`'s JSDoc called it "a compact cycler, no dropdown" five releases after it became a select that opens a list (it steps only with no host). A sweep of every behaviour change in this CHANGELOG against the shipped docs found 33 more, fixed against the code:
35
+ - The settings panel is the owl's in-scene panel, not a gear and an HTML overlay (about 20 pages, and the `scenePanel` property).
36
+ - `gameController`'s key map: the wheel zooms (the d-pad axis), the arrows look, the mouse buttons are listed, `mouseLook` defaults to `'off'`.
37
+ - `b3dBiped`: the camera defaults in its table, `invertLookY` is off by default, `jumpSpeed` has no wind-up, `wadeDepth`'s swim thresholds (in at 1.3 ×, out at 1 ×).
38
+ - SSAO runs in a headset with `on` and the default `projected` method (three type docs and a console warning said never).
39
+ - `slider3d`'s peek readout sits beside the label; `panel3d`'s gap is 4.
40
+ - Frame-panel presets are angular, and frame panels can show flat; `b3d-moon` lights the night; planets have no separate sea sphere; the loadout is on the system bar; `lookX`/`lookY` persist on foot; `gamepadFade` ignores the pointer; the aircraft's `maxSpeed` is full lever; `GulleyOptions.heading` is degrees; `iconGlyph` takes composed and mirrored names; `biomeLapseRate`'s auto value is a fixed 0.004.
41
+ - Two doc comments had come loose from their declarations (`iconGlyph`'s sat on a private constant, `wadeDepth`'s on the wrong attribute), so the `.d.ts` documented the wrong thing.
42
+
43
+ ### Added
44
+
45
+ - **`titled3d(…).setContent(next)`**: other content under the same title bar, in place (the old content goes back where it came from).
46
+
47
+ Size: barrel (min, packages external) 1158.6 KB raw / 396.5 KB gz, +0.05% on 0.10.13.
48
+
9
49
  ## 0.10.13
10
50
 
11
51
  ### Fixed
@@ -60,7 +60,7 @@ const targets = [...air, ...ground]
60
60
  const kills = div({ class: 'kills' }, `Targets down: 0 / ${targets.length}`)
61
61
  // WEATHER, to fly in: a storm cell over the whole arena (storminess shakes
62
62
  // the airframe) and the scene's wind (it carries you; blowing east, across
63
- // your starting heading, so you crab). Both on the ⚙ panel.
63
+ // your starting heading, so you crab). Both on the settings panel.
64
64
  const storm = b3dWeatherCell({ x: 0, z: 0, radius: 3000, storminess: 0 })
65
65
  const turb = div({ class: 'turb' }, 'turbulence 0.00')
66
66
  let down = 0
@@ -210,7 +210,7 @@ turns the pilot's head in the cockpit, springs back on release).
210
210
  | `library` | `''` | Library type to source mesh from |
211
211
  | `meshName` | `''` | Node name to instantiate from library |
212
212
  | `enterable` | `false` | Whether a biped can enter |
213
- | `maxSpeed` | `50` | Normal top speed (m/s) — the cruise cap a released throttle settles at |
213
+ | `maxSpeed` | `50` | Top speed at full lever, **military** thrust (m/s). A released trigger leaves the lever where it was, so speed settles wherever that lever meets drag |
214
214
  | `afterburnerSpeed` | `75` | Speed ceiling while the throttle is held past `maxSpeed`; releasing bleeds back to `maxSpeed`. ≤ `maxSpeed` disables afterburner. |
215
215
  | `acceleration` | `12` | Throttle / lean authority (speed change rate) |
216
216
  | `vtolSpeed` | `6` | Forward ground speed splitting hover (below) from plane (above). 0 = pure aeroplane, no hover regime. |
@@ -94,16 +94,6 @@ export declare class B3dBiped extends B3dControllable {
94
94
  aimMaxYaw: number;
95
95
  /** How far up/down the look can go, degrees. */
96
96
  maxLookPitch: number;
97
- /**
98
- * Invert the right stick's vertical. **On by default** — Tonio's call, and
99
- * the conventional one for a third-person camera: pushing the stick away
100
- * from you tips the view DOWN, the way a physical camera head works. Set
101
- * `'off'` for the direct mapping.
102
- *
103
- * A string enum rather than a boolean because an absent boolean attribute
104
- * is false, so a default-true boolean can never turn on (and tosijs now
105
- * throws on one) — see CLAUDE.md.
106
- */
107
97
  /**
108
98
  * How far in FRONT of the head bone the first-person eye sits, in metres.
109
99
  *
@@ -112,6 +102,15 @@ export declare class B3dBiped extends B3dControllable {
112
102
  * which is what makes a too-large value feel like floating.
113
103
  */
114
104
  eyeForward: number;
105
+ /**
106
+ * Invert the right stick's vertical. **Off by default**: pushing the stick
107
+ * up looks (and aims) up. `'on'` gives the inverted, aircraft-style mapping,
108
+ * where pushing the stick away tips the view down.
109
+ *
110
+ * A string enum rather than a boolean because an absent boolean attribute
111
+ * is false, so a default-true boolean can never turn on (and tosijs now
112
+ * throws on one) — see CLAUDE.md.
113
+ */
115
114
  invertLookY: "on" | "off";
116
115
  /**
117
116
  * Never let the follow camera drop below this above the character's feet.
@@ -121,10 +120,10 @@ export declare class B3dBiped extends B3dControllable {
121
120
  */
122
121
  cameraMinHeight: number;
123
122
  /**
124
- * Upward speed of a FULLY wound-up jump, m/s. The physics is fixed and the
125
- * ANIMATION is retimed to match it — not the other way round. Matching the
126
- * jump to the clip was tried and was wrong: it made the jump a consequence
127
- * of whatever the animator exported.
123
+ * Upward speed at take-off, m/s. The jump is instant (no wind-up), and the
124
+ * physics decides it: the start, loop and land clips each play for as long
125
+ * as they are true, so the jump is never a consequence of whatever the
126
+ * animator exported.
128
127
  */
129
128
  jumpSpeed: number;
130
129
  /** Fraction of walking speed while sneaking. */
@@ -143,6 +142,17 @@ export declare class B3dBiped extends B3dControllable {
143
142
  * A string enum rather than a boolean because a boolean attribute cannot
144
143
  * default to true, and the useful default here is "strafing off".
145
144
  */
145
+ /**
146
+ * **How high a ledge the character can pull itself onto, metres.** Below
147
+ * `STEP_UP` (0.5) the walking code just steps up; above this it is a wall.
148
+ *
149
+ * `2.2` is a touch over shoulder height on a 1.83 m rig — a decent mantle
150
+ * for someone athletic. Lower it for a heavier or clumsier character; that
151
+ * is the mobility half of the skill dial AI-DESIGN argues for, and it costs
152
+ * nothing to expose because the band it defines is read from geometry
153
+ * rather than painted onto it.
154
+ */
155
+ climbReach: number;
146
156
  /**
147
157
  * **How deep the water gets before you swim, as a fraction of standing
148
158
  * height.** Below this you wade — feet on the bottom, walking; above it
@@ -158,20 +168,11 @@ export declare class B3dBiped extends B3dControllable {
158
168
  * fraction tracks that for free. Metres would be right for a fact about the
159
169
  * WORLD; the two are easy to confuse and worth keeping apart.
160
170
  *
161
- * Leaving the water uses a lower threshold (70% of this) so the boundary
162
- * does not flicker; see `buoyancy.isSwimming`.
171
+ * Hysteresis, so the boundary does not flicker: you START swimming a bit
172
+ * deeper than this (1.3 × `wadeDepth`, about 0.59 of your height at the
173
+ * default) and stop once the water drops back to `wadeDepth` itself; see
174
+ * `buoyancy.isSwimming`.
163
175
  */
164
- /**
165
- * **How high a ledge the character can pull itself onto, metres.** Below
166
- * `STEP_UP` (0.5) the walking code just steps up; above this it is a wall.
167
- *
168
- * `2.2` is a touch over shoulder height on a 1.83 m rig — a decent mantle
169
- * for someone athletic. Lower it for a heavier or clumsier character; that
170
- * is the mobility half of the skill dial AI-DESIGN argues for, and it costs
171
- * nothing to expose because the band it defines is read from geometry
172
- * rather than painted onto it.
173
- */
174
- climbReach: number;
175
176
  wadeDepth: number;
176
177
  strafing: string;
177
178
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"b3d-biped.d.ts","sourceRoot":"","sources":["../src/b3d-biped.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"b3d-biped.d.ts","sourceRoot":"","sources":["../src/b3d-biped.ts"],"names":[],"mappings":"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"}
package/dist/b3d-biped.js CHANGED
@@ -190,10 +190,10 @@ preview.append(
190
190
  | `forwardSpeed` | `2` | Walk speed |
191
191
  | `runSpeed` | `5` | Sprint speed |
192
192
  | `backwardSpeed` | `1` | Backward speed |
193
- | `cameraHeightOffset` | `1` | Camera height above target |
194
- | `cameraTargetHeight` | `0.75` | Height of the point the camera looks at |
195
- | `cameraMinFollowDistance` | `2` | Closest follow distance |
196
- | `cameraMaxFollowDistance` | `5` | Furthest follow distance |
193
+ | `cameraHeightOffset` | `2` | Camera height above target |
194
+ | `cameraTargetHeight` | `1.4` | Height of the point the camera looks at |
195
+ | `cameraMinFollowDistance` | `4` | Closest follow distance |
196
+ | `cameraMaxFollowDistance` | `10` | Furthest follow distance |
197
197
 
198
198
  ## Animations
199
199
 
@@ -473,16 +473,6 @@ export class B3dBiped extends B3dControllable {
473
473
  aimMaxYaw: 90,
474
474
  /** How far up/down the look can go, degrees. */
475
475
  maxLookPitch: 70,
476
- /**
477
- * Invert the right stick's vertical. **On by default** — Tonio's call, and
478
- * the conventional one for a third-person camera: pushing the stick away
479
- * from you tips the view DOWN, the way a physical camera head works. Set
480
- * `'off'` for the direct mapping.
481
- *
482
- * A string enum rather than a boolean because an absent boolean attribute
483
- * is false, so a default-true boolean can never turn on (and tosijs now
484
- * throws on one) — see CLAUDE.md.
485
- */
486
476
  /*
487
477
  NOT INVERTED, which is a changed default and the direct cause of a bug
488
478
  report: "when I fire it just fires into my feet".
@@ -506,6 +496,15 @@ export class B3dBiped extends B3dControllable {
506
496
  * which is what makes a too-large value feel like floating.
507
497
  */
508
498
  eyeForward: 0.13,
499
+ /**
500
+ * Invert the right stick's vertical. **Off by default**: pushing the stick
501
+ * up looks (and aims) up. `'on'` gives the inverted, aircraft-style mapping,
502
+ * where pushing the stick away tips the view down.
503
+ *
504
+ * A string enum rather than a boolean because an absent boolean attribute
505
+ * is false, so a default-true boolean can never turn on (and tosijs now
506
+ * throws on one) — see CLAUDE.md.
507
+ */
509
508
  invertLookY: 'off',
510
509
  /**
511
510
  * Never let the follow camera drop below this above the character's feet.
@@ -515,10 +514,10 @@ export class B3dBiped extends B3dControllable {
515
514
  */
516
515
  cameraMinHeight: 0.5,
517
516
  /**
518
- * Upward speed of a FULLY wound-up jump, m/s. The physics is fixed and the
519
- * ANIMATION is retimed to match it — not the other way round. Matching the
520
- * jump to the clip was tried and was wrong: it made the jump a consequence
521
- * of whatever the animator exported.
517
+ * Upward speed at take-off, m/s. The jump is instant (no wind-up), and the
518
+ * physics decides it: the start, loop and land clips each play for as long
519
+ * as they are true, so the jump is never a consequence of whatever the
520
+ * animator exported.
522
521
  */
523
522
  jumpSpeed: 4.5,
524
523
  /** Fraction of walking speed while sneaking. */
@@ -537,6 +536,17 @@ export class B3dBiped extends B3dControllable {
537
536
  * A string enum rather than a boolean because a boolean attribute cannot
538
537
  * default to true, and the useful default here is "strafing off".
539
538
  */
539
+ /**
540
+ * **How high a ledge the character can pull itself onto, metres.** Below
541
+ * `STEP_UP` (0.5) the walking code just steps up; above this it is a wall.
542
+ *
543
+ * `2.2` is a touch over shoulder height on a 1.83 m rig — a decent mantle
544
+ * for someone athletic. Lower it for a heavier or clumsier character; that
545
+ * is the mobility half of the skill dial AI-DESIGN argues for, and it costs
546
+ * nothing to expose because the band it defines is read from geometry
547
+ * rather than painted onto it.
548
+ */
549
+ climbReach: 2.2,
540
550
  /**
541
551
  * **How deep the water gets before you swim, as a fraction of standing
542
552
  * height.** Below this you wade — feet on the bottom, walking; above it
@@ -552,20 +562,11 @@ export class B3dBiped extends B3dControllable {
552
562
  * fraction tracks that for free. Metres would be right for a fact about the
553
563
  * WORLD; the two are easy to confuse and worth keeping apart.
554
564
  *
555
- * Leaving the water uses a lower threshold (70% of this) so the boundary
556
- * does not flicker; see `buoyancy.isSwimming`.
565
+ * Hysteresis, so the boundary does not flicker: you START swimming a bit
566
+ * deeper than this (1.3 × `wadeDepth`, about 0.59 of your height at the
567
+ * default) and stop once the water drops back to `wadeDepth` itself; see
568
+ * `buoyancy.isSwimming`.
557
569
  */
558
- /**
559
- * **How high a ledge the character can pull itself onto, metres.** Below
560
- * `STEP_UP` (0.5) the walking code just steps up; above this it is a wall.
561
- *
562
- * `2.2` is a touch over shoulder height on a 1.83 m rig — a decent mantle
563
- * for someone athletic. Lower it for a heavier or clumsier character; that
564
- * is the mobility half of the skill dial AI-DESIGN argues for, and it costs
565
- * nothing to expose because the band it defines is read from geometry
566
- * rather than painted onto it.
567
- */
568
- climbReach: 2.2,
569
570
  wadeDepth: 0.45,
570
571
  strafing: 'off',
571
572
  /**
@@ -2369,10 +2370,10 @@ export class B3dBiped extends B3dControllable {
2369
2370
  mid-torso, so measuring from it asks "how deep would it be if I
2370
2371
  stood with my feet where my chest is".
2371
2372
 
2372
- Scaled so `wadeDepth` lands exactly on `isSwimming`'s 0.5 entry
2373
- threshold, which keeps that model's tested hysteresis — you stop
2374
- swimming at 0.7 × wadeDepth — while letting the threshold be stated
2375
- as the fraction it is.
2373
+ Scaled so `wadeDepth` lands on `isSwimming`'s 0.5 EXIT threshold:
2374
+ you start swimming at 1.3 × wadeDepth (its 0.65 entry) and stop at
2375
+ wadeDepth, which keeps that model's tested hysteresis while letting
2376
+ the threshold be stated as the fraction it is.
2376
2377
  */
2377
2378
  submergedFraction(groundY, standHeight, surfaceY) /
2378
2379
  (2 * Math.max(0.05, attrs.wadeDepth))