@3driseai/3drise-core 1.0.21 → 1.0.23

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 (179) hide show
  1. package/dist/autoAnimate/composer.d.ts +6 -0
  2. package/dist/autoAnimate/composer.d.ts.map +1 -1
  3. package/dist/autoAnimate/composer.js +4 -3
  4. package/dist/autoAnimate/describeScene.js +1 -1
  5. package/dist/catalog/catalogInfo.d.ts +22 -0
  6. package/dist/catalog/catalogInfo.d.ts.map +1 -0
  7. package/dist/catalog/catalogInfo.js +204 -0
  8. package/dist/catalog/index.d.ts +3 -0
  9. package/dist/catalog/index.d.ts.map +1 -0
  10. package/dist/catalog/index.js +2 -0
  11. package/dist/catalog/objectCatalog.d.ts +33 -0
  12. package/dist/catalog/objectCatalog.d.ts.map +1 -0
  13. package/dist/catalog/objectCatalog.js +94 -0
  14. package/dist/data/allMaterials.js +2 -2
  15. package/dist/data/defaults.d.ts +0 -12
  16. package/dist/data/defaults.d.ts.map +1 -1
  17. package/dist/data/defaults.js +0 -12
  18. package/dist/data/environmentDefaults.d.ts +10 -0
  19. package/dist/data/environmentDefaults.d.ts.map +1 -0
  20. package/dist/data/environmentDefaults.js +126 -0
  21. package/dist/data/gridsDefaults.d.ts +2 -0
  22. package/dist/data/gridsDefaults.d.ts.map +1 -1
  23. package/dist/data/gridsDefaults.js +57 -0
  24. package/dist/data/index.d.ts +4 -0
  25. package/dist/data/index.d.ts.map +1 -1
  26. package/dist/data/index.js +4 -0
  27. package/dist/data/landDefaults.d.ts +26 -0
  28. package/dist/data/landDefaults.d.ts.map +1 -0
  29. package/dist/data/landDefaults.js +76 -0
  30. package/dist/data/spaceDefaults.d.ts +10 -0
  31. package/dist/data/spaceDefaults.d.ts.map +1 -0
  32. package/dist/data/spaceDefaults.js +46 -0
  33. package/dist/data/textDefaults.d.ts +16 -0
  34. package/dist/data/textDefaults.d.ts.map +1 -0
  35. package/dist/data/textDefaults.js +219 -0
  36. package/dist/environment/oceanConfigs.d.ts +5 -4
  37. package/dist/environment/oceanConfigs.d.ts.map +1 -1
  38. package/dist/environment/oceanConfigs.js +2 -2
  39. package/dist/environment/terrainConfigs.d.ts +78 -0
  40. package/dist/environment/terrainConfigs.d.ts.map +1 -1
  41. package/dist/environment/terrainConfigs.js +72 -2
  42. package/dist/index.d.ts +3 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +3 -1
  45. package/dist/properties/registry.d.ts +15 -1
  46. package/dist/properties/registry.d.ts.map +1 -1
  47. package/dist/properties/registry.js +99 -13
  48. package/dist/properties/tables/environmentProperties.d.ts +9 -0
  49. package/dist/properties/tables/environmentProperties.d.ts.map +1 -0
  50. package/dist/properties/tables/environmentProperties.js +127 -0
  51. package/dist/properties/tables/geometryProperties.d.ts +7 -0
  52. package/dist/properties/tables/geometryProperties.d.ts.map +1 -1
  53. package/dist/properties/tables/geometryProperties.js +9 -1
  54. package/dist/properties/tables/gridProperties.d.ts.map +1 -1
  55. package/dist/properties/tables/gridProperties.js +117 -93
  56. package/dist/properties/tables/index.d.ts +4 -0
  57. package/dist/properties/tables/index.d.ts.map +1 -1
  58. package/dist/properties/tables/index.js +4 -0
  59. package/dist/properties/tables/landProperties.d.ts +5 -0
  60. package/dist/properties/tables/landProperties.d.ts.map +1 -0
  61. package/dist/properties/tables/landProperties.js +24 -0
  62. package/dist/properties/tables/optionalProperties.d.ts +1 -2
  63. package/dist/properties/tables/optionalProperties.d.ts.map +1 -1
  64. package/dist/properties/tables/optionalProperties.js +22 -0
  65. package/dist/properties/tables/spaceProperties.d.ts +8 -0
  66. package/dist/properties/tables/spaceProperties.d.ts.map +1 -0
  67. package/dist/properties/tables/spaceProperties.js +42 -0
  68. package/dist/properties/tables/textProperties.d.ts +4 -0
  69. package/dist/properties/tables/textProperties.d.ts.map +1 -0
  70. package/dist/properties/tables/textProperties.js +387 -0
  71. package/dist/properties/types.d.ts +1 -1
  72. package/dist/properties/types.d.ts.map +1 -1
  73. package/dist/services/MaterialRegistry.d.ts.map +1 -1
  74. package/dist/services/MaterialRegistry.js +2 -0
  75. package/dist/services/SceneActions.d.ts +9 -0
  76. package/dist/services/SceneActions.d.ts.map +1 -1
  77. package/dist/services/SceneActions.js +30 -0
  78. package/dist/services/SkySystemManager.d.ts +22 -0
  79. package/dist/services/SkySystemManager.d.ts.map +1 -1
  80. package/dist/services/SkySystemManager.js +50 -18
  81. package/dist/services/TextureResolver.d.ts.map +1 -1
  82. package/dist/services/TextureResolver.js +22 -0
  83. package/dist/services/index.d.ts +1 -1
  84. package/dist/services/index.d.ts.map +1 -1
  85. package/dist/services/index.js +1 -1
  86. package/dist/shaders/SkyboxMaterial.js +3 -3
  87. package/dist/shaders/StarsMaterial.d.ts +5 -0
  88. package/dist/shaders/StarsMaterial.d.ts.map +1 -1
  89. package/dist/shaders/StarsMaterial.js +59 -57
  90. package/dist/three/LetterV.d.ts +7 -1
  91. package/dist/three/LetterV.d.ts.map +1 -1
  92. package/dist/three/Text2DV.d.ts +7 -1
  93. package/dist/three/Text2DV.d.ts.map +1 -1
  94. package/dist/three/Text3DV.d.ts +7 -1
  95. package/dist/three/Text3DV.d.ts.map +1 -1
  96. package/dist/types/actions.d.ts +6 -6
  97. package/dist/types/actions.d.ts.map +1 -1
  98. package/dist/types/commands.d.ts +61 -0
  99. package/dist/types/commands.d.ts.map +1 -0
  100. package/dist/types/commands.js +1 -0
  101. package/dist/types/environment.d.ts +34 -1
  102. package/dist/types/environment.d.ts.map +1 -1
  103. package/dist/types/environment.js +15 -0
  104. package/dist/types/environmentObjects.d.ts +152 -0
  105. package/dist/types/environmentObjects.d.ts.map +1 -0
  106. package/dist/types/environmentObjects.js +10 -0
  107. package/dist/types/index.d.ts +5 -2
  108. package/dist/types/index.d.ts.map +1 -1
  109. package/dist/types/landObjects.d.ts +15 -0
  110. package/dist/types/landObjects.d.ts.map +1 -0
  111. package/dist/types/landObjects.js +1 -0
  112. package/dist/types/objectSettings.d.ts +189 -16
  113. package/dist/types/objectSettings.d.ts.map +1 -1
  114. package/dist/types/objectsConfigs.d.ts +0 -3
  115. package/dist/types/objectsConfigs.d.ts.map +1 -1
  116. package/dist/types/scene3d.d.ts +12 -5
  117. package/dist/types/scene3d.d.ts.map +1 -1
  118. package/dist/types/spaceObjects.d.ts +65 -0
  119. package/dist/types/spaceObjects.d.ts.map +1 -0
  120. package/dist/types/spaceObjects.js +11 -0
  121. package/dist/types/textObjects.d.ts +371 -0
  122. package/dist/types/textObjects.d.ts.map +1 -0
  123. package/dist/types/textObjects.js +14 -0
  124. package/dist/types/types.d.ts +3 -6
  125. package/dist/types/types.d.ts.map +1 -1
  126. package/dist/types/users.d.ts +3 -1
  127. package/dist/types/users.d.ts.map +1 -1
  128. package/dist/types/users.js +2 -0
  129. package/dist/ui/index.d.ts +5 -0
  130. package/dist/ui/index.d.ts.map +1 -0
  131. package/dist/ui/index.js +4 -0
  132. package/dist/ui/uiBindings.d.ts +45 -0
  133. package/dist/ui/uiBindings.d.ts.map +1 -0
  134. package/dist/ui/uiBindings.js +172 -0
  135. package/dist/ui/uiKeys.d.ts +14 -0
  136. package/dist/ui/uiKeys.d.ts.map +1 -0
  137. package/dist/ui/uiKeys.js +22 -0
  138. package/dist/ui/uiSanitize.d.ts +18 -0
  139. package/dist/ui/uiSanitize.d.ts.map +1 -0
  140. package/dist/ui/uiSanitize.js +251 -0
  141. package/dist/ui/uiSpec.d.ts +116 -0
  142. package/dist/ui/uiSpec.d.ts.map +1 -0
  143. package/dist/ui/uiSpec.js +173 -0
  144. package/dist/utils/dataUtils.d.ts.map +1 -1
  145. package/dist/utils/dataUtils.js +0 -6
  146. package/dist/utils/environmentMigration.d.ts +3 -0
  147. package/dist/utils/environmentMigration.d.ts.map +1 -0
  148. package/dist/utils/environmentMigration.js +50 -0
  149. package/dist/utils/generativeAnimatable.d.ts +1 -1
  150. package/dist/utils/generativeAnimatable.d.ts.map +1 -1
  151. package/dist/utils/generativeAnimatable.js +12 -0
  152. package/dist/utils/getAnimatableProperties.d.ts +1 -1
  153. package/dist/utils/getAnimatableProperties.d.ts.map +1 -1
  154. package/dist/utils/getAnimatableProperties.js +1 -1
  155. package/dist/utils/gridMigration.d.ts +3 -0
  156. package/dist/utils/gridMigration.d.ts.map +1 -0
  157. package/dist/utils/gridMigration.js +34 -0
  158. package/dist/utils/index.d.ts +6 -0
  159. package/dist/utils/index.d.ts.map +1 -1
  160. package/dist/utils/index.js +6 -0
  161. package/dist/utils/objectEffects.d.ts +24 -2
  162. package/dist/utils/objectEffects.d.ts.map +1 -1
  163. package/dist/utils/objectEffects.js +28 -2
  164. package/dist/utils/objectMigration.d.ts +9 -0
  165. package/dist/utils/objectMigration.d.ts.map +1 -0
  166. package/dist/utils/objectMigration.js +13 -0
  167. package/dist/utils/skyPhase.d.ts +61 -0
  168. package/dist/utils/skyPhase.d.ts.map +1 -0
  169. package/dist/utils/skyPhase.js +93 -0
  170. package/dist/utils/spaceMigration.d.ts +3 -0
  171. package/dist/utils/spaceMigration.d.ts.map +1 -0
  172. package/dist/utils/spaceMigration.js +46 -0
  173. package/dist/utils/sunUtils.d.ts +26 -1
  174. package/dist/utils/sunUtils.d.ts.map +1 -1
  175. package/dist/utils/sunUtils.js +37 -6
  176. package/dist/utils/textMigration.d.ts +3 -0
  177. package/dist/utils/textMigration.d.ts.map +1 -0
  178. package/dist/utils/textMigration.js +56 -0
  179. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SceneActions.d.ts","sourceRoot":"","sources":["../../src/services/SceneActions.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpF,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAE3B,MAAM,MAAM,iBAAiB;AACzB,oHAAoH;AAClH;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GACtG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE;AAChE,oDAAoD;GAClD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IAC/B,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAOD,cAAM,YAAY;IACd,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,MAAM,CAAgD;IAC9D,qFAAqF;IACrF,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAAK;IAEpB,+EAA+E;IAC/E,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,kBAAuB,GAAG,IAAI;IAc3E,gEAAgE;IAChE,YAAY,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI;IASvD,iFAAiF;IACjF,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;IAS7C,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI1C,mBAAmB,IAAI,MAAM,EAAE;IAI/B,8DAA8D;IAC9D,KAAK,IAAI,IAAI;IAQb,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,GAAG,SAAS;IAKrE,iEAAiE;IACjE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAaxD,iFAAiF;IACjF,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI;IAKjE,yFAAyF;IACzF,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,MAAM;CAgBjB;AAED,QAAA,MAAM,YAAY,cAAqB,CAAC;AACxC,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"SceneActions.d.ts","sourceRoot":"","sources":["../../src/services/SceneActions.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpF,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAE3B,MAAM,MAAM,iBAAiB;AACzB,oHAAoH;AAClH;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GACtG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE;AAChE,oDAAoD;GAClD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IAC/B,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAOD,cAAM,YAAY;IACd,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,MAAM,CAAgD;IAC9D,qFAAqF;IACrF,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAAK;IACpB,kGAAkG;IAClG,OAAO,CAAC,MAAM,CAA6B;IAE3C,+EAA+E;IAC/E,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,kBAAuB,GAAG,IAAI;IAc3E,gEAAgE;IAChE,YAAY,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI;IASvD,iFAAiF;IACjF,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;IAS7C,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI1C,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,GAAG,IAAI;IAgB9E,8DAA8D;IAC9D,KAAK,IAAI,IAAI;IASb,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,GAAG,SAAS;IAKrE,iEAAiE;IACjE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAaxD,iFAAiF;IACjF,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI;IAKjE,yFAAyF;IACzF,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,aAAa;IAYrB,+CAA+C;IAC/C,OAAO,CAAC,MAAM;CAiBjB;AAED,QAAA,MAAM,YAAY,cAAqB,CAAC;AACxC,eAAe,YAAY,CAAC"}
@@ -7,6 +7,8 @@ class SceneActions {
7
7
  stateListeners = new Map();
8
8
  eventListeners = new Set();
9
9
  version = 0;
10
+ /** Layer id -> JSON of what it last set (setLayer is called every frame; only changes commit). */
11
+ layers = new Map();
10
12
  /** Apply an action. Re-applying moves its patches to the top of each stack. */
11
13
  applyAction(action, options = {}) {
12
14
  const reapplied = this.applied.has(action.id);
@@ -47,11 +49,36 @@ class SceneActions {
47
49
  getAppliedActionIds() {
48
50
  return Array.from(this.applied.keys());
49
51
  }
52
+ /**
53
+ * Set a layer's patches (state -> patch), replacing what it set before; null or {}
54
+ * removes it. A no-op when nothing changed, so it can be called every frame. A
55
+ * changed layer moves to the top of each stack it is on.
56
+ */
57
+ setLayer(layerId, patches) {
58
+ const entries = Object.entries(patches ?? {}).filter(([state, patch]) => state && patch && Object.keys(patch).length > 0);
59
+ const json = entries.length ? JSON.stringify(entries) : '';
60
+ if ((this.layers.get(layerId) ?? '') === json)
61
+ return;
62
+ const key = `layer:${layerId}`;
63
+ const touched = this.removeEntries(key);
64
+ for (const [state, patch] of entries) {
65
+ const stack = this.stacks.get(state) ?? [];
66
+ stack.push({ actionId: key, patch });
67
+ this.stacks.set(state, stack);
68
+ touched.add(state);
69
+ }
70
+ if (json)
71
+ this.layers.set(layerId, json);
72
+ else
73
+ this.layers.delete(layerId);
74
+ this.commit(touched);
75
+ }
50
76
  /** Drop every patch (project load, "reset" in the editor). */
51
77
  reset() {
52
78
  const touched = new Set(this.stacks.keys());
53
79
  const actions = Array.from(this.applied.values());
54
80
  this.stacks.clear();
81
+ this.layers.clear();
55
82
  this.applied.clear();
56
83
  this.commit(touched, { type: 'reset', actions });
57
84
  }
@@ -98,6 +125,7 @@ class SceneActions {
98
125
  }
99
126
  return touched;
100
127
  }
128
+ /** `event` absent: a layer change (silent). */
101
129
  commit(touched, event) {
102
130
  for (const state of touched) {
103
131
  const stack = this.stacks.get(state);
@@ -116,6 +144,8 @@ class SceneActions {
116
144
  }
117
145
  });
118
146
  }
147
+ if (!event)
148
+ return;
119
149
  this.eventListeners.forEach(l => {
120
150
  try {
121
151
  l(event);
@@ -16,7 +16,16 @@ export interface SkyTimeState {
16
16
  * schedule expensive work off a sun change (a cube-camera capture) use this
17
17
  * to stand down and let the environment probe's own timer do it once. */
18
18
  advancing: boolean;
19
+ /** Unit vector toward the moon (sunUtils convention). */
20
+ moonDirection: THREE.Vector3;
21
+ moonElevation: number;
22
+ /** 0..1, see TimeSettings.moonPhase. */
23
+ moonPhase: number;
24
+ /** Lit fraction of the disc, 0 at new moon, 1 at full. */
25
+ moonIllumination: number;
19
26
  }
27
+ /** Lit fraction of the moon's disc for a phase in 0..1. */
28
+ export declare const moonIlluminationForPhase: (phase: number) => number;
20
29
  export declare class SkySystemManager {
21
30
  private static instance;
22
31
  private timeInHours;
@@ -28,6 +37,9 @@ export declare class SkySystemManager {
28
37
  private sunElevation;
29
38
  private sunAzimuth;
30
39
  private sunDirection;
40
+ private moonPhase;
41
+ private moonElevation;
42
+ private moonDirection;
31
43
  private enabled;
32
44
  private timescale;
33
45
  private autoAnimate;
@@ -89,6 +101,13 @@ export declare class SkySystemManager {
89
101
  private publishTime;
90
102
  private syncToRealTime;
91
103
  private recalculateState;
104
+ /**
105
+ * The moon runs the sun's own daily arc, `moonPhase` of a day behind it:
106
+ * a new moon rides with the sun, a full moon is 12 h behind — rising at
107
+ * sunset, highest at midnight, setting at sunrise — which is where the real
108
+ * one is. Same curve, same convention, so the two can never cross wrongly.
109
+ */
110
+ private calculateMoon;
92
111
  /**
93
112
  * Sun elevation and azimuth for a given hour.
94
113
  *
@@ -114,6 +133,9 @@ export declare class SkySystemManager {
114
133
  * JS's signed `%`, so the night arc's 360-540 degrees maps onto the same
115
134
  * directions the day arc's 180-360 does instead of running off the end. */
116
135
  private transformAzimuth;
136
+ /** Same convention as the Preetham sky (sunUtils), so the direction this
137
+ * publishes is exactly where SkyController draws the disc for the same
138
+ * elevation/azimuth. */
117
139
  private updateSunDirection;
118
140
  }
119
141
  export declare const skySystemManager: SkySystemManager;
@@ -1 +1 @@
1
- {"version":3,"file":"SkySystemManager.d.ts","sourceRoot":"","sources":["../../src/services/SkySystemManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3E,MAAM,WAAW,YAAY;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB;;8EAE0E;IAC1E,SAAS,EAAE,OAAO,CAAC;CACtB;AAaD,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAQ;IAC/B,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,UAAU,CAAO;IACzB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,UAAU,CAAQ;IAC1B;;mEAE+D;IAC/D,OAAO,CAAC,oBAAoB,CAAuB;IACnD;8CAC0C;IAC1C,OAAO,CAAC,eAAe,CAAK;IAC5B;;2DAEuD;IACvD,OAAO,CAAC,MAAM,CAAuB;;IAIrC,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAMtC,MAAM,CAAC,aAAa,IAAI,IAAI;IAG5B;;iBAEa;IACb,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMnC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAGpB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IA6B7C,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAGnE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,GAAG,IAAI;IAQjD;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAczB,QAAQ,IAAI,YAAY;IAexB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;IAoB/C,OAAO,IAAI,IAAI;IAKf,YAAY,IAAI,cAAc;IAG9B,eAAe,IAAI,KAAK,CAAC,OAAO;IAGhC,cAAc,IAAI,MAAM;IAGxB,SAAS,IAAI,OAAO;IAGpB,eAAe,IAAI,OAAO;IAG1B,WAAW,IAAI,OAAO;IAGtB,OAAO,CAAC,WAAW;IAWnB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;IASxB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;gFAE4E;IAC5E,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;CAQ7B;AACD,eAAO,MAAM,gBAAgB,EAAE,gBAAiD,CAAC;AACjF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"SkySystemManager.d.ts","sourceRoot":"","sources":["../../src/services/SkySystemManager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import * as THREE from 'three';
2
+ import { sunDirectionFromAngles } from '../utils/sunUtils.js';
3
+ import { SKY_PHASE_ELEVATIONS } from '../utils/skyPhase.js';
2
4
  const SUNRISE = 6;
3
5
  const SUNSET = 21;
4
6
  const MAX_ELEVATION = 42;
@@ -9,6 +11,11 @@ const HORIZON_OFFSET = 5;
9
11
  const MAX_NIGHT_DEPTH = 21;
10
12
  /** Real seconds between playback write-backs to the host. */
11
13
  const SYNC_INTERVAL_SECONDS = 0.25;
14
+ const DEFAULT_MOON_PHASE = 0.5;
15
+ const wrap01 = (v) => ((v % 1) + 1) % 1;
16
+ const wrap24 = (h) => ((h % 24) + 24) % 24;
17
+ /** Lit fraction of the moon's disc for a phase in 0..1. */
18
+ export const moonIlluminationForPhase = (phase) => (1 - Math.cos(2 * Math.PI * phase)) / 2;
12
19
  export class SkySystemManager {
13
20
  static instance = null;
14
21
  timeInHours = 12;
@@ -20,6 +27,9 @@ export class SkySystemManager {
20
27
  sunElevation = 37;
21
28
  sunAzimuth = 270;
22
29
  sunDirection = new THREE.Vector3(0, 1, 0);
30
+ moonPhase = DEFAULT_MOON_PHASE;
31
+ moonElevation = 0;
32
+ moonDirection = new THREE.Vector3(0, -1, 0);
23
33
  enabled = false;
24
34
  timescale = 60;
25
35
  autoAnimate = false;
@@ -38,7 +48,7 @@ export class SkySystemManager {
38
48
  * otherwise double-tick it and stomp its settings. */
39
49
  driver = null;
40
50
  constructor() {
41
- this.updateSunDirection();
51
+ this.recalculateState();
42
52
  }
43
53
  static getInstance() {
44
54
  if (!SkySystemManager.instance) {
@@ -67,6 +77,9 @@ export class SkySystemManager {
67
77
  return this.driver !== null;
68
78
  }
69
79
  setTimeSettings(settings) {
80
+ const moonPhase = wrap01(settings.moonPhase ?? DEFAULT_MOON_PHASE);
81
+ const phaseChanged = moonPhase !== this.moonPhase;
82
+ this.moonPhase = moonPhase;
70
83
  this.enabled = settings.enabled;
71
84
  this.timescale = settings.timescale;
72
85
  this.autoAnimate = settings.autoAnimate;
@@ -94,6 +107,9 @@ export class SkySystemManager {
94
107
  this.syncAccumulator = 0;
95
108
  this.recalculateState();
96
109
  }
110
+ else if (phaseChanged) {
111
+ this.recalculateState();
112
+ }
97
113
  }
98
114
  setOnTimeSync(callback) {
99
115
  this.onTimeSync = callback;
@@ -139,14 +155,16 @@ export class SkySystemManager {
139
155
  elapsedTime: this.elapsedTime,
140
156
  autoAnimate: this.autoAnimate,
141
157
  advancing: this.isAdvancing(),
158
+ moonDirection: this.moonDirection,
159
+ moonElevation: this.moonElevation,
160
+ moonPhase: this.moonPhase,
161
+ moonIllumination: moonIlluminationForPhase(this.moonPhase),
142
162
  };
143
163
  }
144
164
  getStateByTime(timeOfDay) {
145
165
  const state = this.calculateTimeState(timeOfDay);
146
- const el = THREE.MathUtils.degToRad(state.sunElevation);
147
- const az = THREE.MathUtils.degToRad(this.transformAzimuth(state.sunAzimuth));
148
- const distance = 0.5;
149
- const sunDirection = new THREE.Vector3(distance * Math.cos(el) * Math.sin(az), distance * Math.sin(el), distance * Math.cos(el) * Math.cos(az)).normalize();
166
+ const sunDirection = sunDirectionFromAngles(state.sunElevation, this.transformAzimuth(state.sunAzimuth), new THREE.Vector3());
167
+ const moon = this.calculateMoon(timeOfDay, new THREE.Vector3());
150
168
  return {
151
169
  timeInHours: timeOfDay,
152
170
  normalizedTime: state.normalizedTime,
@@ -159,6 +177,10 @@ export class SkySystemManager {
159
177
  elapsedTime: this.elapsedTime,
160
178
  autoAnimate: this.autoAnimate,
161
179
  advancing: this.isAdvancing(),
180
+ moonDirection: moon.direction,
181
+ moonElevation: moon.elevation,
182
+ moonPhase: this.moonPhase,
183
+ moonIllumination: moonIlluminationForPhase(this.moonPhase),
162
184
  };
163
185
  }
164
186
  getTime() {
@@ -240,6 +262,18 @@ export class SkySystemManager {
240
262
  this.sunElevation = state.sunElevation;
241
263
  this.sunAzimuth = state.sunAzimuth;
242
264
  this.updateSunDirection();
265
+ this.moonElevation = this.calculateMoon(this.timeInHours, this.moonDirection).elevation;
266
+ }
267
+ /**
268
+ * The moon runs the sun's own daily arc, `moonPhase` of a day behind it:
269
+ * a new moon rides with the sun, a full moon is 12 h behind — rising at
270
+ * sunset, highest at midnight, setting at sunrise — which is where the real
271
+ * one is. Same curve, same convention, so the two can never cross wrongly.
272
+ */
273
+ calculateMoon(timeInHours, out) {
274
+ const m = this.calculateTimeState(wrap24(timeInHours - this.moonPhase * 24));
275
+ sunDirectionFromAngles(m.sunElevation, this.transformAzimuth(m.sunAzimuth), out);
276
+ return { elevation: m.sunElevation, direction: out };
243
277
  }
244
278
  /**
245
279
  * Sun elevation and azimuth for a given hour.
@@ -277,14 +311,14 @@ export class SkySystemManager {
277
311
  sunElevation = -HORIZON_OFFSET - Math.cos(Math.PI * (normalizedTime - 0.5)) * MAX_NIGHT_DEPTH;
278
312
  sunAzimuth = 360 + 180 * normalizedTime;
279
313
  }
314
+ // Labels follow the sun's height (skyPhase), the same keys the atmosphere
315
+ // and the stars turn on, so the label never says Midday under a red sky.
280
316
  let timeOfDay = 'Nighttime';
281
- if (isDaytime) {
282
- if (normalizedTime <= 0.25)
283
- timeOfDay = 'Sunrise';
284
- else if (normalizedTime <= 0.75)
285
- timeOfDay = 'Midday';
286
- else
287
- timeOfDay = 'Sunset';
317
+ if (sunElevation >= SKY_PHASE_ELEVATIONS.day)
318
+ timeOfDay = 'Midday';
319
+ else if (sunElevation > SKY_PHASE_ELEVATIONS.twilight) {
320
+ const morning = isDaytime ? normalizedTime < 0.5 : timeInHours < 12;
321
+ timeOfDay = morning ? 'Sunrise' : 'Sunset';
288
322
  }
289
323
  return { normalizedTime, isDaytime, timeOfDay, sunElevation, sunAzimuth };
290
324
  }
@@ -295,13 +329,11 @@ export class SkySystemManager {
295
329
  const wrapped = (((270 - rawAzimuth) % 360) + 360) % 360;
296
330
  return wrapped - 180;
297
331
  }
332
+ /** Same convention as the Preetham sky (sunUtils), so the direction this
333
+ * publishes is exactly where SkyController draws the disc for the same
334
+ * elevation/azimuth. */
298
335
  updateSunDirection() {
299
- const el = THREE.MathUtils.degToRad(this.sunElevation);
300
- const az = THREE.MathUtils.degToRad(this.transformAzimuth(this.sunAzimuth));
301
- const distance = 0.5;
302
- this.sunDirection
303
- .set(distance * Math.cos(el) * Math.sin(az), distance * Math.sin(el), distance * Math.cos(el) * Math.cos(az))
304
- .normalize();
336
+ sunDirectionFromAngles(this.sunElevation, this.transformAzimuth(this.sunAzimuth), this.sunDirection);
305
337
  }
306
338
  }
307
339
  export const skySystemManager = SkySystemManager.getInstance();
@@ -1 +1 @@
1
- {"version":3,"file":"TextureResolver.d.ts","sourceRoot":"","sources":["../../src/services/TextureResolver.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,cAAM,sBAAsB;IAExB,OAAO,CAAC,KAAK,CAAa;IAC1B;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe5C;;OAEG;IACH,YAAY,CAAC,IAAI,GAAE,MAAiB,GAAG,OAAO;IAG9C;;;;;;;;;;OAUG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAqCnG;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAG9B;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAG3C;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOxB;;OAEG;IACH,QAAQ,IAAI;QACA,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;KACxB;CAMZ;AAED,eAAO,MAAM,eAAe,EAAE,sBAAqD,CAAC;AAEpF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"TextureResolver.d.ts","sourceRoot":"","sources":["../../src/services/TextureResolver.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAKhD,cAAM,sBAAsB;IAExB,OAAO,CAAC,KAAK,CAAa;IAC1B;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe5C;;OAEG;IACH,YAAY,CAAC,IAAI,GAAE,MAAiB,GAAG,OAAO;IAG9C;;;;;;;;;;OAUG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAoDnG;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAG9B;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAG3C;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOxB;;OAEG;IACH,QAAQ,IAAI;QACA,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;KACxB;CAMZ;AAED,eAAO,MAAM,eAAe,EAAE,sBAAqD,CAAC;AAEpF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -13,6 +13,9 @@
13
13
  import { loadTextureAsync } from '../utils/loadingManager.js';
14
14
  import { NoiseGenerator } from './NoiseGenerator.js';
15
15
  import MaterialRegistryAPI from '../services/MaterialRegistry.js';
16
+ import { SRGBColorSpace } from "three";
17
+ /** Texture slots that hold colour (sRGB) data; the rest (normal, roughness…) are linear. */
18
+ const SRGB_TEXTURE_KEYS = new Set(['map', 'emissiveMap', 'specularColorMap', 'sheenColorMap']);
16
19
  class TextureResolverService {
17
20
  // Cache: URL string → loaded Texture
18
21
  cache = new Map();
@@ -87,6 +90,25 @@ class TextureResolverService {
87
90
  }
88
91
  // Wait for all texture loads to complete
89
92
  await Promise.all(texturePromises);
93
+ // Per-material texture state on a copy (the loaded texture is cached and shared):
94
+ // tiling from settings.textureRepeat ([x, y] or a number), and sRGB for colour maps.
95
+ const rep = settings.textureRepeat;
96
+ const repeat = Array.isArray(rep) && rep.length === 2 ? rep : typeof rep === 'number' ? [rep, rep] : null;
97
+ for (const key of textureKeys) {
98
+ const tex = resolved[key];
99
+ if (!tex || !tex.isTexture || typeof settings[key] !== 'string')
100
+ continue;
101
+ const srgb = SRGB_TEXTURE_KEYS.has(key);
102
+ if (!repeat && !srgb)
103
+ continue;
104
+ const copy = tex.clone();
105
+ if (srgb)
106
+ copy.colorSpace = SRGBColorSpace;
107
+ if (repeat)
108
+ copy.repeat.set(Number(repeat[0]) || 1, Number(repeat[1]) || 1);
109
+ copy.needsUpdate = true;
110
+ resolved[key] = copy;
111
+ }
90
112
  return resolved;
91
113
  }
92
114
  /**
@@ -12,7 +12,7 @@ export { PositionsCreator } from './PositionsCreator';
12
12
  export * from './NoiseGenerator';
13
13
  export { TextureResolverService, textureResolver } from './TextureResolver';
14
14
  export { UniformConverter, UniformProcessor, uniformConverter } from './UniformConverter';
15
- export { SkySystemManager, skySystemManager } from './SkySystemManager';
15
+ export { SkySystemManager, skySystemManager, moonIlluminationForPhase } from './SkySystemManager';
16
16
  export { CubeCameraManager, cubeCameraManager } from './CubeCameraManager';
17
17
  export { default as SceneStore } from './SceneStore';
18
18
  export { default as SceneActions } from './SceneActions';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,GAAG,MAAM,oBAAoB,CAAC;AAE5H,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACtF,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,GAAG,MAAM,oBAAoB,CAAC;AAE5H,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACtF,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -9,7 +9,7 @@ export { PositionsCreator } from './PositionsCreator.js';
9
9
  export * from './NoiseGenerator.js';
10
10
  export { TextureResolverService, textureResolver } from './TextureResolver.js';
11
11
  export { UniformConverter, UniformProcessor, uniformConverter } from './UniformConverter.js';
12
- export { SkySystemManager, skySystemManager } from './SkySystemManager.js';
12
+ export { SkySystemManager, skySystemManager, moonIlluminationForPhase } from './SkySystemManager.js';
13
13
  export { CubeCameraManager, cubeCameraManager } from './CubeCameraManager.js';
14
14
  export { default as SceneStore } from './SceneStore.js';
15
15
  export { default as SceneActions } from './SceneActions.js';
@@ -34,13 +34,13 @@ const fragmentShader = /*glsl*/ `
34
34
  // Sky gradient from horizon to zenith
35
35
  vec3 skyColor = mix(uSkyColorLow, uSkyColorHigh, clamp(direction.y * 0.5 + 0.5, 0.0, 1.0));
36
36
 
37
- // Calculate sun direction from azimuth and elevation
37
+ // Sun direction from azimuth and elevation, same convention as core sunUtils
38
38
  float azimuth = radians(uSunAzimuth);
39
39
  float elevation = radians(uSunElevation);
40
40
  vec3 sunDirection = normalize(vec3(
41
- cos(elevation) * sin(azimuth),
41
+ cos(elevation) * cos(azimuth),
42
42
  sin(elevation),
43
- cos(elevation) * cos(azimuth)
43
+ cos(elevation) * sin(azimuth)
44
44
  ));
45
45
 
46
46
  // Sun disc with intensity falloff
@@ -15,6 +15,10 @@ export interface StarsMaterialUniforms {
15
15
  colorMix: {
16
16
  value: number;
17
17
  };
18
+ /** Multiplier on every star's sprite size. */
19
+ sizeScale: {
20
+ value: number;
21
+ };
18
22
  }
19
23
  declare global {
20
24
  namespace JSX {
@@ -29,6 +33,7 @@ declare const StarsMaterial: import("@react-three/fiber").ConstructorRepresentat
29
33
  uColor: THREE.Color;
30
34
  targetColor: THREE.Color;
31
35
  colorMix: number;
36
+ sizeScale: number;
32
37
  }> & {
33
38
  key: string;
34
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"StarsMaterial.d.ts","sourceRoot":"","sources":["../../src/shaders/StarsMaterial.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE;QACF,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACJ,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;KACtB,CAAC;IACF,WAAW,EAAE;QACT,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,GAAG,CAAC;QACV,UAAU,iBAAiB;YACvB,aAAa,EAAE,GAAG,CAAC;SACtB;KACJ;CACJ;AA+DD,QAAA,MAAM,aAAa;;;;;;;;CAMa,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"StarsMaterial.d.ts","sourceRoot":"","sources":["../../src/shaders/StarsMaterial.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE;QACF,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACJ,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;KACtB,CAAC;IACF,WAAW,EAAE;QACT,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,8CAA8C;IAC9C,SAAS,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,GAAG,CAAC;QACV,UAAU,iBAAiB;YACvB,aAAa,EAAE,GAAG,CAAC;SACtB;KACJ;CACJ;AAgED,QAAA,MAAM,aAAa;;;;;;;;;CAOa,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -2,64 +2,65 @@ import { extend } from "@react-three/fiber";
2
2
  import { shaderMaterial } from "@react-three/drei";
3
3
  import * as THREE from "three";
4
4
  // Vertex shader with twinkling effect
5
- const vertexShader = /*glsl*/ `
6
- attribute float size;
7
- attribute vec3 color;
8
- attribute float phase;
9
- attribute float freq;
10
-
11
- varying vec3 vColor;
12
- varying float vDepth;
13
-
14
- uniform float time;
15
-
16
- void main() {
17
- vColor = color;
18
- vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
19
- vDepth = mvPosition.z;
20
-
21
- // Twinkling effect based on time, frequency, and phase
22
- float twinkle = sin(time * freq + phase) * 0.2 + 0.8;
23
- gl_PointSize = size * twinkle;
24
-
25
- // Position stars at far depth to appear behind everything
26
- vec4 pos = projectionMatrix * mvPosition;
27
- pos.z = pos.w * 0.999999;
28
- gl_Position = pos;
29
- }
5
+ const vertexShader = /*glsl*/ `
6
+ attribute float size;
7
+ attribute vec3 color;
8
+ attribute float phase;
9
+ attribute float freq;
10
+
11
+ varying vec3 vColor;
12
+ varying float vDepth;
13
+
14
+ uniform float time;
15
+ uniform float sizeScale;
16
+
17
+ void main() {
18
+ vColor = color;
19
+ vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
20
+ vDepth = mvPosition.z;
21
+
22
+ // Twinkling effect based on time, frequency, and phase
23
+ float twinkle = sin(time * freq + phase) * 0.2 + 0.8;
24
+ gl_PointSize = size * twinkle * sizeScale;
25
+
26
+ // Position stars at far depth to appear behind everything
27
+ vec4 pos = projectionMatrix * mvPosition;
28
+ pos.z = pos.w * 0.999999;
29
+ gl_Position = pos;
30
+ }
30
31
  `;
31
32
  // Fragment shader with star glow effect and color transitions
32
- const fragmentShader = /*glsl*/ `
33
- varying vec3 vColor;
34
- varying float vDepth;
35
-
36
- uniform float opacity;
37
- uniform vec3 uColor;
38
- uniform vec3 targetColor;
39
- uniform float colorMix;
40
-
41
- void main() {
42
- // Calculate distance from center of point
43
- vec2 center = gl_PointCoord - vec2(0.5);
44
- float dist = length(center) * 2.0;
45
-
46
- // Core brightness with sharp center
47
- float core = (1.0 - smoothstep(0.0, 0.2, dist)) * 0.8;
48
-
49
- // Soft glow around core
50
- float glow = (1.0 - smoothstep(0.2, 0.5, dist)) * 0.1;
51
-
52
- float brightness = core + glow;
53
-
54
- // Interpolate between base color and target color
55
- vec3 transitionColor = mix(uColor, targetColor, colorMix);
56
-
57
- // Mix white with interpolated color for realistic appearance
58
- vec3 finalColor = mix(vec3(1.0), transitionColor * vColor, 0.8) * 0.6;
59
-
60
- // Apply global opacity for fade in/out transitions
61
- gl_FragColor = vec4(finalColor, brightness * opacity);
62
- }
33
+ const fragmentShader = /*glsl*/ `
34
+ varying vec3 vColor;
35
+ varying float vDepth;
36
+
37
+ uniform float opacity;
38
+ uniform vec3 uColor;
39
+ uniform vec3 targetColor;
40
+ uniform float colorMix;
41
+
42
+ void main() {
43
+ // Calculate distance from center of point
44
+ vec2 center = gl_PointCoord - vec2(0.5);
45
+ float dist = length(center) * 2.0;
46
+
47
+ // Core brightness with sharp center
48
+ float core = (1.0 - smoothstep(0.0, 0.2, dist)) * 0.8;
49
+
50
+ // Soft glow around core
51
+ float glow = (1.0 - smoothstep(0.2, 0.5, dist)) * 0.1;
52
+
53
+ float brightness = core + glow;
54
+
55
+ // Interpolate between base color and target color
56
+ vec3 transitionColor = mix(uColor, targetColor, colorMix);
57
+
58
+ // Mix white with interpolated color for realistic appearance
59
+ vec3 finalColor = mix(vec3(1.0), transitionColor * vColor, 0.8) * 0.6;
60
+
61
+ // Apply global opacity for fade in/out transitions
62
+ gl_FragColor = vec4(finalColor, brightness * opacity);
63
+ }
63
64
  `;
64
65
  // Create the shader material with uniforms
65
66
  const StarsMaterial = shaderMaterial({
@@ -67,7 +68,8 @@ const StarsMaterial = shaderMaterial({
67
68
  opacity: 1.0,
68
69
  uColor: new THREE.Color(1.0, 1.0, 1.0),
69
70
  targetColor: new THREE.Color(1.0, 1.0, 1.0),
70
- colorMix: 0.0
71
+ colorMix: 0.0,
72
+ sizeScale: 1.0
71
73
  }, vertexShader, fragmentShader);
72
74
  // Extend the material for use in React Three Fiber
73
75
  extend({ StarsMaterial });
@@ -1,5 +1,10 @@
1
1
  import * as THREE from 'three';
2
- import type { TextConfig } from "../types/text";
2
+ type TextConfig = {
3
+ text?: string;
4
+ font?: string;
5
+ renderMode?: 'text3d' | 'bitmap';
6
+ [k: string]: any;
7
+ };
3
8
  export interface LetterVOptions {
4
9
  char: string;
5
10
  config: TextConfig;
@@ -21,4 +26,5 @@ export declare class LetterV {
21
26
  updateConfig(options: LetterVOptions): void;
22
27
  dispose(removeFromScene?: boolean): void;
23
28
  }
29
+ export {};
24
30
  //# sourceMappingURL=LetterV.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LetterV.d.ts","sourceRoot":"","sources":["../../src/three/LetterV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAGD,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,KAAK,CAAC;IACd,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAoB;IACzC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAa;gBACzB,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc;IAS3D,OAAO,CAAC,KAAK;IA0Cb,OAAO,CAAC,UAAU;IAUlB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAK3C,OAAO,CAAC,eAAe,GAAE,OAAc,GAAG,IAAI;CAYjD"}
1
+ {"version":3,"file":"LetterV.d.ts","sourceRoot":"","sources":["../../src/three/LetterV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,KAAK,UAAU,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AACvG,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAGD,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,KAAK,CAAC;IACd,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAoB;IACzC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAa;gBACzB,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc;IAS3D,OAAO,CAAC,KAAK;IA0Cb,OAAO,CAAC,UAAU;IAUlB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAK3C,OAAO,CAAC,eAAe,GAAE,OAAc,GAAG,IAAI;CAYjD"}
@@ -1,5 +1,10 @@
1
1
  import * as THREE from 'three';
2
- import type { Text2DConfig } from "../types/text";
2
+ type Text2DConfig = {
3
+ text?: string;
4
+ font?: string;
5
+ renderMode?: 'text3d' | 'bitmap';
6
+ [k: string]: any;
7
+ };
3
8
  export interface Text2DVOptions {
4
9
  text: string;
5
10
  config?: Partial<Text2DConfig>;
@@ -22,4 +27,5 @@ export declare class Text2DV {
22
27
  updateConfig(options: Text2DVOptions): void;
23
28
  dispose(removeFromScene?: boolean): void;
24
29
  }
30
+ export {};
25
31
  //# sourceMappingURL=Text2DV.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Text2DV.d.ts","sourceRoot":"","sources":["../../src/three/Text2DV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAGD,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,KAAK,CAAC;IACd,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAC;gBACJ,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc;IAW3D,OAAO,CAAC,KAAK;IA6Bb,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAC/C,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAK3C,OAAO,CAAC,eAAe,GAAE,OAAc,GAAG,IAAI;CAYjD"}
1
+ {"version":3,"file":"Text2DV.d.ts","sourceRoot":"","sources":["../../src/three/Text2DV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AACzG,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAGD,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,KAAK,CAAC;IACd,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAC;gBACJ,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc;IAW3D,OAAO,CAAC,KAAK;IA6Bb,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAC/C,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAK3C,OAAO,CAAC,eAAe,GAAE,OAAc,GAAG,IAAI;CAYjD"}
@@ -1,5 +1,10 @@
1
1
  import * as THREE from 'three';
2
- import type { Text3DConfig } from "../types/text";
2
+ type Text3DConfig = {
3
+ text?: string;
4
+ font?: string;
5
+ renderMode?: 'text3d' | 'bitmap';
6
+ [k: string]: any;
7
+ };
3
8
  export interface Text3DVOptions {
4
9
  text: string;
5
10
  config: Text3DConfig;
@@ -19,4 +24,5 @@ export declare class Text3DV {
19
24
  updateConfig(options: Text3DVOptions): void;
20
25
  dispose(removeFromScene?: boolean): void;
21
26
  }
27
+ export {};
22
28
  //# sourceMappingURL=Text3DV.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Text3DV.d.ts","sourceRoot":"","sources":["../../src/three/Text3DV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAGD,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,KAAK,CAAC;IACd,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAC;gBACJ,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc;IAW3D,OAAO,CAAC,KAAK;IAWb,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAC/C,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAK3C,OAAO,CAAC,eAAe,GAAE,OAAc,GAAG,IAAI;CAOjD"}
1
+ {"version":3,"file":"Text3DV.d.ts","sourceRoot":"","sources":["../../src/three/Text3DV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,KAAK,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AACzG,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAGD,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,KAAK,CAAC;IACd,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAC;gBACJ,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc;IAW3D,OAAO,CAAC,KAAK;IAWb,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAC/C,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAK3C,OAAO,CAAC,eAAe,GAAE,OAAc,GAAG,IAAI;CAOjD"}
@@ -1,4 +1,4 @@
1
- import type { OperationEffect } from './objectSettings';
1
+ import type { SceneCommand } from './commands';
2
2
  /**
3
3
  * Action Types
4
4
  * Defines the structure for UI actions that can trigger animations, toggle elements, or load projects
@@ -54,14 +54,14 @@ export interface ActionSequence {
54
54
  */
55
55
  key?: string;
56
56
  description?: string;
57
+ /** The changes (patches): what elements ARE while the action is applied. */
57
58
  targets: ActionTarget[];
58
59
  /**
59
- * Operations run when the action is applied, undone when it is reverted
60
- * (glow, fade, zoom to…). Patches change what elements ARE; effects are what
61
- * HAPPENS to objects. Patches are applied first.
60
+ * What HAPPENS when it is applied, in order (triggers engine): effects, effect clips and
61
+ * other actions are switched on with it and off again on revert; animations run their
62
+ * command on apply and stop on revert. Patches are applied first.
62
63
  */
63
- effects?: OperationEffect[];
64
- assetId?: string | null;
64
+ commands: SceneCommand[];
65
65
  /** Runtime only */
66
66
  isDirty?: boolean;
67
67
  }