From d4cb89839d228cffd6f0b5475c48ed876f6bb5fa Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 04:02:55 +0200 Subject: [PATCH] Feat: Add comprehensive UI controls for foliage management (layers, prototypes, and scatter settings) --- src/app/App.tsx | 278 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) diff --git a/src/app/App.tsx b/src/app/App.tsx index df30d7e0..3c92eeb7 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -16194,6 +16194,284 @@ export function App({ store, draftStorage = null, initialStatusMessage }: AppPro + +
+
Bundled Library
+
+ {SORTED_BUNDLED_FOLIAGE_PROTOTYPES.length} prototypes +
+
+ Engine-owned GLB assets are available for authored foliage + layers. This panel does not create placed model instances. +
+
+ +
+
Prototype Library
+
+ {[ + ...SORTED_BUNDLED_FOLIAGE_PROTOTYPES, + ...customFoliagePrototypeList + ].map((prototype) => ( +
+
+
+ + {prototype.label} + + + {prototype.category} ·{" "} + {formatFoliagePrototypeSource(prototype)} + +
+
+
+ {formatFoliagePrototypeLodStatus(prototype)} +
+
+ {formatFoliagePrototypeLodDistanceSummary(prototype)} +
+
+ ))} +
+
+ +
+
Scene Layers
+
+ +
+
+ {foliageLayerList.length === 0 ? ( +
+ No foliage layers are authored for this scene. +
+ ) : ( + foliageLayerList.map((layer) => ( +
+
+ + handleFoliageLayerEnabledChange( + layer, + event.currentTarget.checked + ) + } + /> + + +
+
+ )) + )} +
+
+ + {activeFoliageLayer === null ? null : ( + <> +
+
Active Layer
+ + +
+ Active layer state is editor UI state. The layer data + itself persists with the scene. +
+
+ +
+
Scatter Settings
+
+ {FOLIAGE_LAYER_NUMERIC_INPUTS.map((input) => ( + + ))} +
+
+ +
+
Prototype Mix
+
+ {SORTED_BUNDLED_FOLIAGE_PROTOTYPES.map( + (prototype) => ( + + ) + )} +
+
+ + )} +
+
Clock