@holoscript/engine 6.0.3 → 6.0.4

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 (192) hide show
  1. package/dist/AutoMesher-CK47F6AV.js +17 -0
  2. package/dist/GPUBuffers-2LHBCD7X.js +9 -0
  3. package/dist/WebGPUContext-TNEUYU2Y.js +11 -0
  4. package/dist/animation/index.cjs +38 -38
  5. package/dist/animation/index.d.cts +1 -1
  6. package/dist/animation/index.d.ts +1 -1
  7. package/dist/animation/index.js +1 -1
  8. package/dist/audio/index.cjs +16 -6
  9. package/dist/audio/index.d.cts +1 -1
  10. package/dist/audio/index.d.ts +1 -1
  11. package/dist/audio/index.js +1 -1
  12. package/dist/camera/index.cjs +23 -23
  13. package/dist/camera/index.d.cts +1 -1
  14. package/dist/camera/index.d.ts +1 -1
  15. package/dist/camera/index.js +1 -1
  16. package/dist/character/index.cjs +6 -4
  17. package/dist/character/index.js +1 -1
  18. package/dist/choreography/index.cjs +1194 -0
  19. package/dist/choreography/index.d.cts +687 -0
  20. package/dist/choreography/index.d.ts +687 -0
  21. package/dist/choreography/index.js +1156 -0
  22. package/dist/chunk-2CSNRI2N.js +217 -0
  23. package/dist/chunk-33T2WINR.js +266 -0
  24. package/dist/chunk-35R73OFM.js +1257 -0
  25. package/dist/chunk-4MMDSUNP.js +1256 -0
  26. package/dist/chunk-5V6HOU72.js +319 -0
  27. package/dist/chunk-6QOP6PYF.js +1038 -0
  28. package/dist/chunk-7KMJVHIL.js +8944 -0
  29. package/dist/chunk-7VPUC62U.js +1106 -0
  30. package/dist/chunk-A2Y6RCAT.js +1878 -0
  31. package/dist/chunk-AHM42MK6.js +8944 -0
  32. package/dist/chunk-BL7IDTHE.js +218 -0
  33. package/dist/chunk-CITOMSWL.js +10462 -0
  34. package/dist/chunk-CXDPKW2K.js +8944 -0
  35. package/dist/chunk-CXZPLD4S.js +223 -0
  36. package/dist/chunk-CZYJE7IH.js +5169 -0
  37. package/dist/chunk-D2OP7YC7.js +6325 -0
  38. package/dist/chunk-EDRVQHUU.js +1544 -0
  39. package/dist/chunk-EJSLOOW2.js +3589 -0
  40. package/dist/chunk-F53SFGW5.js +1878 -0
  41. package/dist/chunk-HCFPELPY.js +919 -0
  42. package/dist/chunk-HNEE36PY.js +93 -0
  43. package/dist/chunk-HYXNV36F.js +1256 -0
  44. package/dist/chunk-IB7KHVFY.js +821 -0
  45. package/dist/chunk-IBBO7YYG.js +690 -0
  46. package/dist/chunk-ILIBGINU.js +5470 -0
  47. package/dist/chunk-IS4MHLKN.js +5479 -0
  48. package/dist/chunk-JT2PFKWD.js +5479 -0
  49. package/dist/chunk-K4CUB4NY.js +1038 -0
  50. package/dist/chunk-KATDQXRJ.js +10462 -0
  51. package/dist/chunk-KBQE6ZFJ.js +8944 -0
  52. package/dist/chunk-KBVD5K7E.js +560 -0
  53. package/dist/chunk-KCDPVQRY.js +4088 -0
  54. package/dist/chunk-KN4QJPKN.js +8944 -0
  55. package/dist/chunk-KWJ3ROSI.js +8944 -0
  56. package/dist/chunk-L45VF6DD.js +919 -0
  57. package/dist/chunk-LY4T37YK.js +307 -0
  58. package/dist/chunk-MDN5WZXA.js +1544 -0
  59. package/dist/chunk-MGCDP6VU.js +928 -0
  60. package/dist/chunk-NCX7X6G2.js +8681 -0
  61. package/dist/chunk-OF54BPVD.js +913 -0
  62. package/dist/chunk-OWSN2Q3Q.js +690 -0
  63. package/dist/chunk-PRRB5TTA.js +406 -0
  64. package/dist/chunk-PXWVQF76.js +4086 -0
  65. package/dist/chunk-PYCOIDT2.js +812 -0
  66. package/dist/chunk-PZCSADOV.js +928 -0
  67. package/dist/chunk-Q2XBVS2K.js +1038 -0
  68. package/dist/chunk-QDZRXWN5.js +1776 -0
  69. package/dist/chunk-RNWOZ6WQ.js +913 -0
  70. package/dist/chunk-ROLFT4CJ.js +1693 -0
  71. package/dist/chunk-SLTJRZ2N.js +266 -0
  72. package/dist/chunk-SRUS5XSU.js +4088 -0
  73. package/dist/chunk-TKCA3WZ5.js +5409 -0
  74. package/dist/chunk-TNRMXYI2.js +1650 -0
  75. package/dist/chunk-TQB3GJGM.js +9763 -0
  76. package/dist/chunk-TUFGXG6K.js +510 -0
  77. package/dist/chunk-U6KMTGQJ.js +632 -0
  78. package/dist/chunk-VMGJQST6.js +8681 -0
  79. package/dist/chunk-X4F4TCG4.js +5470 -0
  80. package/dist/chunk-ZIFROE75.js +1544 -0
  81. package/dist/chunk-ZIJQYHSQ.js +1204 -0
  82. package/dist/combat/index.cjs +4 -4
  83. package/dist/combat/index.d.cts +1 -1
  84. package/dist/combat/index.d.ts +1 -1
  85. package/dist/combat/index.js +1 -1
  86. package/dist/ecs/index.cjs +1 -1
  87. package/dist/ecs/index.js +1 -1
  88. package/dist/environment/index.cjs +14 -14
  89. package/dist/environment/index.d.cts +1 -1
  90. package/dist/environment/index.d.ts +1 -1
  91. package/dist/environment/index.js +1 -1
  92. package/dist/gpu/index.cjs +4810 -0
  93. package/dist/gpu/index.js +3714 -0
  94. package/dist/hologram/index.cjs +27 -1
  95. package/dist/hologram/index.js +1 -1
  96. package/dist/index-B2PIsAmR.d.cts +2180 -0
  97. package/dist/index-B2PIsAmR.d.ts +2180 -0
  98. package/dist/index-BHySEPX7.d.cts +2921 -0
  99. package/dist/index-BJV21zuy.d.cts +341 -0
  100. package/dist/index-BJV21zuy.d.ts +341 -0
  101. package/dist/index-BQutTphC.d.cts +790 -0
  102. package/dist/index-ByIq2XrS.d.cts +3910 -0
  103. package/dist/index-BysHjDSO.d.cts +224 -0
  104. package/dist/index-BysHjDSO.d.ts +224 -0
  105. package/dist/index-CKwAJGck.d.ts +455 -0
  106. package/dist/index-CUl3QstQ.d.cts +3006 -0
  107. package/dist/index-CUl3QstQ.d.ts +3006 -0
  108. package/dist/index-CmYtNiI-.d.cts +953 -0
  109. package/dist/index-CmYtNiI-.d.ts +953 -0
  110. package/dist/index-CnRzWxi_.d.cts +522 -0
  111. package/dist/index-CnRzWxi_.d.ts +522 -0
  112. package/dist/index-CwRWbSC7.d.ts +2921 -0
  113. package/dist/index-CxKIBstO.d.ts +790 -0
  114. package/dist/index-DJ6-R8vh.d.cts +455 -0
  115. package/dist/index-DQKisbcI.d.cts +4968 -0
  116. package/dist/index-DQKisbcI.d.ts +4968 -0
  117. package/dist/index-DRT2zJez.d.ts +3910 -0
  118. package/dist/index-DfNLiAka.d.cts +192 -0
  119. package/dist/index-DfNLiAka.d.ts +192 -0
  120. package/dist/index-nMvkoRm8.d.cts +405 -0
  121. package/dist/index-nMvkoRm8.d.ts +405 -0
  122. package/dist/index-s9yOFU37.d.cts +604 -0
  123. package/dist/index-s9yOFU37.d.ts +604 -0
  124. package/dist/index.cjs +22966 -6960
  125. package/dist/index.d.cts +864 -20
  126. package/dist/index.d.ts +864 -20
  127. package/dist/index.js +3062 -48
  128. package/dist/input/index.cjs +1 -1
  129. package/dist/input/index.js +1 -1
  130. package/dist/orbital/index.cjs +3 -3
  131. package/dist/orbital/index.d.cts +1 -1
  132. package/dist/orbital/index.d.ts +1 -1
  133. package/dist/orbital/index.js +1 -1
  134. package/dist/particles/index.cjs +16 -16
  135. package/dist/particles/index.d.cts +1 -1
  136. package/dist/particles/index.d.ts +1 -1
  137. package/dist/particles/index.js +1 -1
  138. package/dist/physics/index.cjs +2377 -21
  139. package/dist/physics/index.d.cts +1 -1
  140. package/dist/physics/index.d.ts +1 -1
  141. package/dist/physics/index.js +35 -1
  142. package/dist/postfx/index.cjs +3491 -0
  143. package/dist/postfx/index.js +93 -0
  144. package/dist/procedural/index.cjs +1 -1
  145. package/dist/procedural/index.js +1 -1
  146. package/dist/puppeteer-5VF6KDVO.js +52197 -0
  147. package/dist/puppeteer-IZVZ3SG4.js +52197 -0
  148. package/dist/rendering/index.cjs +33 -32
  149. package/dist/rendering/index.d.cts +1 -1
  150. package/dist/rendering/index.d.ts +1 -1
  151. package/dist/rendering/index.js +8 -6
  152. package/dist/runtime/index.cjs +23 -13
  153. package/dist/runtime/index.d.cts +1 -1
  154. package/dist/runtime/index.d.ts +1 -1
  155. package/dist/runtime/index.js +8 -6
  156. package/dist/runtime/protocols/index.cjs +349 -0
  157. package/dist/runtime/protocols/index.js +15 -0
  158. package/dist/scene/index.cjs +8 -8
  159. package/dist/scene/index.d.cts +1 -1
  160. package/dist/scene/index.d.ts +1 -1
  161. package/dist/scene/index.js +1 -1
  162. package/dist/shader/index.cjs +3087 -0
  163. package/dist/shader/index.js +3044 -0
  164. package/dist/simulation/index.cjs +10680 -0
  165. package/dist/simulation/index.d.cts +3 -0
  166. package/dist/simulation/index.d.ts +3 -0
  167. package/dist/simulation/index.js +307 -0
  168. package/dist/spatial/index.cjs +2443 -0
  169. package/dist/spatial/index.d.cts +1545 -0
  170. package/dist/spatial/index.d.ts +1545 -0
  171. package/dist/spatial/index.js +2400 -0
  172. package/dist/terrain/index.cjs +1 -1
  173. package/dist/terrain/index.d.cts +1 -1
  174. package/dist/terrain/index.d.ts +1 -1
  175. package/dist/terrain/index.js +1 -1
  176. package/dist/transformers.node-4NKAPD5U.js +45620 -0
  177. package/dist/vm/index.cjs +7 -8
  178. package/dist/vm/index.d.cts +1 -1
  179. package/dist/vm/index.d.ts +1 -1
  180. package/dist/vm/index.js +1 -1
  181. package/dist/vm-bridge/index.cjs +2 -2
  182. package/dist/vm-bridge/index.d.cts +2 -2
  183. package/dist/vm-bridge/index.d.ts +2 -2
  184. package/dist/vm-bridge/index.js +1 -1
  185. package/dist/vr/index.cjs +6 -6
  186. package/dist/vr/index.js +1 -1
  187. package/dist/world/index.cjs +3 -3
  188. package/dist/world/index.d.cts +1 -1
  189. package/dist/world/index.d.ts +1 -1
  190. package/dist/world/index.js +1 -1
  191. package/package.json +53 -21
  192. package/LICENSE +0 -21
@@ -0,0 +1,790 @@
1
+ import { I as IVector3 } from './PhysicsTypes-Dw6_oXuD.cjs';
2
+
3
+ /**
4
+ * DayNightCycle.ts
5
+ *
6
+ * Time of day simulation: sun/moon position, ambient lighting,
7
+ * time scale control, and time-based events.
8
+ *
9
+ * @module environment
10
+ */
11
+ type TimeOfDay = 'dawn' | 'morning' | 'noon' | 'afternoon' | 'dusk' | 'evening' | 'night' | 'midnight';
12
+ interface DayNightState {
13
+ time: number;
14
+ sunAngle: number;
15
+ moonAngle: number;
16
+ sunIntensity: number;
17
+ moonIntensity: number;
18
+ ambientColor: {
19
+ r: number;
20
+ g: number;
21
+ b: number;
22
+ };
23
+ ambientIntensity: number;
24
+ period: TimeOfDay;
25
+ dayCount: number;
26
+ }
27
+ declare class DayNightCycle {
28
+ private time;
29
+ private timeScale;
30
+ private dayCount;
31
+ private paused;
32
+ private listeners;
33
+ private lastPeriod;
34
+ setTime(hours: number): void;
35
+ setTimeScale(scale: number): void;
36
+ getTimeScale(): number;
37
+ pause(): void;
38
+ resume(): void;
39
+ isPaused(): boolean;
40
+ update(dt: number): void;
41
+ getSunAngle(): number;
42
+ getMoonAngle(): number;
43
+ getSunIntensity(): number;
44
+ getMoonIntensity(): number;
45
+ getAmbientColor(): {
46
+ r: number;
47
+ g: number;
48
+ b: number;
49
+ };
50
+ getPeriod(): TimeOfDay;
51
+ onPeriodChange(listener: (period: TimeOfDay, state: DayNightState) => void): void;
52
+ getTime(): number;
53
+ getDayCount(): number;
54
+ getState(): DayNightState;
55
+ getFormattedTime(): string;
56
+ }
57
+
58
+ /**
59
+ * EnvironmentPresets.ts
60
+ *
61
+ * Pre-built environment configurations for skybox, lighting, fog, and atmosphere.
62
+ * Provides time-of-day and weather systems.
63
+ *
64
+ * @module environment
65
+ */
66
+
67
+ interface SkyboxConfig {
68
+ type: 'color' | 'gradient' | 'hdri' | 'procedural';
69
+ topColor: string;
70
+ bottomColor: string;
71
+ horizonColor?: string;
72
+ hdriAsset?: string;
73
+ turbidity?: number;
74
+ rayleigh?: number;
75
+ sunPosition?: IVector3;
76
+ }
77
+ interface LightConfig {
78
+ type: 'directional' | 'ambient' | 'point' | 'spot';
79
+ color: string;
80
+ intensity: number;
81
+ direction?: IVector3;
82
+ position?: IVector3;
83
+ castShadows?: boolean;
84
+ shadowMapSize?: number;
85
+ }
86
+ interface FogConfig {
87
+ type: 'none' | 'linear' | 'exponential' | 'exponential2';
88
+ color: string;
89
+ near?: number;
90
+ far?: number;
91
+ density?: number;
92
+ }
93
+ interface AtmosphereConfig {
94
+ ambientOcclusion: boolean;
95
+ bloom: boolean;
96
+ bloomIntensity: number;
97
+ bloomThreshold: number;
98
+ toneMappingExposure: number;
99
+ colorGrading?: {
100
+ saturation: number;
101
+ contrast: number;
102
+ temperature: number;
103
+ };
104
+ }
105
+ interface EnvironmentConfig {
106
+ id: string;
107
+ name: string;
108
+ skybox: SkyboxConfig;
109
+ lights: LightConfig[];
110
+ fog: FogConfig;
111
+ atmosphere: AtmosphereConfig;
112
+ }
113
+ interface TimeOfDayConfig {
114
+ sunriseHour: number;
115
+ sunsetHour: number;
116
+ currentHour: number;
117
+ daySpeed: number;
118
+ }
119
+ interface WeatherState$1 {
120
+ type: 'clear' | 'cloudy' | 'rain' | 'storm' | 'snow' | 'fog';
121
+ intensity: number;
122
+ windDirection: IVector3;
123
+ windSpeed: number;
124
+ transitionProgress: number;
125
+ }
126
+ declare const PRESET_SUNNY_DAY: EnvironmentConfig;
127
+ declare const PRESET_SUNSET: EnvironmentConfig;
128
+ declare const PRESET_NIGHT: EnvironmentConfig;
129
+ declare const PRESET_OVERCAST: EnvironmentConfig;
130
+ declare const PRESET_SCIFI: EnvironmentConfig;
131
+ declare const ALL_PRESETS: EnvironmentConfig[];
132
+ declare class EnvironmentManager {
133
+ private currentEnv;
134
+ private timeOfDay;
135
+ private weather;
136
+ constructor(preset?: EnvironmentConfig);
137
+ setEnvironment(config: EnvironmentConfig): void;
138
+ getEnvironment(): EnvironmentConfig;
139
+ setPreset(presetId: string): boolean;
140
+ getPresetIds(): string[];
141
+ setTimeOfDay(hour: number): void;
142
+ advanceTime(deltaSeconds: number): void;
143
+ getTimeOfDay(): TimeOfDayConfig;
144
+ private updateSunFromTime;
145
+ setWeather(type: WeatherState$1['type'], intensity?: number): void;
146
+ getWeather(): WeatherState$1;
147
+ updateWeatherTransition(dt: number): void;
148
+ }
149
+
150
+ /**
151
+ * FoliageSystem.ts
152
+ *
153
+ * Instance-based foliage: scattering, density maps,
154
+ * wind sway animation, LOD, and culling.
155
+ *
156
+ * @module environment
157
+ */
158
+ interface FoliageType {
159
+ id: string;
160
+ meshId: string;
161
+ density: number;
162
+ minScale: number;
163
+ maxScale: number;
164
+ alignToNormal: boolean;
165
+ windResponse: number;
166
+ castsShadow: boolean;
167
+ lodDistances: number[];
168
+ }
169
+ interface FoliageInstance {
170
+ typeId: string;
171
+ position: [number, number, number];
172
+ scale: number;
173
+ rotation: number;
174
+ windPhase: number;
175
+ lodLevel: number;
176
+ visible: boolean;
177
+ }
178
+ interface FoliagePatch {
179
+ id: string;
180
+ bounds: {
181
+ x: number;
182
+ z: number;
183
+ w: number;
184
+ h: number;
185
+ };
186
+ instances: FoliageInstance[];
187
+ density: number;
188
+ }
189
+ declare class FoliageSystem {
190
+ private types;
191
+ private patches;
192
+ private windDir;
193
+ private windStrength;
194
+ private time;
195
+ registerType(type: FoliageType): void;
196
+ getType(id: string): FoliageType | undefined;
197
+ getTypeCount(): number;
198
+ setWind(dirX: number, dirZ: number, strength: number): void;
199
+ getWind(): {
200
+ dirX: number;
201
+ dirZ: number;
202
+ strength: number;
203
+ };
204
+ scatter(patchId: string, typeId: string, bounds: FoliagePatch['bounds'], count: number, seed?: number): FoliagePatch;
205
+ update(dt: number, cameraPos: {
206
+ x: number;
207
+ z: number;
208
+ }): void;
209
+ getWindOffset(inst: FoliageInstance): {
210
+ x: number;
211
+ z: number;
212
+ };
213
+ getPatch(id: string): FoliagePatch | undefined;
214
+ getPatchCount(): number;
215
+ getVisibleCount(): number;
216
+ getTotalInstanceCount(): number;
217
+ removePatch(id: string): boolean;
218
+ }
219
+
220
+ /**
221
+ * GrassRenderer.ts
222
+ *
223
+ * Grass blade generation: procedural blade mesh,
224
+ * LOD with billboarding, color variation, and density control.
225
+ *
226
+ * @module environment
227
+ */
228
+ interface GrassBlade {
229
+ position: [number, number, number];
230
+ height: number;
231
+ width: number;
232
+ bendFactor: number;
233
+ color: {
234
+ r: number;
235
+ g: number;
236
+ b: number;
237
+ };
238
+ lodLevel: number;
239
+ isBillboard: boolean;
240
+ }
241
+ interface GrassConfig {
242
+ baseHeight: number;
243
+ heightVariation: number;
244
+ baseWidth: number;
245
+ widthVariation: number;
246
+ baseColor: {
247
+ r: number;
248
+ g: number;
249
+ b: number;
250
+ };
251
+ tipColor: {
252
+ r: number;
253
+ g: number;
254
+ b: number;
255
+ };
256
+ colorVariation: number;
257
+ billboardDistance: number;
258
+ cullDistance: number;
259
+ bendRange: number;
260
+ bladesPerUnit: number;
261
+ }
262
+ declare class GrassRenderer {
263
+ private config;
264
+ private blades;
265
+ constructor(config?: Partial<GrassConfig>);
266
+ generate(bounds: {
267
+ x: number;
268
+ z: number;
269
+ w: number;
270
+ h: number;
271
+ }, seed?: number): void;
272
+ updateLOD(cameraPos: {
273
+ x: number;
274
+ z: number;
275
+ }): void;
276
+ getBladeCount(): number;
277
+ getVisibleBlades(): GrassBlade[];
278
+ getBillboardCount(): number;
279
+ getConfig(): GrassConfig;
280
+ setConfig(config: Partial<GrassConfig>): void;
281
+ }
282
+
283
+ /**
284
+ * SkyRenderer.ts
285
+ *
286
+ * Procedural sky: gradient colors, star field, cloud layers,
287
+ * sun/moon discs, and atmospheric scattering approximation.
288
+ *
289
+ * @module environment
290
+ */
291
+ interface SkyGradient {
292
+ top: {
293
+ r: number;
294
+ g: number;
295
+ b: number;
296
+ };
297
+ horizon: {
298
+ r: number;
299
+ g: number;
300
+ b: number;
301
+ };
302
+ bottom: {
303
+ r: number;
304
+ g: number;
305
+ b: number;
306
+ };
307
+ }
308
+ interface StarField {
309
+ seed: number;
310
+ density: number;
311
+ brightness: number;
312
+ twinkleSpeed: number;
313
+ }
314
+ interface CloudLayer {
315
+ id: string;
316
+ altitude: number;
317
+ coverage: number;
318
+ speed: {
319
+ x: number;
320
+ z: number;
321
+ };
322
+ color: {
323
+ r: number;
324
+ g: number;
325
+ b: number;
326
+ a: number;
327
+ };
328
+ scale: number;
329
+ offset: {
330
+ x: number;
331
+ z: number;
332
+ };
333
+ }
334
+ interface CelestialBody {
335
+ visible: boolean;
336
+ angle: number;
337
+ size: number;
338
+ color: {
339
+ r: number;
340
+ g: number;
341
+ b: number;
342
+ };
343
+ intensity: number;
344
+ }
345
+ declare class SkyRenderer {
346
+ private gradient;
347
+ private stars;
348
+ private clouds;
349
+ private sun;
350
+ private moon;
351
+ private moonPhase;
352
+ private starsVisible;
353
+ setGradient(gradient: SkyGradient): void;
354
+ getGradient(): SkyGradient;
355
+ sampleGradient(t: number): {
356
+ r: number;
357
+ g: number;
358
+ b: number;
359
+ };
360
+ private lerpColor;
361
+ setStarField(config: Partial<StarField>): void;
362
+ setStarsVisible(visible: boolean): void;
363
+ areStarsVisible(): boolean;
364
+ getStarField(): StarField;
365
+ addCloudLayer(coverage: number, altitude?: number, speed?: {
366
+ x: number;
367
+ z: number;
368
+ }): CloudLayer;
369
+ removeCloudLayer(id: string): boolean;
370
+ getCloudLayers(): CloudLayer[];
371
+ getCloudCount(): number;
372
+ updateClouds(dt: number): void;
373
+ setSunAngle(angle: number): void;
374
+ setMoonAngle(angle: number): void;
375
+ setMoonPhase(phase: number): void;
376
+ getMoonPhase(): number;
377
+ getSun(): CelestialBody;
378
+ getMoon(): CelestialBody;
379
+ applyDaytime(): void;
380
+ applySunset(): void;
381
+ applyNight(): void;
382
+ getTotalCoverage(): number;
383
+ }
384
+
385
+ /**
386
+ * TerrainSystem.ts
387
+ *
388
+ * Heightmap-based terrain with procedural generation,
389
+ * LOD meshing, and physics collision support.
390
+ *
391
+ * @module environment
392
+ */
393
+
394
+ interface TerrainConfig {
395
+ id: string;
396
+ width: number;
397
+ depth: number;
398
+ resolution: number;
399
+ maxHeight: number;
400
+ position: IVector3;
401
+ }
402
+ interface TerrainLayer {
403
+ id: string;
404
+ texture: string;
405
+ tiling: number;
406
+ minHeight: number;
407
+ maxHeight: number;
408
+ minSlope: number;
409
+ maxSlope: number;
410
+ }
411
+ interface TerrainVertex {
412
+ position: IVector3;
413
+ normal: IVector3;
414
+ uv: {
415
+ u: number;
416
+ v: number;
417
+ };
418
+ height: number;
419
+ }
420
+ interface TerrainChunk {
421
+ x: number;
422
+ z: number;
423
+ lod: number;
424
+ vertices: TerrainVertex[];
425
+ indices: number[];
426
+ }
427
+ interface TerrainCollider {
428
+ getHeightAt(worldX: number, worldZ: number): number;
429
+ getNormalAt(worldX: number, worldZ: number): IVector3;
430
+ }
431
+ declare class TerrainSystem {
432
+ private terrains;
433
+ /**
434
+ * Create a terrain with a procedurally generated heightmap.
435
+ */
436
+ createTerrain(config: TerrainConfig, options?: {
437
+ octaves?: number;
438
+ lacunarity?: number;
439
+ gain?: number;
440
+ seed?: number;
441
+ scale?: number;
442
+ }): string;
443
+ /**
444
+ * Create terrain from an existing heightmap array.
445
+ */
446
+ createFromHeightmap(config: TerrainConfig, heightmap: Float32Array): string;
447
+ /**
448
+ * Get height at a world position (bilinear interpolation).
449
+ */
450
+ getHeightAt(terrainId: string, worldX: number, worldZ: number): number;
451
+ /**
452
+ * Get surface normal at a world position (finite differences).
453
+ */
454
+ getNormalAt(terrainId: string, worldX: number, worldZ: number): IVector3;
455
+ /**
456
+ * Set height at a specific grid position.
457
+ */
458
+ setHeightAt(terrainId: string, gridX: number, gridZ: number, height: number): void;
459
+ /**
460
+ * Get the collider interface for a terrain.
461
+ */
462
+ getCollider(terrainId: string): TerrainCollider | null;
463
+ setLayers(terrainId: string, layers: TerrainLayer[]): void;
464
+ getLayers(terrainId: string): TerrainLayer[];
465
+ getTerrain(id: string): {
466
+ config: TerrainConfig;
467
+ heightmap: Float32Array;
468
+ layers: TerrainLayer[];
469
+ chunks: TerrainChunk[];
470
+ } | undefined;
471
+ getTerrainIds(): string[];
472
+ removeTerrain(id: string): boolean;
473
+ getChunks(terrainId: string): TerrainChunk[];
474
+ private generateChunks;
475
+ private getDefaultLayers;
476
+ }
477
+
478
+ /**
479
+ * TerrainBrush.ts
480
+ *
481
+ * Editor tools for sculpting and painting terrain heightmaps.
482
+ * Supports raise, lower, flatten, smooth, and texture paint brushes.
483
+ *
484
+ * @module environment
485
+ */
486
+
487
+ type BrushMode = 'raise' | 'lower' | 'flatten' | 'smooth' | 'paint';
488
+ interface BrushConfig {
489
+ mode: BrushMode;
490
+ radius: number;
491
+ strength: number;
492
+ falloff: number;
493
+ flattenHeight?: number;
494
+ paintLayerId?: string;
495
+ }
496
+ interface BrushStroke {
497
+ terrainId: string;
498
+ gridX: number;
499
+ gridZ: number;
500
+ config: BrushConfig;
501
+ affectedCells: {
502
+ x: number;
503
+ z: number;
504
+ oldHeight: number;
505
+ newHeight: number;
506
+ }[];
507
+ }
508
+ declare class TerrainBrush {
509
+ private config;
510
+ private terrain;
511
+ private undoStack;
512
+ private redoStack;
513
+ constructor(terrain: TerrainSystem, config?: Partial<BrushConfig>);
514
+ setConfig(config: Partial<BrushConfig>): void;
515
+ getConfig(): BrushConfig;
516
+ setMode(mode: BrushMode): void;
517
+ setRadius(radius: number): void;
518
+ setStrength(strength: number): void;
519
+ /**
520
+ * Apply the brush at a grid position on a terrain.
521
+ */
522
+ apply(terrainId: string, gridX: number, gridZ: number): BrushStroke;
523
+ undo(): BrushStroke | null;
524
+ redo(): BrushStroke | null;
525
+ getUndoCount(): number;
526
+ getRedoCount(): number;
527
+ }
528
+
529
+ /**
530
+ * TreePlacer.ts
531
+ *
532
+ * Procedural tree placement: biome rules, collision avoidance,
533
+ * density control, and distribution patterns.
534
+ *
535
+ * @module environment
536
+ */
537
+ interface TreeTemplate {
538
+ id: string;
539
+ meshId: string;
540
+ minScale: number;
541
+ maxScale: number;
542
+ trunkRadius: number;
543
+ biomes: string[];
544
+ probability: number;
545
+ }
546
+ interface PlacedTree {
547
+ id: string;
548
+ templateId: string;
549
+ position: [number, number, number];
550
+ scale: number;
551
+ rotation: number;
552
+ }
553
+ interface BiomeRule {
554
+ id: string;
555
+ name: string;
556
+ density: number;
557
+ minSpacing: number;
558
+ heightRange: {
559
+ min: number;
560
+ max: number;
561
+ };
562
+ slopeMax: number;
563
+ }
564
+ declare class TreePlacer {
565
+ private templates;
566
+ private biomes;
567
+ private trees;
568
+ addTemplate(template: TreeTemplate): void;
569
+ getTemplate(id: string): TreeTemplate | undefined;
570
+ getTemplateCount(): number;
571
+ addBiome(biome: BiomeRule): void;
572
+ getBiome(id: string): BiomeRule | undefined;
573
+ placeInRegion(biomeId: string, bounds: {
574
+ x: number;
575
+ z: number;
576
+ w: number;
577
+ h: number;
578
+ }, heightSampler?: (x: number, z: number) => number, slopeSampler?: (x: number, z: number) => number, seed?: number): PlacedTree[];
579
+ private checkSpacing;
580
+ private pickTemplate;
581
+ getPlacedCount(): number;
582
+ getAllTrees(): PlacedTree[];
583
+ getTreesInRadius(x: number, z: number, radius: number): PlacedTree[];
584
+ removeTree(id: string): boolean;
585
+ clear(): void;
586
+ }
587
+
588
+ /**
589
+ * WeatherBlackboard — Singleton shared state for @weather hub trait.
590
+ *
591
+ * The @weather trait owns this blackboard and writes to it each frame.
592
+ * Consumer traits (@volumetric_clouds, @cloth, @fluid, @physics, @erosion,
593
+ * @god_rays, @particle_system) read from it. This creates environmental
594
+ * coherence without trait-to-trait coupling.
595
+ *
596
+ * Pattern: P.GAPS.10 (Hub Trait Architecture)
597
+ *
598
+ * @module environment
599
+ */
600
+ type PrecipitationType = 'none' | 'rain' | 'snow' | 'hail';
601
+ interface WeatherBlackboardState {
602
+ /** Wind direction and magnitude as a 3D vector */
603
+ wind_vector: [number, number, number];
604
+ /** Precipitation intensity 0-1 */
605
+ precipitation: number;
606
+ /** Type of precipitation */
607
+ precipitation_type: PrecipitationType;
608
+ /** Ambient temperature in Celsius */
609
+ temperature: number;
610
+ /** Relative humidity 0-1 */
611
+ humidity: number;
612
+ /** Normalized sun direction vector (from surface toward sun) */
613
+ sun_position: [number, number, number];
614
+ /** Sun light intensity 0-1 (0 at night) */
615
+ sun_intensity: number;
616
+ /** Cloud coverage density 0-1 */
617
+ cloud_density: number;
618
+ /** Cloud layer altitude in meters */
619
+ cloud_altitude: number;
620
+ /** Fog density 0-1 */
621
+ fog_density: number;
622
+ /** Time of day in hours 0-24 (fractional) */
623
+ time_of_day: number;
624
+ /** True when sun_intensity < 0.1 */
625
+ is_night: boolean;
626
+ /** Accumulated surface moisture from rain 0-1 (decays when not raining) */
627
+ surface_wetness: number;
628
+ /** Wind speed (magnitude of wind_vector) */
629
+ wind_speed: number;
630
+ /** Visibility range in meters (affected by fog + precipitation) */
631
+ visibility_range: number;
632
+ /** Frame counter — incremented each @weather update */
633
+ frame: number;
634
+ }
635
+ /**
636
+ * Global weather blackboard.
637
+ *
638
+ * WRITE: Only the @weather hub trait should write to this.
639
+ * READ: Any consumer trait can read from this each frame.
640
+ *
641
+ * The blackboard is a plain object — reads are zero-cost.
642
+ * The @weather trait must run FIRST in the trait update loop
643
+ * so consumers see the latest state.
644
+ */
645
+ declare const weatherBlackboard: WeatherBlackboardState;
646
+ /**
647
+ * Update the blackboard with new values. Recomputes derived fields.
648
+ * Called by WeatherHubTrait.onUpdate() each frame.
649
+ */
650
+ declare function updateWeatherBlackboard(partial: Partial<Omit<WeatherBlackboardState, 'is_night' | 'surface_wetness' | 'wind_speed' | 'visibility_range' | 'frame'>>): void;
651
+ /**
652
+ * Reset blackboard to default state. Used in testing.
653
+ */
654
+ declare function resetWeatherBlackboard(): void;
655
+ /**
656
+ * Compute sun position from time of day and latitude.
657
+ *
658
+ * Returns normalized direction vector pointing from surface toward sun.
659
+ * At midnight (0/24), sun is directly below horizon.
660
+ * At noon (12), sun is at maximum elevation.
661
+ *
662
+ * @param timeOfDay - Hours 0-24
663
+ * @param latitude - Degrees, default 45 (mid-latitude)
664
+ * @returns [x, y, z] normalized sun direction
665
+ */
666
+ declare function computeSunPosition(timeOfDay: number, latitude?: number): [number, number, number];
667
+ /**
668
+ * Compute sun intensity from elevation angle.
669
+ * Smooth ramp: 0 at horizon, 1 at max elevation, with atmospheric scattering falloff.
670
+ */
671
+ declare function computeSunIntensity(sunY: number): number;
672
+
673
+ /**
674
+ * WeatherSystem.ts
675
+ *
676
+ * Dynamic weather: types, transitions, intensity,
677
+ * wind, and environmental effects.
678
+ *
679
+ * @module environment
680
+ */
681
+ type WeatherType = 'clear' | 'cloudy' | 'rain' | 'storm' | 'snow' | 'fog' | 'sandstorm';
682
+ interface WeatherState {
683
+ type: WeatherType;
684
+ intensity: number;
685
+ wind: {
686
+ x: number;
687
+ y: number;
688
+ z: number;
689
+ speed: number;
690
+ };
691
+ temperature: number;
692
+ humidity: number;
693
+ visibility: number;
694
+ precipitation: number;
695
+ }
696
+ interface WeatherTransition {
697
+ from: WeatherType;
698
+ to: WeatherType;
699
+ duration: number;
700
+ elapsed: number;
701
+ }
702
+ declare class WeatherSystem {
703
+ private current;
704
+ private transition;
705
+ private targetState;
706
+ private listeners;
707
+ private history;
708
+ constructor(initial?: WeatherType);
709
+ private createState;
710
+ setWeather(type: WeatherType, transitionDuration?: number): void;
711
+ setImmediate(type: WeatherType): void;
712
+ setWind(x: number, y: number, z: number, speed: number): void;
713
+ setTemperature(temp: number): void;
714
+ update(dt: number): void;
715
+ private lerp;
716
+ onChange(listener: (state: WeatherState) => void): void;
717
+ private notify;
718
+ getState(): WeatherState;
719
+ getType(): WeatherType;
720
+ isTransitioning(): boolean;
721
+ getTransitionProgress(): number;
722
+ getHistory(): typeof this.history;
723
+ }
724
+
725
+ declare const index_ALL_PRESETS: typeof ALL_PRESETS;
726
+ type index_AtmosphereConfig = AtmosphereConfig;
727
+ type index_BiomeRule = BiomeRule;
728
+ type index_BrushConfig = BrushConfig;
729
+ type index_BrushMode = BrushMode;
730
+ type index_BrushStroke = BrushStroke;
731
+ type index_CelestialBody = CelestialBody;
732
+ type index_CloudLayer = CloudLayer;
733
+ type index_DayNightCycle = DayNightCycle;
734
+ declare const index_DayNightCycle: typeof DayNightCycle;
735
+ type index_DayNightState = DayNightState;
736
+ type index_EnvironmentConfig = EnvironmentConfig;
737
+ type index_EnvironmentManager = EnvironmentManager;
738
+ declare const index_EnvironmentManager: typeof EnvironmentManager;
739
+ type index_FogConfig = FogConfig;
740
+ type index_FoliageInstance = FoliageInstance;
741
+ type index_FoliagePatch = FoliagePatch;
742
+ type index_FoliageSystem = FoliageSystem;
743
+ declare const index_FoliageSystem: typeof FoliageSystem;
744
+ type index_FoliageType = FoliageType;
745
+ type index_GrassBlade = GrassBlade;
746
+ type index_GrassConfig = GrassConfig;
747
+ type index_GrassRenderer = GrassRenderer;
748
+ declare const index_GrassRenderer: typeof GrassRenderer;
749
+ type index_LightConfig = LightConfig;
750
+ declare const index_PRESET_NIGHT: typeof PRESET_NIGHT;
751
+ declare const index_PRESET_OVERCAST: typeof PRESET_OVERCAST;
752
+ declare const index_PRESET_SCIFI: typeof PRESET_SCIFI;
753
+ declare const index_PRESET_SUNNY_DAY: typeof PRESET_SUNNY_DAY;
754
+ declare const index_PRESET_SUNSET: typeof PRESET_SUNSET;
755
+ type index_PlacedTree = PlacedTree;
756
+ type index_PrecipitationType = PrecipitationType;
757
+ type index_SkyGradient = SkyGradient;
758
+ type index_SkyRenderer = SkyRenderer;
759
+ declare const index_SkyRenderer: typeof SkyRenderer;
760
+ type index_SkyboxConfig = SkyboxConfig;
761
+ type index_StarField = StarField;
762
+ type index_TerrainBrush = TerrainBrush;
763
+ declare const index_TerrainBrush: typeof TerrainBrush;
764
+ type index_TerrainChunk = TerrainChunk;
765
+ type index_TerrainCollider = TerrainCollider;
766
+ type index_TerrainConfig = TerrainConfig;
767
+ type index_TerrainLayer = TerrainLayer;
768
+ type index_TerrainSystem = TerrainSystem;
769
+ declare const index_TerrainSystem: typeof TerrainSystem;
770
+ type index_TerrainVertex = TerrainVertex;
771
+ type index_TimeOfDay = TimeOfDay;
772
+ type index_TimeOfDayConfig = TimeOfDayConfig;
773
+ type index_TreePlacer = TreePlacer;
774
+ declare const index_TreePlacer: typeof TreePlacer;
775
+ type index_TreeTemplate = TreeTemplate;
776
+ type index_WeatherBlackboardState = WeatherBlackboardState;
777
+ type index_WeatherSystem = WeatherSystem;
778
+ declare const index_WeatherSystem: typeof WeatherSystem;
779
+ type index_WeatherTransition = WeatherTransition;
780
+ type index_WeatherType = WeatherType;
781
+ declare const index_computeSunIntensity: typeof computeSunIntensity;
782
+ declare const index_computeSunPosition: typeof computeSunPosition;
783
+ declare const index_resetWeatherBlackboard: typeof resetWeatherBlackboard;
784
+ declare const index_updateWeatherBlackboard: typeof updateWeatherBlackboard;
785
+ declare const index_weatherBlackboard: typeof weatherBlackboard;
786
+ declare namespace index {
787
+ export { index_ALL_PRESETS as ALL_PRESETS, type index_AtmosphereConfig as AtmosphereConfig, type index_BiomeRule as BiomeRule, type index_BrushConfig as BrushConfig, type index_BrushMode as BrushMode, type index_BrushStroke as BrushStroke, type index_CelestialBody as CelestialBody, type index_CloudLayer as CloudLayer, index_DayNightCycle as DayNightCycle, type index_DayNightState as DayNightState, type index_EnvironmentConfig as EnvironmentConfig, index_EnvironmentManager as EnvironmentManager, type index_FogConfig as FogConfig, type index_FoliageInstance as FoliageInstance, type index_FoliagePatch as FoliagePatch, index_FoliageSystem as FoliageSystem, type index_FoliageType as FoliageType, type index_GrassBlade as GrassBlade, type index_GrassConfig as GrassConfig, index_GrassRenderer as GrassRenderer, type index_LightConfig as LightConfig, index_PRESET_NIGHT as PRESET_NIGHT, index_PRESET_OVERCAST as PRESET_OVERCAST, index_PRESET_SCIFI as PRESET_SCIFI, index_PRESET_SUNNY_DAY as PRESET_SUNNY_DAY, index_PRESET_SUNSET as PRESET_SUNSET, type index_PlacedTree as PlacedTree, type index_PrecipitationType as PrecipitationType, type WeatherState$1 as PresetWeatherState, type index_SkyGradient as SkyGradient, index_SkyRenderer as SkyRenderer, type index_SkyboxConfig as SkyboxConfig, type index_StarField as StarField, type WeatherState as SystemWeatherState, index_TerrainBrush as TerrainBrush, type index_TerrainChunk as TerrainChunk, type index_TerrainCollider as TerrainCollider, type index_TerrainConfig as TerrainConfig, type index_TerrainLayer as TerrainLayer, index_TerrainSystem as TerrainSystem, type index_TerrainVertex as TerrainVertex, type index_TimeOfDay as TimeOfDay, type index_TimeOfDayConfig as TimeOfDayConfig, index_TreePlacer as TreePlacer, type index_TreeTemplate as TreeTemplate, type index_WeatherBlackboardState as WeatherBlackboardState, index_WeatherSystem as WeatherSystem, type index_WeatherTransition as WeatherTransition, type index_WeatherType as WeatherType, index_computeSunIntensity as computeSunIntensity, index_computeSunPosition as computeSunPosition, index_resetWeatherBlackboard as resetWeatherBlackboard, index_updateWeatherBlackboard as updateWeatherBlackboard, index_weatherBlackboard as weatherBlackboard };
788
+ }
789
+
790
+ export { updateWeatherBlackboard as $, ALL_PRESETS as A, type BiomeRule as B, type CelestialBody as C, DayNightCycle as D, type EnvironmentConfig as E, type FogConfig as F, type GrassBlade as G, type TerrainConfig as H, type TerrainLayer as I, TerrainSystem as J, type TerrainVertex as K, type LightConfig as L, type TimeOfDay as M, type TimeOfDayConfig as N, TreePlacer as O, PRESET_NIGHT as P, type TreeTemplate as Q, type WeatherBlackboardState as R, type SkyGradient as S, TerrainBrush as T, WeatherSystem as U, type WeatherTransition as V, type WeatherState$1 as W, type WeatherType as X, computeSunIntensity as Y, computeSunPosition as Z, resetWeatherBlackboard as _, type AtmosphereConfig as a, weatherBlackboard as a0, type BrushConfig as b, type BrushMode as c, type BrushStroke as d, type CloudLayer as e, type DayNightState as f, EnvironmentManager as g, type FoliageInstance as h, index as i, type FoliagePatch as j, FoliageSystem as k, type FoliageType as l, type GrassConfig as m, GrassRenderer as n, PRESET_OVERCAST as o, PRESET_SCIFI as p, PRESET_SUNNY_DAY as q, PRESET_SUNSET as r, type PlacedTree as s, type PrecipitationType as t, SkyRenderer as u, type SkyboxConfig as v, type StarField as w, type WeatherState as x, type TerrainChunk as y, type TerrainCollider as z };