@fps-games/editor 0.1.4-beta.4 → 0.1.4-beta.5

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 (144) hide show
  1. package/dist/build-info.json +45 -0
  2. package/dist/local-editor-harness.d.ts +2 -1
  3. package/dist/local-editor-harness.d.ts.map +1 -1
  4. package/dist/local-editor-harness.js +62 -0
  5. package/dist/local-editor-harness.js.map +1 -1
  6. package/dist/playable-babylon-facade.d.ts +4 -4
  7. package/dist/playable-babylon-facade.d.ts.map +1 -1
  8. package/dist/playable-babylon-facade.js +2 -2
  9. package/dist/playable-babylon-facade.js.map +1 -1
  10. package/dist/playable-babylon-rendering.d.ts +14 -2
  11. package/dist/playable-babylon-rendering.d.ts.map +1 -1
  12. package/dist/playable-babylon-rendering.js +48 -3
  13. package/dist/playable-babylon-rendering.js.map +1 -1
  14. package/dist/playable-local-editor-host.d.ts +2 -0
  15. package/dist/playable-local-editor-host.d.ts.map +1 -1
  16. package/dist/playable-local-editor-host.js.map +1 -1
  17. package/dist/playable-sdk-vite.d.ts +2 -0
  18. package/dist/playable-sdk-vite.d.ts.map +1 -0
  19. package/dist/playable-sdk-vite.js +2 -0
  20. package/dist/playable-sdk-vite.js.map +1 -0
  21. package/dist/playable-sdk.d.ts +4 -4
  22. package/dist/playable-sdk.d.ts.map +1 -1
  23. package/dist/playable-sdk.js +2 -2
  24. package/dist/playable-sdk.js.map +1 -1
  25. package/node_modules/@fps-games/babylon-renderer/dist/index.d.ts +3 -0
  26. package/node_modules/@fps-games/babylon-renderer/dist/index.d.ts.map +1 -1
  27. package/node_modules/@fps-games/babylon-renderer/dist/index.js +3 -0
  28. package/node_modules/@fps-games/babylon-renderer/dist/index.js.map +1 -1
  29. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-shaders.d.ts +5 -0
  30. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-shaders.d.ts.map +1 -0
  31. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-shaders.js +46 -0
  32. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-shaders.js.map +1 -0
  33. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.d.ts +5 -0
  34. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.d.ts.map +1 -0
  35. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.js +398 -0
  36. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.js.map +1 -0
  37. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-system.d.ts +6 -0
  38. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-system.d.ts.map +1 -0
  39. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-system.js +717 -0
  40. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-system.js.map +1 -0
  41. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.d.ts +131 -0
  42. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.d.ts.map +1 -1
  43. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.js +76 -0
  44. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.js.map +1 -1
  45. package/node_modules/@fps-games/babylon-renderer/package.json +1 -1
  46. package/node_modules/@fps-games/editor-babylon/dist/index.d.ts +1 -0
  47. package/node_modules/@fps-games/editor-babylon/dist/index.d.ts.map +1 -1
  48. package/node_modules/@fps-games/editor-babylon/dist/index.js +1 -0
  49. package/node_modules/@fps-games/editor-babylon/dist/index.js.map +1 -1
  50. package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.d.ts +49 -0
  51. package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.d.ts.map +1 -0
  52. package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js +141 -0
  53. package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js.map +1 -0
  54. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +5 -0
  55. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  56. package/node_modules/@fps-games/editor-babylon/dist/projection.js +72 -5
  57. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  58. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.d.ts +14 -3
  59. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.d.ts.map +1 -1
  60. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js +223 -8
  61. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js.map +1 -1
  62. package/node_modules/@fps-games/editor-babylon/package.json +5 -5
  63. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  64. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +33 -6
  65. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  66. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +3 -1
  67. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  68. package/node_modules/@fps-games/editor-browser/package.json +3 -3
  69. package/node_modules/@fps-games/editor-core/package.json +2 -2
  70. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  71. package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts +2 -0
  72. package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts.map +1 -1
  73. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.d.ts +1 -1
  74. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.d.ts.map +1 -1
  75. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.js +1 -1
  76. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.js.map +1 -1
  77. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.d.ts.map +1 -1
  78. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.js +2 -1
  79. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.js.map +1 -1
  80. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.d.ts +1 -0
  81. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.d.ts.map +1 -1
  82. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.js +8 -0
  83. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.js.map +1 -1
  84. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.d.ts +1 -0
  85. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.d.ts.map +1 -1
  86. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js +56 -0
  87. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js.map +1 -1
  88. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
  89. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +0 -4
  90. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
  91. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.d.ts.map +1 -1
  92. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js +8 -1
  93. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js.map +1 -1
  94. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +1 -1
  95. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts.map +1 -1
  96. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js +5 -0
  97. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js.map +1 -1
  98. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.d.ts.map +1 -1
  99. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +412 -0
  100. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
  101. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/profile.d.ts +6 -2
  102. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/profile.d.ts.map +1 -1
  103. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/profile.js +272 -5
  104. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/profile.js.map +1 -1
  105. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts +108 -1
  106. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts.map +1 -1
  107. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.d.ts.map +1 -1
  108. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js +1 -0
  109. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js.map +1 -1
  110. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.d.ts +2 -1
  111. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.d.ts.map +1 -1
  112. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/index.d.ts +1 -1
  113. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/index.d.ts.map +1 -1
  114. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/index.js +1 -1
  115. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/index.js.map +1 -1
  116. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.d.ts +2 -1
  117. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.d.ts.map +1 -1
  118. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +37 -0
  119. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  120. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts +15 -0
  121. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts.map +1 -1
  122. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-core.d.ts +36 -0
  123. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-core.d.ts.map +1 -0
  124. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-core.js +65 -0
  125. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-core.js.map +1 -0
  126. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-node.d.ts +4 -0
  127. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-node.d.ts.map +1 -0
  128. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-node.js +87 -0
  129. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-node.js.map +1 -0
  130. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +5 -0
  131. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -0
  132. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +5 -0
  133. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -0
  134. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts +8 -0
  135. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -0
  136. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +226 -0
  137. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -0
  138. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +64 -0
  139. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -0
  140. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js +2 -0
  141. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -0
  142. package/node_modules/@fps-games/editor-playable-sdk/package.json +7 -3
  143. package/node_modules/@fps-games/editor-protocol/package.json +1 -1
  144. package/package.json +12 -8
@@ -1,12 +1,46 @@
1
- import { createPlanarShadowSystem, } from '@fps-games/babylon-renderer';
1
+ import { createBlobShadowSystem, createPlanarShadowSystem, createStaticProjectedShadowSystem, } from '@fps-games/babylon-renderer';
2
+ const PLANAR_PREVIEW_ROOT_BOUNDARY_PATTERNS = ['root', 'scene_builder_root'];
2
3
  export function createBabylonEditorShadowPreviewController(options) {
3
4
  let currentOptions = normalizeShadowPreviewOptions(options.options);
5
+ let blobSystem = null;
6
+ let staticSystem = null;
7
+ let staticLight = null;
4
8
  let planarSystem = null;
5
9
  let planarLight = null;
10
+ const blobCasters = new Set();
11
+ const staticCasters = new Set();
12
+ const planarCasters = new Set();
13
+ const disposeBlob = () => {
14
+ blobSystem?.dispose();
15
+ blobSystem = null;
16
+ blobCasters.clear();
17
+ };
6
18
  const disposePlanar = () => {
7
19
  planarSystem?.dispose();
8
20
  planarSystem = null;
9
21
  planarLight = null;
22
+ planarCasters.clear();
23
+ };
24
+ const disposeStatic = () => {
25
+ staticSystem?.dispose();
26
+ staticSystem = null;
27
+ staticLight = null;
28
+ staticCasters.clear();
29
+ };
30
+ const syncBlob = () => {
31
+ const blobOptions = currentOptions.blob;
32
+ if (!blobOptions || blobOptions.enabled === false) {
33
+ disposeBlob();
34
+ return;
35
+ }
36
+ const nextOptions = disableBlobAutoDetection(blobOptions);
37
+ if (!blobSystem) {
38
+ blobSystem = createBlobShadowSystem(options.scene, nextOptions);
39
+ blobSystem.initialize();
40
+ }
41
+ else {
42
+ blobSystem.setOptions(nextOptions);
43
+ }
10
44
  };
11
45
  const syncPlanar = () => {
12
46
  const planarOptions = currentOptions.planar;
@@ -22,36 +56,217 @@ export function createBabylonEditorShadowPreviewController(options) {
22
56
  if (!planarSystem || planarLight !== light) {
23
57
  disposePlanar();
24
58
  planarLight = light;
25
- planarSystem = createPlanarShadowSystem(options.scene, light, { ...planarOptions, direction: { mode: 'follow-light' } });
59
+ planarSystem = createPlanarShadowSystem(options.scene, light, disablePlanarAutoDetection({ ...planarOptions, direction: { mode: 'follow-light' } }));
26
60
  planarSystem.initialize();
27
61
  return;
28
62
  }
29
- planarSystem.setOptions({ ...planarOptions, direction: { mode: 'follow-light' } });
30
- planarSystem.refresh();
63
+ planarSystem.setOptions(disablePlanarAutoDetection({ ...planarOptions, direction: { mode: 'follow-light' } }));
31
64
  };
32
- syncPlanar();
65
+ const syncStatic = () => {
66
+ const staticOptions = currentOptions.staticProjected;
67
+ if (!staticOptions || staticOptions.enabled === false) {
68
+ disposeStatic();
69
+ return;
70
+ }
71
+ const light = resolveDirectionalLight(options.projection, staticOptions.directionalLightNodeId ?? null);
72
+ if (!light) {
73
+ disposeStatic();
74
+ return;
75
+ }
76
+ if (!staticSystem || staticLight !== light) {
77
+ disposeStatic();
78
+ staticLight = light;
79
+ staticSystem = createStaticProjectedShadowSystem(options.scene, light, disableStaticAutoDetection({ ...staticOptions, direction: { mode: 'follow-light' } }));
80
+ staticSystem.initialize();
81
+ return;
82
+ }
83
+ staticSystem.setOptions(disableStaticAutoDetection({ ...staticOptions, direction: { mode: 'follow-light' } }));
84
+ };
85
+ const syncRoutes = () => {
86
+ syncBlob();
87
+ syncStatic();
88
+ syncPlanar();
89
+ const meshes = readSceneMeshes(options.scene);
90
+ const nextBlobCasters = new Set();
91
+ const nextStaticCasters = new Set();
92
+ const nextPlanarCasters = new Set();
93
+ for (const mesh of meshes) {
94
+ const mode = resolvePreviewMeshShadowMode(mesh, currentOptions.defaultMode ?? 'static');
95
+ if (mode === 'blob' && blobSystem)
96
+ nextBlobCasters.add(mesh);
97
+ if (mode === 'static' && staticSystem)
98
+ nextStaticCasters.add(mesh);
99
+ if (mode === 'planar' && planarSystem)
100
+ nextPlanarCasters.add(mesh);
101
+ }
102
+ syncSystemCasters(blobSystem, blobCasters, nextBlobCasters);
103
+ syncSystemCasters(staticSystem, staticCasters, nextStaticCasters);
104
+ syncSystemCasters(planarSystem, planarCasters, nextPlanarCasters);
105
+ blobSystem?.refresh();
106
+ staticSystem?.refresh();
107
+ planarSystem?.refresh();
108
+ };
109
+ syncRoutes();
33
110
  return {
34
111
  setOptions(nextOptions) {
35
112
  currentOptions = normalizeShadowPreviewOptions(nextOptions);
36
- syncPlanar();
113
+ syncRoutes();
37
114
  },
38
115
  refresh() {
39
- syncPlanar();
116
+ syncRoutes();
40
117
  },
41
118
  rebuild() {
119
+ disposeBlob();
120
+ disposeStatic();
42
121
  disposePlanar();
43
- syncPlanar();
122
+ syncRoutes();
44
123
  },
45
124
  dispose() {
125
+ disposeBlob();
126
+ disposeStatic();
46
127
  disposePlanar();
47
128
  },
48
129
  };
49
130
  }
50
131
  function normalizeShadowPreviewOptions(options) {
51
132
  return {
133
+ defaultMode: readPreviewDefaultMode(options?.defaultMode),
134
+ blob: options?.blob ?? null,
135
+ staticProjected: options?.staticProjected ?? null,
52
136
  planar: options?.planar ?? null,
53
137
  };
54
138
  }
139
+ function disableBlobAutoDetection(options) {
140
+ return {
141
+ ...options,
142
+ casters: {
143
+ ...options.casters,
144
+ autoDetectAll: false,
145
+ includePatterns: [],
146
+ },
147
+ };
148
+ }
149
+ function disablePlanarAutoDetection(options) {
150
+ return {
151
+ ...options,
152
+ casters: {
153
+ ...options.casters,
154
+ autoDetectAll: false,
155
+ includePatterns: [],
156
+ rootBoundaryPatterns: mergeUniquePatterns([
157
+ ...(options.casters?.rootBoundaryPatterns ?? []),
158
+ ...PLANAR_PREVIEW_ROOT_BOUNDARY_PATTERNS,
159
+ ]),
160
+ },
161
+ };
162
+ }
163
+ function disableStaticAutoDetection(options) {
164
+ return {
165
+ ...options,
166
+ casters: {
167
+ ...options.casters,
168
+ autoDetectAll: false,
169
+ includePatterns: [],
170
+ },
171
+ };
172
+ }
173
+ function syncSystemCasters(system, current, next) {
174
+ for (const mesh of [...current]) {
175
+ if (!next.has(mesh)) {
176
+ system?.removeCaster(mesh);
177
+ current.delete(mesh);
178
+ }
179
+ }
180
+ if (!system) {
181
+ current.clear();
182
+ return;
183
+ }
184
+ for (const mesh of next) {
185
+ if (!current.has(mesh)) {
186
+ system.addCaster(mesh);
187
+ current.add(mesh);
188
+ }
189
+ }
190
+ }
191
+ function readSceneMeshes(scene) {
192
+ return Array.isArray(scene?.meshes) ? scene.meshes : [];
193
+ }
194
+ function resolvePreviewMeshShadowMode(mesh, defaultMode) {
195
+ if (mesh.isDisposed?.())
196
+ return 'none';
197
+ if (hasGeneratedShadowDisabled(mesh))
198
+ return 'none';
199
+ const authoredMode = readProjectionShadowMode(mesh);
200
+ if (!authoredMode || authoredMode === 'default')
201
+ return defaultMode;
202
+ return authoredMode;
203
+ }
204
+ function readPreviewDefaultMode(value) {
205
+ return value === 'none' || value === 'blob' || value === 'static' || value === 'planar' || value === 'dynamic'
206
+ ? value
207
+ : 'static';
208
+ }
209
+ function readProjectionShadowMode(mesh) {
210
+ for (const node of walkNodeAndParents(mesh)) {
211
+ const editorProjection = readEditorProjectionMetadata(node);
212
+ const mode = editorProjection?.shadowMode;
213
+ if (mode === 'default' || mode === 'none' || mode === 'blob' || mode === 'static' || mode === 'planar' || mode === 'dynamic')
214
+ return mode;
215
+ }
216
+ return null;
217
+ }
218
+ function hasGeneratedShadowDisabled(mesh) {
219
+ for (const node of walkNodeAndParents(mesh)) {
220
+ const metadata = readObject(node.metadata);
221
+ if (metadata?.blobShadowInternal === true
222
+ || metadata?.staticProjectedShadowInternal === true
223
+ || metadata?.planarShadowInternal === true)
224
+ return true;
225
+ const projection = readEditorProjectionMetadata(node);
226
+ if (projection?.runtimeKind === 'camera' || projection?.runtimeKind === 'light')
227
+ return true;
228
+ if (metadata?.disableBlobShadow === true
229
+ && metadata?.disableStaticProjectedShadow === true
230
+ && metadata?.disablePlanarShadow === true
231
+ && projection?.nodeId !== 'root'
232
+ && projection?.helperKind !== 'root') {
233
+ return true;
234
+ }
235
+ }
236
+ return false;
237
+ }
238
+ function walkNodeAndParents(mesh) {
239
+ const nodes = [];
240
+ const seen = new Set();
241
+ let cursor = mesh;
242
+ while (cursor && typeof cursor === 'object' && !seen.has(cursor)) {
243
+ nodes.push(cursor);
244
+ seen.add(cursor);
245
+ cursor = cursor.parent;
246
+ }
247
+ return nodes;
248
+ }
249
+ function readEditorProjectionMetadata(node) {
250
+ return readObject(readObject(node?.metadata)?.editorProjection);
251
+ }
252
+ function readObject(value) {
253
+ return value && typeof value === 'object' && !Array.isArray(value)
254
+ ? value
255
+ : null;
256
+ }
257
+ function mergeUniquePatterns(patterns) {
258
+ const normalized = [];
259
+ const seen = new Set();
260
+ for (const pattern of patterns) {
261
+ const trimmed = pattern.trim();
262
+ const key = trimmed.toLowerCase();
263
+ if (!trimmed || seen.has(key))
264
+ continue;
265
+ seen.add(key);
266
+ normalized.push(trimmed);
267
+ }
268
+ return normalized;
269
+ }
55
270
  function resolveDirectionalLight(projection, nodeId) {
56
271
  if (!nodeId)
57
272
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"shadow-preview-controller.js","sourceRoot":"","sources":["../src/shadow-preview-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shadow-preview-controller.js","sourceRoot":"","sources":["../src/shadow-preview-controller.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fps-games/editor-babylon",
3
- "version": "0.1.4-beta.4",
3
+ "version": "0.1.4-beta.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "BabylonJS runtime integrations for fps-game-editor.",
@@ -18,9 +18,9 @@
18
18
  }
19
19
  },
20
20
  "dependencies": {
21
- "@fps-games/babylon-renderer": "0.1.4-beta.4",
22
- "@fps-games/editor-browser": "0.1.4-beta.4",
23
- "@fps-games/editor-core": "0.1.4-beta.4",
24
- "@fps-games/editor-protocol": "0.1.4-beta.4"
21
+ "@fps-games/babylon-renderer": "0.1.4-beta.5",
22
+ "@fps-games/editor-browser": "0.1.4-beta.5",
23
+ "@fps-games/editor-core": "0.1.4-beta.5",
24
+ "@fps-games/editor-protocol": "0.1.4-beta.5"
25
25
  }
26
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"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"}
@@ -239,11 +239,12 @@ function tabHeaderButtonStyle(button) {
239
239
  button.style.minWidth = '0';
240
240
  }
241
241
  function createRenderingSectionBlock(doc, section) {
242
+ const isListLayout = section.layout === 'list';
242
243
  const block = doc.createElement('section');
243
244
  block.dataset.editorRenderingSection = section.id;
244
245
  block.style.cssText = [
245
246
  'margin:0 0 10px',
246
- 'padding:8px',
247
+ `padding:${isListLayout ? '6px' : '8px'}`,
247
248
  'border:1px solid var(--fps-editor-border)',
248
249
  'border-radius:3px',
249
250
  'background:var(--fps-editor-panel-soft)',
@@ -266,19 +267,38 @@ function createRenderingSectionBlock(doc, section) {
266
267
  header.appendChild(createBadge(doc, `${section.systems.length}`, { compact: true }));
267
268
  block.appendChild(header);
268
269
  const list = doc.createElement('div');
269
- list.style.cssText = 'display:flex;flex-direction:column;gap:8px';
270
+ list.style.cssText = [
271
+ 'display:flex',
272
+ 'flex-direction:column',
273
+ `gap:${isListLayout ? '0' : '8px'}`,
274
+ ...(isListLayout ? [
275
+ 'border:1px solid var(--fps-editor-border)',
276
+ 'border-radius:3px',
277
+ 'overflow:hidden',
278
+ 'background:rgba(0,0,0,0.08)',
279
+ ] : []),
280
+ ].join(';');
270
281
  for (const system of section.systems) {
271
- list.appendChild(createRenderingSystemBlock(doc, section.id, system));
282
+ list.appendChild(createRenderingSystemBlock(doc, section.id, system, section.layout));
272
283
  }
273
284
  block.appendChild(list);
274
285
  return block;
275
286
  }
276
- function createRenderingSystemBlock(doc, sectionId, system) {
287
+ function createRenderingSystemBlock(doc, sectionId, system, layout = 'cards') {
288
+ const isListLayout = layout === 'list';
277
289
  const block = createListItemBlock(doc);
278
290
  block.dataset.editorRenderingSystem = system.id;
279
291
  block.dataset.editorRenderingSystemKind = system.kind;
292
+ if (isListLayout) {
293
+ block.style.margin = '0';
294
+ block.style.border = '0';
295
+ block.style.borderRadius = '0';
296
+ block.style.borderBottom = '1px solid var(--fps-editor-border)';
297
+ block.style.background = 'transparent';
298
+ block.style.padding = '8px';
299
+ }
280
300
  const header = doc.createElement('div');
281
- header.style.cssText = 'display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin:0 0 8px';
301
+ header.style.cssText = `display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin:0 0 ${isListLayout ? '6px' : '8px'}`;
282
302
  const title = doc.createElement('div');
283
303
  title.style.cssText = 'min-width:0';
284
304
  const label = doc.createElement('div');
@@ -303,7 +323,14 @@ function createRenderingSystemBlock(doc, sectionId, system) {
303
323
  header.appendChild(badges);
304
324
  block.appendChild(header);
305
325
  const propertyGrid = doc.createElement('div');
306
- propertyGrid.style.cssText = 'display:flex;flex-direction:column;gap:6px';
326
+ propertyGrid.style.cssText = [
327
+ 'display:flex',
328
+ 'flex-direction:column',
329
+ `gap:${isListLayout ? '5px' : '6px'}`,
330
+ ...(isListLayout ? [
331
+ 'padding-left:0',
332
+ ] : []),
333
+ ].join(';');
307
334
  for (const property of system.properties) {
308
335
  propertyGrid.appendChild(createRenderingPropertyRow(doc, sectionId, system.id, property, system.readOnly === true));
309
336
  }