tosijs-3d 0.8.4 → 0.8.6

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 (118) hide show
  1. package/CHANGELOG.md +362 -0
  2. package/dist/b3d-aircraft.d.ts +40 -0
  3. package/dist/b3d-aircraft.d.ts.map +1 -1
  4. package/dist/b3d-aircraft.js +158 -3
  5. package/dist/b3d-aircraft.js.map +1 -1
  6. package/dist/b3d-ambient.d.ts +5 -0
  7. package/dist/b3d-ambient.d.ts.map +1 -1
  8. package/dist/b3d-ambient.js +102 -54
  9. package/dist/b3d-ambient.js.map +1 -1
  10. package/dist/b3d-cloud-deck.d.ts +49 -0
  11. package/dist/b3d-cloud-deck.d.ts.map +1 -1
  12. package/dist/b3d-cloud-deck.js +375 -63
  13. package/dist/b3d-cloud-deck.js.map +1 -1
  14. package/dist/b3d-clouds.js +1 -1
  15. package/dist/b3d-clouds.js.map +1 -1
  16. package/dist/b3d-controllable.d.ts +3 -0
  17. package/dist/b3d-controllable.d.ts.map +1 -1
  18. package/dist/b3d-controllable.js +16 -0
  19. package/dist/b3d-controllable.js.map +1 -1
  20. package/dist/b3d-controller.d.ts.map +1 -1
  21. package/dist/b3d-controller.js.map +1 -1
  22. package/dist/b3d-input-focus.d.ts.map +1 -1
  23. package/dist/b3d-input-focus.js +4 -0
  24. package/dist/b3d-input-focus.js.map +1 -1
  25. package/dist/b3d-launcher.d.ts +9 -0
  26. package/dist/b3d-launcher.d.ts.map +1 -1
  27. package/dist/b3d-launcher.js +24 -2
  28. package/dist/b3d-launcher.js.map +1 -1
  29. package/dist/b3d-light-shafts.d.ts +74 -0
  30. package/dist/b3d-light-shafts.d.ts.map +1 -0
  31. package/dist/b3d-light-shafts.js +723 -0
  32. package/dist/b3d-light-shafts.js.map +1 -0
  33. package/dist/b3d-lightning.d.ts +82 -0
  34. package/dist/b3d-lightning.d.ts.map +1 -0
  35. package/dist/b3d-lightning.js +744 -0
  36. package/dist/b3d-lightning.js.map +1 -0
  37. package/dist/b3d-panel.d.ts +3 -0
  38. package/dist/b3d-panel.d.ts.map +1 -1
  39. package/dist/b3d-panel.js +5 -0
  40. package/dist/b3d-panel.js.map +1 -1
  41. package/dist/b3d-skybox.d.ts +6 -0
  42. package/dist/b3d-skybox.d.ts.map +1 -1
  43. package/dist/b3d-skybox.js +44 -4
  44. package/dist/b3d-skybox.js.map +1 -1
  45. package/dist/b3d-terrain.d.ts.map +1 -1
  46. package/dist/b3d-terrain.js +11 -7
  47. package/dist/b3d-terrain.js.map +1 -1
  48. package/dist/b3d-trail.d.ts +65 -0
  49. package/dist/b3d-trail.d.ts.map +1 -0
  50. package/dist/b3d-trail.js +228 -0
  51. package/dist/b3d-trail.js.map +1 -0
  52. package/dist/b3d-warhead.d.ts.map +1 -1
  53. package/dist/b3d-warhead.js +5 -2
  54. package/dist/b3d-warhead.js.map +1 -1
  55. package/dist/b3d-water.d.ts +38 -0
  56. package/dist/b3d-water.d.ts.map +1 -1
  57. package/dist/b3d-water.js +361 -4
  58. package/dist/b3d-water.js.map +1 -1
  59. package/dist/b3d-weather-cell.d.ts +51 -0
  60. package/dist/b3d-weather-cell.d.ts.map +1 -0
  61. package/dist/b3d-weather-cell.js +207 -0
  62. package/dist/b3d-weather-cell.js.map +1 -0
  63. package/dist/caustics.d.ts +34 -0
  64. package/dist/caustics.d.ts.map +1 -0
  65. package/dist/caustics.js +197 -0
  66. package/dist/caustics.js.map +1 -0
  67. package/dist/cloud-field.d.ts +33 -0
  68. package/dist/cloud-field.d.ts.map +1 -1
  69. package/dist/cloud-field.js +54 -0
  70. package/dist/cloud-field.js.map +1 -1
  71. package/dist/cloud-shadows.d.ts +9 -0
  72. package/dist/cloud-shadows.d.ts.map +1 -1
  73. package/dist/cloud-shadows.js +14 -0
  74. package/dist/cloud-shadows.js.map +1 -1
  75. package/dist/fly-by-wire.d.ts +24 -0
  76. package/dist/fly-by-wire.d.ts.map +1 -1
  77. package/dist/fly-by-wire.js +47 -9
  78. package/dist/fly-by-wire.js.map +1 -1
  79. package/dist/frame-panel.d.ts +22 -4
  80. package/dist/frame-panel.d.ts.map +1 -1
  81. package/dist/frame-panel.js +94 -2
  82. package/dist/frame-panel.js.map +1 -1
  83. package/dist/index.d.ts +8 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +5 -1
  86. package/dist/index.js.map +1 -1
  87. package/dist/land-and-sky.js +307 -20
  88. package/dist/land-and-sky.js.map +1 -1
  89. package/dist/landform.d.ts +39 -0
  90. package/dist/landform.d.ts.map +1 -1
  91. package/dist/landform.js +77 -0
  92. package/dist/landform.js.map +1 -1
  93. package/dist/light-rays.d.ts +61 -0
  94. package/dist/light-rays.d.ts.map +1 -0
  95. package/dist/light-rays.js +113 -0
  96. package/dist/light-rays.js.map +1 -0
  97. package/dist/lightning.d.ts +65 -0
  98. package/dist/lightning.d.ts.map +1 -0
  99. package/dist/lightning.js +164 -0
  100. package/dist/lightning.js.map +1 -0
  101. package/dist/scene-schemas.d.ts.map +1 -1
  102. package/dist/scene-schemas.js +17 -0
  103. package/dist/scene-schemas.js.map +1 -1
  104. package/dist/sdf-lattice.d.ts +26 -0
  105. package/dist/sdf-lattice.d.ts.map +1 -1
  106. package/dist/sdf-lattice.js +17 -0
  107. package/dist/sdf-lattice.js.map +1 -1
  108. package/dist/tosi-b3d.d.ts +44 -1
  109. package/dist/tosi-b3d.d.ts.map +1 -1
  110. package/dist/tosi-b3d.js +137 -22
  111. package/dist/tosi-b3d.js.map +1 -1
  112. package/dist/weather.d.ts +47 -0
  113. package/dist/weather.d.ts.map +1 -0
  114. package/dist/weather.js +99 -0
  115. package/dist/weather.js.map +1 -0
  116. package/package.json +1 -1
  117. package/static/attributes.json +401 -10
  118. package/static/attributes.txt +99 -6
package/CHANGELOG.md CHANGED
@@ -6,6 +6,368 @@ 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.8.6
10
+
11
+ **Other worlds.** Land and Sky becomes a world builder: presets you pick,
12
+ save and share, with Earth, Mars, Venus, the Moon, Io and Titan built in.
13
+ A crater field landform, volcano fields, ground palettes, sea colours, and
14
+ a sun whose size and brightness follow the world. Lightning casts shadows
15
+ and darkens the day, and the aircraft demo has weather to fly in.
16
+
17
+ Size: barrel (min, packages external) 885.2 KB raw / 296.3 KB gz, about
18
+ +0.3% on 0.8.5.
19
+
20
+ ### Added
21
+
22
+ - **Land and Sky presets** (board #2442, stage 1): a whole world as data
23
+ (terrain, sea, climate, weather, atmosphere, stars, moons, cloud colours,
24
+ sun) you pick from the ⚙ panel's new **World** section, save as a new
25
+ preset (kept in your browser) or copy and paste as JSON. Built in: Earth,
26
+ Mars and Venus. A preset lists only what it changes, over Earth.
27
+ - **The sun's size and brightness per world** (`b3d-skybox` `sunSize`,
28
+ `sunBrightness`): the disc (and its glow in vacuum and in the water
29
+ window's HDR capture) scales with 1/distance (Venus 1.39, Mars 0.66, Io
30
+ 0.19, Titan 0.11); its light is set by how it LOOKS (a log curve), not by
31
+ the inverse square, because the eye adapts.
32
+ - **Venus is one giant lightning storm** under a maxed, sulfur-yellow deck;
33
+ Land and Sky's storm is preset-able (where, how big, the cover it adds,
34
+ how often it strikes). **Mars is red**: hot and bone-dry, so the palette's
35
+ red dust (temperature falls with altitude; a cooler Mars went grey). The
36
+ volcano is off for both until each world has its own landforms.
37
+ - **`craterField`** (landform): a whole cratered surface, seeded and
38
+ unbounded. Sizes in doubling classes, one grid per class sized to its
39
+ craters, so a real 1/size-squared population is one presence roll per
40
+ cell and a terrain sample checks one cell per class. Big (old) craters
41
+ first, small ones punch into them; each worn to its own age; complex
42
+ craters (flat floor, central peak) past `complexRadius`. Land and Sky has
43
+ a **craters** slider; Mars 0.35, Venus 0.06 (its surface is young). Dry
44
+ worlds have **no sea** (`sea: false`): no water plane, no shore colours.
45
+ - **Moon, Io and Titan presets.** The Moon: airless, saturated craters, grey
46
+ regolith, stars at noon, Earth in its sky. Io: a sulfur palette (frost,
47
+ yellow, orange-red, black lava), a field of hot volcanoes, a tiny sun.
48
+ Titan: orange haze and cloud over dark amber methane seas, a tiny, dim
49
+ sun. Land and Sky gains **volcanoes** (a seeded field), a **ground
50
+ palette** (swapped on the biome shader) and sea colours. `b3d-water`
51
+ gains **`fogColor`**: the colour of the water you are in, which the
52
+ underwater fog, the medium and the light shafts all read.
53
+ - **Venus: no rain, gentler relief.** Its sulfuric acid rain evaporates
54
+ before reaching the ground, and the surface is mostly smooth lava plains;
55
+ the storm's rain is now a preset setting (`stormRain`).
56
+ - **The aircraft demo has weather to fly in**: ⚙ sliders for wind (blowing
57
+ across your starting heading, so you crab) and storminess (a storm cell
58
+ over the whole arena), and a live turbulence readout.
59
+
60
+ ### Fixed
61
+
62
+ - **Lightning bolts vanished into haze** while their light still lit the
63
+ ground (Tonio: "I see flashes but never seem to see lightning strokes"):
64
+ under a closed deck the scene fog swallowed the bolt meshes. Bolts ignore
65
+ fog now; they are far brighter than anything it hides.
66
+ - **Distant lightning strokes did not render**: a 1.6 m channel is a small
67
+ fraction of a pixel a few kilometres off, so under a big storm most bolts
68
+ vanished while their flash lit everything. Bolts (and their glow) now
69
+ scale with distance, never thinner than about a pixel and a half.
70
+
71
+ ## 0.8.5
72
+
73
+ **Weather you can watch.** Storms that darken the day and strike: lightning
74
+ that lights the cloud from below, inside and above, lights the landscape and
75
+ throws shadows, with thunder at the speed of sound. Shafts of sun through a
76
+ broken sky, and the sky and sun seen through the water from below, with rays
77
+ fanning down from them. Rain and snow from the weather, the wind carrying
78
+ aircraft and buffeting them in a storm. And two long-hidden bugs: the cloud
79
+ deck's local weather was mirrored north-south, and on the doc site no shadow
80
+ map had rendered at all.
81
+
82
+ Size: barrel (min, packages external) 883.2 KB raw / 295.6 KB gz (+5.7% gz),
83
+ for lightning, light shafts, weather cells, trails and caustics.
84
+
85
+ ### Fixed
86
+
87
+ - **Lightning lit the land through cloud-shaped shadows** (Tonio: "the
88
+ directional light seems to be coming from above the cloud layer ... the
89
+ shadows are mostly cloud"). The projected cloud shadow multiplied the
90
+ whole lit colour, flash included; a flash starts BELOW the cloud, so the
91
+ cloud shadow now fades while the deck is flashing (`strengthSource`, read
92
+ at draw time).
93
+ - **Moonlight made shafts as bright as noon.** The shafts' colour was
94
+ normalised and never scaled by the light's intensity; the skybox puts the
95
+ moon in the same light at night. They now scale with it (moon shafts are
96
+ real, and faint).
97
+ - **Shafts are SMALL where they leave the deck or the surface** (Tonio: the
98
+ wider they are, the more obvious any mismatch with the gap): sky `width`
99
+ 200 -> 40 m (4 m near closed cover), underwater rays 0.2-0.8 m.
100
+
101
+ - **No shadow map rendered on the doc site, the sun's included.** Babylon's
102
+ shadow generators lazy-load their shaders from code-split chunks, and each
103
+ chunk loaded a second copy of the site bundle (tosijs-ui#191), which threw,
104
+ so the shaders never loaded and every `isReady()` stayed false. The site
105
+ entry now imports the shadow shaders statically and tells the generators
106
+ they are loaded (site-only workaround; the library is unaffected).
107
+
108
+ - **Thunder kept playing after leaving the page** (Tonio). Thunder is
109
+ scheduled ahead on the audio clock (a storm 2 km off rumbles 6 s after its
110
+ flash, for 4 s), and disposing `<tosi-b3d-lightning>` neither stopped it
111
+ nor closed the context. It now closes its AudioContext, silencing
112
+ anything queued at once and no longer leaking a context per visit.
113
+
114
+ - **The cloud deck's local-weather texture was MIRRORED north-south.**
115
+ Babylon's ground rows run from +Z to -Z; the texture's rows the other way.
116
+ Everything reading the texture (local coverage, storm gloom, the cloud
117
+ shadow) put storms and orographic cloud at the mirror image of where they
118
+ were, invisible when a storm sat near the deck's centre. The lightning
119
+ demo's storm, 1.3 km off-centre, was drawn 1.3 km the other way, so every
120
+ strike lit empty sky. Pure `packWeatherTexture` flips the rows, tested.
121
+ - **A storm's sky only closed at its very core**, so from below you looked
122
+ up through gaps at the inside of the tower, which read as the deck's
123
+ BOTTOM bowing upward (Tonio). A storm now counts in full in the coverage
124
+ (its share is taken out of the ramped field and added back whole): a cell
125
+ of 1.8 closes the sky over the inner half of its radius, the base stays
126
+ flat, and only the top skin rises into the tower. From above the ceiling
127
+ bulges up; from below it is a flat, solid underside.
128
+ - **A strike lit the cloud one frame late** (the deck pushed its flash before
129
+ lightning set it); the flash is now written at draw time. It also lights
130
+ the TOP skin, so a tower seen from the side glows, and the ground light
131
+ sits halfway between the cloud base and the terrain under the strike.
132
+
133
+ - **The launcher demo's left stick did nothing** (board #2434). Since the
134
+ GTA-style remap the biped mapping sends A/D and left-stick X to `strafe`
135
+ and only the right stick to `turn`; three doc demos (launcher, warhead,
136
+ the controller's rover) still steered on `turn` alone, so the glass
137
+ pad's stick and A/D were dead. They now steer on either.
138
+
139
+ - **Orographic cloud filled the whole sky over land** (Tonio: "orographic is
140
+ the problem. It fills the transparent areas without changing apparent
141
+ cloud coverage"). The lift was measured from ABSOLUTE height, so with Land
142
+ and Sky's sea at 147 m every bit of land counted as mountain and added
143
+ +0.5 to +0.75 coverage: a 0.3 sky rendered as a solid grey sheet. It is
144
+ now measured from the SEA (the scene's water surface) and weighted to
145
+ RIDGES (ground above its surroundings); a high flat plateau keeps 35% of
146
+ it. Pure: `cloud-field`'s `orographicLift`, tested. `orographicPeak` is now
147
+ the height above the sea.
148
+
149
+ ### Added
150
+
151
+ - **Lightning casts shadows** (Tonio: "spin up a shadow map and retain it
152
+ between strokes and just use it for the brightest strike"). ONE shadow map,
153
+ kept; re-rendered once per new brightest ground strike, never per frame.
154
+ The strike's light is a POINT light by default (`flashLight`), from the
155
+ middle of the channel, so shadows radiate from the bolt (a cube map: six
156
+ renders per strike); `'directional'` is the one-render option for low-end
157
+ devices. Casters within `shadowRange` of you (and of the strike, for a
158
+ point light); `shadows`, `shadowSize`. It replaces the old point light, so
159
+ the scene stays within a material's 4-light budget. The lightning demo now
160
+ has hills, trees and a hamlet under the storm.
161
+ - **A storm darkens the day around it** (Tonio: "cut ambient and even sun
162
+ brightness somewhat when lightning is flashing ... by half"): new
163
+ `darken` on `<tosi-b3d-lightning>` (0.5) takes the sun and the ambient
164
+ fill down by half at full storm, easing with distance and strength,
165
+ through the cloud deck's own light handling (`deck.stormDim`) so the two
166
+ cannot compound. The deck's gloom no longer dims lightning's own lights
167
+ (it was cutting the landscape flash by up to 90% under cover).
168
+ - **Land and Sky: a "lightning storm" toggle** beside the volcano: the storm
169
+ gathers in front of you over 20 s, strikes, rains and throws strike
170
+ shadows, then drifts away east.
171
+ - **Lightning is dramatic** (Tonio: "having the lightning be dramatically
172
+ bright"): each strike lights the WHOLE landscape from above (falling off
173
+ with the storm's distance), the tower from inside, harder, and the bolt
174
+ carries an additive halo. New `brightness` (the drama) and `rate` (how
175
+ often, a multiple of the natural rate; pure `strikesBetween` takes it,
176
+ tested) on `<tosi-b3d-lightning>`; `groundLight` default 2.5 -> 6. Storm
177
+ lightning also brightens the WHITEOUT when you are inside the cloud. The
178
+ landscape flash is strong enough for a dark ground to read as lit (peak
179
+ 3.5, halving at 6 km; the ground light reaches 6 km). The
180
+ demo has a scene panel: storm size,
181
+ how often, cloud cover, brightness, time of day. A storm is no longer a
182
+ TOWER by default (Tonio: "it basically looks terrible"): the deck's
183
+ `stormRise` defaults to 0 (opt-in, domed when on), so a storm is more
184
+ cover and lightning. From below the flash lights the underside and the
185
+ ground, inside it the whiteout, above it the top.
186
+ - **Weather reaches the airframe** (board #1125). `<tosi-b3d-aircraft>` asks
187
+ the scene for the weather where it is: the WIND carries it (it chases an
188
+ air-relative velocity, so a crosswind crabs it downwind), and a STORM
189
+ buffets it — seeded disturbance on pitch, roll and climb that the attitude
190
+ controller fights back toward the stick. Strong wind alone adds a little.
191
+ New attributes **`turbulence`** (`'on'`/`'off'`, default on) and
192
+ **`turbulenceScale`** (default `1`), and a read-only **`turbulenceLevel`**
193
+ (0–1) for a HUD or a debug readout. The disturbance is the pure, seeded
194
+ **`turbulence(t, seed, level)`** in `fly-by-wire`. Nothing happens on the
195
+ ground or in an owner without the weather service.
196
+ - **Light shafts** (WEATHER-DESIGN stage 4, board #1084), to Tonio's model
197
+ (pure half: **`light-rays`**): **`<tosi-b3d-light-shafts>`** hangs shafts
198
+ from the gaps in the cloud deck, BELOW it, running along the sun and
199
+ widening slightly (`spread`), and as broad as the gaps: `width` at the
200
+ 0.5 threshold down to slits as the cover closes toward 1. An additive,
201
+ flat fill of the sun's colour — `strength` 0.35 at the cloud, linear to 0 — most prominent looking toward
202
+ the sun (a forward-scatter phase, per pixel), and only where the local
203
+ cover is broken: 0.5 up to (not including) 1. Placement searches a fine
204
+ grid near you as well as a coarse one far out, keeps one shaft per gap,
205
+ and only refuses a shaft that would pass through you, so a deck just
206
+ above your head (Land and Sky) gets shafts too. The same model runs UNDER
207
+ THE WATER: shafts from the surface, bent by Snell's law, sunlight tinted
208
+ by the water's fog, shimmering as cells come and go (`underwater`,
209
+ `underwaterCount`). SURFACE TURBULENCE drives them (the wind over the
210
+ water, its `waveHeight` and `bumpHeight`): calm water gives a few broad,
211
+ slow rays, choppy water many narrow ones that flicker (`waterRoughness`,
212
+ `waterRayShape`; `waterRoughness` on the element reads it back). The doc
213
+ page has an underwater demo. Shafts are RECTANGULAR (`spread` 0), so
214
+ perspective alone makes them radiate from the sun; sky placement is
215
+ weighted hard toward the sun's position in view, and underwater rays are
216
+ biased toward the viewer so the middle of the view is not empty. Rain adds
217
+ to the strength.
218
+ - **The weather-cell demo has a frame of reference** (Tonio: "it has no
219
+ frame of reference so it just looks like leaves blowing around"): a row of
220
+ flagpoles you fly past, each flag showing the wind WHERE IT STANDS
221
+ (streaming downwind, limp in the lee), and the lee's edge drawn as a ring
222
+ on the water.
223
+ - **The sky through the water, from below** (`b3d-water` `undersideSky`,
224
+ default 1; Tonio: "we want to see the sky and sun through and distorted by
225
+ the water surface"). The window no longer shows a flat colour: a small
226
+ reflection probe photographs the sky with its fog and veil OFF, and the
227
+ underside refracts it through the water's own ripples, so the sky and the
228
+ sun arrive bent and moving. Clearest in the shallows, fading with depth,
229
+ giving way to the dark mirror at grazing angles. The probe is HALF-FLOAT
230
+ and captures the sun as HDR (a new skybox uniform, `b3dSunHdr`, 0 in
231
+ normal rendering), so the sun still punches through the partial
232
+ transmission of the surface (Tonio: "our skybox isn't HDR so its glare
233
+ doesn't punch through"). (It replaces a glare sprite that looked fake.) Underwater rays are fewer (`underwaterCount`
234
+ 12, lower presence).
235
+ - **Rain and snow from the weather** (WEATHER-DESIGN stage 5, board #1124).
236
+ `b3d-ambient` gains `weather: 'rain' | 'snow'`: emission follows the
237
+ PRECIPITATION where the viewer is, so a storm brings its own rain and it
238
+ eases in and out as the storm passes; the local temperature splits rain
239
+ from snow (sleet between). Rain now draws as STREAKS stretched along its
240
+ velocity, so the wind visibly slants it. Land and Sky's storm rains.
241
+ - **Lightning and thunder** (WEATHER-DESIGN stage 3, board #1123):
242
+ **`<tosi-b3d-lightning>`** strikes under every weather cell with
243
+ `storminess`, seeded (same seed, same storm; frame rate cannot change it).
244
+ Cloud-to-ground strikes draw a jagged, branching bolt that flickers through
245
+ its re-strokes and light the ground; every strike lights the cloud deck from
246
+ INSIDE around it (`deck.flash()`, a new hook: why storms want coverage past
247
+ 1); thunder is procedural and arrives at the speed of sound, so you can
248
+ count the distance; and over strong storms, rarely, **sprites**: brief
249
+ red-pink crowns with purple tendrils high above the tower. Each strike
250
+ dispatches `strike` with `{ kind, x, z, t, distance }`. The pure model is
251
+ `lightning.ts` (`strikesBetween`, `boltPath`, `flashAt`, `thunderDelay`).
252
+ Land and Sky's storm now brings lightning.
253
+ - **Weather, stage 2: a storm you can see** (board #1122). A
254
+ `<tosi-b3d-weather-cell>` with `coverage` joins the cloud deck's local
255
+ weather field: denser cloud over it, a greyer, heavier underside (its own
256
+ "gloom" channel, so orographic cloud still never repaints fair weather as
257
+ foul), the storm's shadow on the ground beneath (the shadow reads the same
258
+ field), and full strength even when the global dial says clear. A drifting
259
+ cell re-bakes about once per 10 m of travel.
260
+ Land and Sky has a **storm** toggle in its Weather group: a storm drifting
261
+ with the wind (the scene's wind now matches the deck's) that passes over
262
+ you and recedes into view.
263
+ Cells gain **`grow`** (seconds to gather from nothing to full), so a storm
264
+ builds rather than appearing; the deck re-bakes in 1% strength steps as it
265
+ does. Across SPACE a cell was already gradual: a smoothstep over its whole
266
+ radius, smoothed again by the deck.
267
+ **Storm towers:** cell coverage now runs to 2, and past 1 is THICKNESS,
268
+ as on the deck's own dial: the deck lifts its top skin there by up to
269
+ `stormRise` (1,500 m), whatever the global dial says, so a storm is a dark
270
+ heavy base from below and a bright tower from above, and the thing
271
+ lightning will light from inside. The cell channels get one smoothing pass,
272
+ not the orographic field's four (which flattened a storm's excess from 0.7
273
+ to 0.18). Land and Sky's storm is coverage 1.7.
274
+ - **Weather, stage 1: the weather where you are** (WEATHER-DESIGN.md, board
275
+ #255). `b3d.weatherAt(x, z)` (and `weatherHere()`) answers what every
276
+ weather consumer asks: the scene's base wind plus every
277
+ **`<tosi-b3d-weather-cell>`** that reaches the point, composed per quantity
278
+ (wind and temperature sum, coverage sums clamped, precipitation and
279
+ storminess take the max). Clouds, water and ambient now read the wind AT
280
+ THE VIEWER rather than one scene-wide value, so a lee is calm and a squall
281
+ is local. A cell with `drift="wind"` travels with the wind (a weather
282
+ system), and `lifetime` grows, holds and ends it. The pure model is
283
+ `weather.ts`. Measured on the new page: leaves' wind 12 → 0.96 m/s crossing
284
+ a lee's centre.
285
+ - **Caustics** (board #198, tosijs-3d#16): light through the moving surface,
286
+ dancing on whatever is beneath a `twoSided` `b3d-water` (`caustics`,
287
+ `'auto'` = on whenever `twoSided`; `causticsStrength`, `causticsScale`).
288
+ Projected by world position through a material plugin (the cloud-shadow
289
+ technique), so terrain, hulls and the player all get it with no per-mesh
290
+ setup; slants with the sun, shimmers (two moving layers, combined with
291
+ `min`), fades with depth and fog, and goes with the sun. The pattern is a
292
+ seeded, tiling cellular web (`causticPattern`), with no file to fetch.
293
+ - **One lattice per world, enforced where code can** (board #257,
294
+ tosijs-3d#75): every `extractChunk` result carries its `lattice` identity
295
+ (`latticeIdentity(cfg)`), and `assertLatticesWeld(chunks)` throws on a
296
+ mismatch instead of leaving a crack. TUNNEL-DESIGN.md records the decision
297
+ that carves are world-level objects provinces declare but don't own, so a
298
+ tunnel between provinces is just a carve in the field.
299
+ - **Snell's window: the water's underside** (board #197, tosijs-3d#15). Looking
300
+ up from under a `twoSided` `b3d-water` used to show flat dark blue. Now
301
+ (`underside`, `'auto'` = on whenever `twoSided`) it is a bright window onto
302
+ the sky overhead, darkening to a mirror of the depths toward grazing angles,
303
+ rippling with the same normal map as the surface, and fading in with the
304
+ underwater fog's own band weight. One plane, one draw call, only while
305
+ submerged. `undersideColor` / `undersideDepthColor` tune the two ends. It
306
+ stays OPAQUE and the sky stays fogged, unlike the prototype, so a level look
307
+ under water still sees murk rather than sky.
308
+ - **`b3d.debugFogColor`** (`'#ff00ff'`) paints the composited fog a colour
309
+ nothing else is, to tell fog from surface from sky; also a toggle on the
310
+ Perf Stats panel's new Fog row (with density, end and veil), for a headset.
311
+ - **`<tosi-b3d-trail>`** — a ribbon behind anything that moves (contrails,
312
+ missile smoke, a fast enemy's wake), lifted from manta-recon's engine
313
+ contrails (tosijs-3d#4, board #186). Nest it in the mover, give it a local
314
+ offset; it measures speed at its own emitter (so it works on anything),
315
+ fades below `minSpeed`, takes `underwaterColor` below a `<tosi-b3d-water>`,
316
+ re-attaches when the host's mesh is replaced (respawn, async load), and
317
+ resets on a floating-origin shift. **`attachTrail(node, scene, options)`**
318
+ is the same for a node you hold, such as a spawned missile.
319
+ Missiles get it for free: `<tosi-b3d-launcher missile-trail="on">`, or
320
+ `trail` on `spawnProjectile`/`spawnMissile` for your own rounds.
321
+ - **Frame panels are usable as menus** (board #768, tosijs-3d#92, from
322
+ manta-recon moving its outer game to viewer-relative panels):
323
+ - **They route pointers.** A `panel3d` on a frame panel now takes presses,
324
+ drags and hover from mouse, touch and XR rays (the same routing
325
+ `b3d-svg-plane` has), and repaints immediately on press and release rather
326
+ than on the texture's 400 ms timer. Before, the buttons drew and ignored
327
+ every click, with no error.
328
+ - `attachFramePanel` returns its **`mesh`**.
329
+ - **`resolution`** on `FramePanelSpec` (and `<tosi-b3d-panel resolution>`):
330
+ 384 suits a reticle, not a menu of text.
331
+ - **`flatFrame` applies to any panel**, not only hand panels, so
332
+ `flatFrame: 'face'` measures a flat panel's elevation from the VIEW rather
333
+ than the off-screen horizon of a pitched camera.
334
+ - **Flying under water feels like water** (board #185, manta's #3). A
335
+ `submersible` aircraft now meets a thicker MEDIUM below the surface:
336
+ `waterDrag` (×10 by default, the 2010 Manta's air:water ratio) multiplies
337
+ drag, blended over `waterTransition` metres. The controls are unchanged; full
338
+ throttle settles at ~32% of `maxSpeed`. **`surface-crossed`** fires on each
339
+ crossing with `{ entering, point, speed, aircraft }` for splash, wake and
340
+ audio cues, and **`submerged`** (0–1) is readable. In the pure model:
341
+ `FlyByWireConfig.mediumDrag`, and drag now clamps at rest instead of
342
+ overshooting into reverse on a long frame.
343
+
344
+ ### Fixed
345
+
346
+ - **Replacing the player left input focus on the removed one** (board #2421,
347
+ from manta-recon's respawn): the new craft got no input and its crash was
348
+ ignored by `b3d-death`. A controllable now releases focus when it is
349
+ disposed, and `adoptIfVacant` treats a disconnected focused entity as a
350
+ vacant seat. No more `releaseFocus()` before the swap.
351
+ - **Ambient wind accumulated every frame and flung particles away**: the
352
+ preset's direction vectors were assigned by reference, and the per-frame
353
+ `direction.set(preset + wind)` wrote into the preset, so the wind grew frame
354
+ on frame (drops at kilometres a second, never seen). Cloned now, and the
355
+ particles take the INHERITED wind (scene and weather cells), not only the
356
+ element's own `windX`/`windZ`.
357
+ - **Flat eye-anchored panels trailed a moving camera by one frame** (board
358
+ #767, found by manta-recon at 2.15 m per frame behind b3d-aircraft's follow
359
+ camera). The flat frames are now posed on `onBeforeCameraRenderObservable`,
360
+ after anything that moves the camera during the render. Measured: 0.000 m
361
+ gap over 64 frames of a camera moving 2 m per frame.
362
+ - **Every scene with a glass gamepad logged a type warning** (`gamepad is
363
+ declared boolean … but was written string`). `gamepad` is genuinely
364
+ `boolean | string` (`true` = the default layout, a string = a layout), so
365
+ it is now a plain property read once at setup rather than a typed attribute.
366
+ Markup (`gamepad`, `gamepad="…"`) and `b3d({ gamepad })` are unchanged.
367
+ - **`b3d-terrain.recenter()` threw away an authored `worldU`/`worldV`** (board
368
+ #458), resetting them to the defaults. It now clears the travel (the
369
+ floating-origin offset) and leaves the placement alone.
370
+
9
371
  ## 0.8.4
10
372
 
11
373
  **A sky you can actually see the stars in, and a world with things growing on
@@ -78,6 +78,23 @@ export declare class B3dAircraft extends B3dControllable {
78
78
  * (or `groundY`) beneath it.
79
79
  */
80
80
  submersible: boolean;
81
+ /**
82
+ * How much thicker water is than air, as a drag multiplier (submersible
83
+ * only). The 2010 Manta ran identical thrust at drag 0.1 above water and
84
+ * 1.0 below, so ×10: full throttle settles at ~32% of `maxSpeed`
85
+ * underwater and the controls feel the same, just heavier.
86
+ */
87
+ waterDrag: number;
88
+ /**
89
+ * `'off'` ignores the weather: no wind drift, no buffeting. On by default
90
+ * because a calm scene has no weather to feel, so it changes nothing
91
+ * until a wind or a storm is declared.
92
+ */
93
+ turbulence: "on" | "off";
94
+ /** Scales the buffeting (1 = as the weather says). */
95
+ turbulenceScale: number;
96
+ /** Metres over which the drag blends from air to water across the surface. */
97
+ waterTransition: number;
81
98
  crashSpeed: number;
82
99
  weapons: string;
83
100
  gunRate: number;
@@ -116,6 +133,17 @@ export declare class B3dAircraft extends B3dControllable {
116
133
  };
117
134
  airspeed: number;
118
135
  altitude: number;
136
+ /** Current turbulence 0–1 from the weather here (a HUD or audio can read it). */
137
+ turbulenceLevel: number;
138
+ private _turbulenceSeed;
139
+ /**
140
+ * How far under the water the airframe is, 0 (air) … 1 (fully submerged),
141
+ * blended over `waterTransition`. 0 whenever the scene has no water or the
142
+ * craft is not `submersible`. Read it for camera, audio or HUD cues.
143
+ */
144
+ submerged: number;
145
+ private _waterEl;
146
+ private _wasUnder;
119
147
  throttleLevel: number;
120
148
  vtolActive: boolean;
121
149
  stalling: boolean;
@@ -270,6 +298,18 @@ export declare class B3dAircraft extends B3dControllable {
270
298
  * Water is ground to something that cannot go under it, and scenery to
271
299
  * something that can. That is one rule, so it lives in one place.
272
300
  */
301
+ /**
302
+ * THE MEDIUM, sampled at the airframe: 0 in air, 1 underwater, blended
303
+ * across `waterTransition` so the drag change is felt as a thickening
304
+ * rather than a wall. Also the one place that notices the surface being
305
+ * CROSSED, and says so with a `surface-crossed` event (splash, wake, audio,
306
+ * camera cues are the game's; this only reports the moment).
307
+ *
308
+ * The water level is read from the MESH, like the biped's: water is
309
+ * viewer-centred and not origin-shifted, so the mesh is the honest answer.
310
+ * Looked up once and cached; a scene with no water costs nothing per frame.
311
+ */
312
+ private _medium;
273
313
  private skipForCollision;
274
314
  /** World nose direction (unit) and a muzzle point `ahead` metres in front.
275
315
  * Computed through the WORLD matrix, never node.position: with a
@@ -1 +1 @@
1
- {"version":3,"file":"b3d-aircraft.d.ts","sourceRoot":"","sources":["../src/b3d-aircraft.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"b3d-aircraft.d.ts","sourceRoot":"","sources":["../src/b3d-aircraft.ts"],"names":[],"mappings":"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"}