Commit Graph

4921 Commits

Author SHA1 Message Date
def955b49a Add function to create flat foliage mask values for terrain 2026-05-02 04:09:30 +02:00
6c734d377a Add validation and normalization for foliage layer IDs 2026-05-02 04:09:23 +02:00
2747665558 Add foliage mask support to terrain structure 2026-05-02 04:09:15 +02:00
81766b7566 feat(test): Add unit tests for foliage layer commands 2026-05-02 04:04:51 +02:00
d8d7877411 Filter bundled foliage prototypes and update UI styling 2026-05-02 04:03:29 +02:00
d4cb89839d Feat: Add comprehensive UI controls for foliage management (layers, prototypes, and scatter settings) 2026-05-02 04:03:15 +02:00
0ed339892a Define numeric inputs and create drafts for foliage layers 2026-05-02 04:02:20 +02:00
fec11884b1 Add sorted list of foliage prototypes 2026-05-02 04:01:57 +02:00
2884ecc1e5 Feat: Implement comprehensive foliage layer management features (creation, renaming, deletion, and property updates) 2026-05-02 04:01:46 +02:00
db52c7fa5e Manage foliage layer selection and draft state 2026-05-02 04:01:11 +02:00
886a21aa9b Implement state and logic for managing foliage layers 2026-05-02 04:01:00 +02:00
ba67e22b47 Add utilities for handling, validating, and formatting foliage layer and prototype data 2026-05-02 04:00:52 +02:00
68e4a0e00c Add foliage layer management commands and types 2026-05-02 04:00:25 +02:00
c9adcd9cd3 Feat: Implement foliage layer management commands (create, delete, update) 2026-05-02 04:00:18 +02:00
796760c00a Add validation for foliage prototypes in scene documents 2026-05-02 03:51:31 +02:00
4a3774a729 Update local draft storage serialization tests to include foliage layers 2026-05-02 03:51:31 +02:00
f2eb126037 Test: Ensure foliage prototypes are cleaned up when deleting a project asset 2026-05-02 03:50:14 +02:00
1c0cc6540e Add serialization tests for foliage migration and bundled prototypes 2026-05-02 03:50:00 +02:00
d96cd1b859 Update serialization tests for new scene versions and foliage support 2026-05-02 03:50:00 +02:00
af7ae7d210 auto-git:
[change] tests/serialization/scene-document-json.test.ts
2026-05-02 03:49:30 +02:00
cdf5158819 auto-git:
[change] tests/domain/create-empty-scene-document.test.ts
2026-05-02 03:49:30 +02:00
304d3ccec1 auto-git:
[add] tests/domain/foliage.test.ts
2026-05-02 03:49:30 +02:00
49d98656a6 auto-git:
[add] tests/domain/bundled-foliage.test.ts
2026-05-02 03:49:30 +02:00
5c2bc9bd94 Support foliage layers in project scene creation and validate layer enabled status 2026-05-02 03:48:07 +02:00
af1f05d46e Improve asset deletion to clean up references to removed foliage prototypes 2026-05-02 03:47:58 +02:00
14d6ed11bd Update resource validation and diagnostics filtering for foliage prototypes 2026-05-02 03:47:58 +02:00
e559174bd9 auto-git:
[change] src/document/scene-document-validation.ts
2026-05-02 03:46:33 +02:00
92107465aa auto-git:
[change] src/document/scene-document-validation.ts
2026-05-02 03:46:21 +02:00
b22bb72884 auto-git:
[change] src/document/scene-document-validation.ts
2026-05-02 03:43:58 +02:00
232c1591a8 auto-git:
[change] src/document/migrate-scene-document.ts
2026-05-02 03:43:58 +02:00
be5e219adb auto-git:
[change] src/document/migrate-scene-document.ts
2026-05-02 03:43:58 +02:00
25c0ce78ec auto-git:
[change] src/document/migrate-scene-document.ts
2026-05-02 03:43:58 +02:00
7944524fcc auto-git:
[change] src/document/migrate-scene-document.ts
2026-05-02 03:43:01 +02:00
9cb8633e8e auto-git:
[change] src/document/migrate-scene-document.ts
2026-05-02 03:42:49 +02:00
26620ab9a2 auto-git:
[change] src/document/migrate-scene-document.ts
2026-05-02 03:42:01 +02:00
70ae4db6ea auto-git:
[change] src/document/scene-document.ts
2026-05-02 03:41:52 +02:00
3001ed1ff1 auto-git:
[add] src/foliage/bundled-foliage-manifest.ts
2026-05-02 03:41:52 +02:00
ee64bc3401 auto-git:
[add] src/foliage/bundled-foliage.ts
2026-05-02 03:41:20 +02:00
0c92f4f4cc auto-git:
[add] src/foliage/foliage.ts
2026-05-02 03:40:13 +02:00
db6db35596 auto-git:
[add] public/foliage/Grass/BlueFescue/BlueFescue_LOD0.glb
 [add] public/foliage/Grass/BlueFescue/BlueFescue_LOD1.glb
 [add] public/foliage/Grass/BlueFescue/BlueFescue_LOD2.glb
 [add] public/foliage/Grass/BlueFescue/BlueFescue_LOD3.glb
 [add] public/foliage/Grass/BroadBlade/BroadBlade_LOD0.glb
 [add] public/foliage/Grass/BroadBlade/BroadBlade_LOD1.glb
 [add] public/foliage/Grass/BroadBlade/BroadBlade_LOD2.glb
 [add] public/foliage/Grass/BroadBlade/BroadBlade_LOD3.glb
 [add] public/foliage/Grass/DryTuft/DryTuft_LOD0.glb
 [add] public/foliage/Grass/DryTuft/DryTuft_LOD1.glb
 [add] public/foliage/Grass/DryTuft/DryTuft_LOD2.glb
 [add] public/foliage/Grass/DryTuft/DryTuft_LOD3.glb
 [add] public/foliage/Grass/Foxtail/Foxtail_LOD0.glb
 [add] public/foliage/Grass/Foxtail/Foxtail_LOD1.glb
 [add] public/foliage/Grass/Foxtail/Foxtail_LOD2.glb
 [add] public/foliage/Grass/Foxtail/Foxtail_LOD3.glb
 [add] public/foliage/Grass/MarshReed/MarshReed_LOD0.glb
 [add] public/foliage/Grass/MarshReed/MarshReed_LOD1.glb
 [add] public/foliage/Grass/MarshReed/MarshReed_LOD2.glb
 [add] public/foliage/Grass/MarshReed/MarshReed_LOD3.glb
 [add] public/foliage/Grass/MeadowSoft/MeadowSoft_LOD0.glb
 [add] public/foliage/Grass/MeadowSoft/MeadowSoft_LOD1.glb
 [add] public/foliage/Grass/MeadowSoft/MeadowSoft_LOD2.glb
 [add] public/foliage/Grass/MeadowSoft/MeadowSoft_LOD3.glb
 [add] public/foliage/Grass/SparseField/SparseField_LOD0.glb
 [add] public/foliage/Grass/SparseField/SparseField_LOD1.glb
 [add] public/foliage/Grass/SparseField/SparseField_LOD2.glb
 [add] public/foliage/Grass/SparseField/SparseField_LOD3.glb
 [add] public/foliage/Grass/Windswept/Windswept_LOD0.glb
 [add] public/foliage/Grass/Windswept/Windswept_LOD1.glb
 [add] public/foliage/Grass/Windswept/Windswept_LOD2.glb
 [add] public/foliage/Grass/Windswept/Windswept_LOD3.glb
 [add] public/foliage/GrassDry/BrittleGrassClump/BrittleGrassClump_LOD0.glb
 [add] public/foliage/GrassDry/BrittleGrassClump/BrittleGrassClump_LOD1.glb
 [add] public/foliage/GrassDry/BrittleGrassClump/BrittleGrassClump_LOD2.glb
 [add] public/foliage/GrassDry/BrittleGrassClump/BrittleGrassClump_LOD3.glb
 [add] public/foliage/GrassDry/BrokenHayPile/BrokenHayPile_LOD0.glb
 [add] public/foliage/GrassDry/BrokenHayPile/BrokenHayPile_LOD1.glb
 [add] public/foliage/GrassDry/BrokenHayPile/BrokenHayPile_LOD2.glb
 [add] public/foliage/GrassDry/BrokenHayPile/BrokenHayPile_LOD3.glb
 [add] public/foliage/GrassDry/CutStubblePatch/CutStubblePatch_LOD0.glb
 [add] public/foliage/GrassDry/CutStubblePatch/CutStubblePatch_LOD1.glb
 [add] public/foliage/GrassDry/CutStubblePatch/CutStubblePatch_LOD2.glb
 [add] public/foliage/GrassDry/CutStubblePatch/CutStubblePatch_LOD3.glb
 [add] public/foliage/GrassDry/DryTuftFan/DryTuftFan_LOD0.glb
 [add] public/foliage/GrassDry/DryTuftFan/DryTuftFan_LOD1.glb
 [add] public/foliage/GrassDry/DryTuftFan/DryTuftFan_LOD2.glb
 [add] public/foliage/GrassDry/DryTuftFan/DryTuftFan_LOD3.glb
 [add] public/foliage/GrassDry/GoldenSparseGrass/GoldenSparseGrass_LOD0.glb
 [add] public/foliage/GrassDry/GoldenSparseGrass/GoldenSparseGrass_LOD1.glb
 [add] public/foliage/GrassDry/GoldenSparseGrass/GoldenSparseGrass_LOD2.glb
 [add] public/foliage/GrassDry/GoldenSparseGrass/GoldenSparseGrass_LOD3.glb
 [add] public/foliage/GrassDry/MownClippings/MownClippings_LOD0.glb
 [add] public/foliage/GrassDry/MownClippings/MownClippings_LOD1.glb
 [add] public/foliage/GrassDry/MownClippings/MownClippings_LOD2.glb
 [add] public/foliage/GrassDry/MownClippings/MownClippings_LOD3.glb
 [add] public/foliage/GrassDry/StrawLitterMat/StrawLitterMat_LOD0.glb
 [add] public/foliage/GrassDry/StrawLitterMat/StrawLitterMat_LOD1.glb
 [add] public/foliage/GrassDry/StrawLitterMat/StrawLitterMat_LOD2.glb
 [add] public/foliage/GrassDry/StrawLitterMat/StrawLitterMat_LOD3.glb
 [add] public/foliage/GrassDry/WheatStubbleRow/WheatStubbleRow_LOD0.glb
 [add] public/foliage/GrassDry/WheatStubbleRow/WheatStubbleRow_LOD1.glb
 [add] public/foliage/GrassDry/WheatStubbleRow/WheatStubbleRow_LOD2.glb
 [add] public/foliage/GrassDry/WheatStubbleRow/WheatStubbleRow_LOD3.glb
 [add] public/foliage/GrassTall/BentWildGrass/BentWildGrass_LOD0.glb
 [add] public/foliage/GrassTall/BentWildGrass/BentWildGrass_LOD1.glb
 [add] public/foliage/GrassTall/BentWildGrass/BentWildGrass_LOD2.glb
 [add] public/foliage/GrassTall/BentWildGrass/BentWildGrass_LOD3.glb
 [add] public/foliage/GrassTall/DryPrairieClump/DryPrairieClump_LOD0.glb
 [add] public/foliage/GrassTall/DryPrairieClump/DryPrairieClump_LOD1.glb
 [add] public/foliage/GrassTall/DryPrairieClump/DryPrairieClump_LOD2.glb
 [add] public/foliage/GrassTall/DryPrairieClump/DryPrairieClump_LOD3.glb
 [add] public/foliage/GrassTall/FeatherGrassClump/FeatherGrassClump_LOD0.glb
 [add] public/foliage/GrassTall/FeatherGrassClump/FeatherGrassClump_LOD1.glb
 [add] public/foliage/GrassTall/FeatherGrassClump/FeatherGrassClump_LOD2.glb
 [add] public/foliage/GrassTall/FeatherGrassClump/FeatherGrassClump_LOD3.glb
 [add] public/foliage/GrassTall/ReedGrassClump/ReedGrassClump_LOD0.glb
 [add] public/foliage/GrassTall/ReedGrassClump/ReedGrassClump_LOD1.glb
 [add] public/foliage/GrassTall/ReedGrassClump/ReedGrassClump_LOD2.glb
 [add] public/foliage/GrassTall/ReedGrassClump/ReedGrassClump_LOD3.glb
 [add] public/foliage/GrassTall/SeedStemClump/SeedStemClump_LOD0.glb
 [add] public/foliage/GrassTall/SeedStemClump/SeedStemClump_LOD1.glb
 [add] public/foliage/GrassTall/SeedStemClump/SeedStemClump_LOD2.glb
 [add] public/foliage/GrassTall/SeedStemClump/SeedStemClump_LOD3.glb
 [add] public/foliage/GrassTall/TallMeadowClump/TallMeadowClump_LOD0.glb
 [add] public/foliage/GrassTall/TallMeadowClump/TallMeadowClump_LOD1.glb
 [add] public/foliage/GrassTall/TallMeadowClump/TallMeadowClump_LOD2.glb
 [add] public/foliage/GrassTall/TallMeadowClump/TallMeadowClump_LOD3.glb
 [add] public/foliage/GrassTall/TuftedRushClump/TuftedRushClump_LOD0.glb
 [add] public/foliage/GrassTall/TuftedRushClump/TuftedRushClump_LOD1.glb
 [add] public/foliage/GrassTall/TuftedRushClump/TuftedRushClump_LOD2.glb
 [add] public/foliage/GrassTall/TuftedRushClump/TuftedRushClump_LOD3.glb
 [add] public/foliage/GrassTall/WildOatClump/WildOatClump_LOD0.glb
 [add] public/foliage/GrassTall/WildOatClump/WildOatClump_LOD1.glb
 [add] public/foliage/GrassTall/WildOatClump/WildOatClump_LOD2.glb
 [add] public/foliage/GrassTall/WildOatClump/WildOatClump_LOD3.glb
 [add] public/foliage/Weed/CloverPatch/CloverPatch_LOD0.glb
 [add] public/foliage/Weed/CloverPatch/CloverPatch_LOD1.glb
 [add] public/foliage/Weed/CloverPatch/CloverPatch_LOD2.glb
 [add] public/foliage/Weed/CloverPatch/CloverPatch_LOD3.glb
 [add] public/foliage/Weed/DandelionRosette/DandelionRosette_LOD0.glb
 [add] public/foliage/Weed/DandelionRosette/DandelionRosette_LOD1.glb
 [add] public/foliage/Weed/DandelionRosette/DandelionRosette_LOD2.glb
 [add] public/foliage/Weed/DandelionRosette/DandelionRosette_LOD3.glb
 [add] public/foliage/Weed/DockWeed/DockWeed_LOD0.glb
 [add] public/foliage/Weed/DockWeed/DockWeed_LOD1.glb
 [add] public/foliage/Weed/DockWeed/DockWeed_LOD2.glb
 [add] public/foliage/Weed/DockWeed/DockWeed_LOD3.glb
 [add] public/foliage/Weed/GroundIvy/GroundIvy_LOD0.glb
 [add] public/foliage/Weed/GroundIvy/GroundIvy_LOD1.glb
 [add] public/foliage/Weed/GroundIvy/GroundIvy_LOD2.glb
 [add] public/foliage/Weed/GroundIvy/GroundIvy_LOD3.glb
 [add] public/foliage/Weed/NettlePatch/NettlePatch_LOD0.glb
 [add] public/foliage/Weed/NettlePatch/NettlePatch_LOD1.glb
 [add] public/foliage/Weed/NettlePatch/NettlePatch_LOD2.glb
 [add] public/foliage/Weed/NettlePatch/NettlePatch_LOD3.glb
 [add] public/foliage/Weed/PlantainCluster/PlantainCluster_LOD0.glb
 [add] public/foliage/Weed/PlantainCluster/PlantainCluster_LOD1.glb
 [add] public/foliage/Weed/PlantainCluster/PlantainCluster_LOD2.glb
 [add] public/foliage/Weed/PlantainCluster/PlantainCluster_LOD3.glb
 [add] public/foliage/Weed/RagweedSprig/RagweedSprig_LOD0.glb
 [add] public/foliage/Weed/RagweedSprig/RagweedSprig_LOD1.glb
 [add] public/foliage/Weed/RagweedSprig/RagweedSprig_LOD2.glb
 [add] public/foliage/Weed/RagweedSprig/RagweedSprig_LOD3.glb
 [add] public/foliage/Weed/ThistleRosette/ThistleRosette_LOD0.glb
 [add] public/foliage/Weed/ThistleRosette/ThistleRosette_LOD1.glb
 [add] public/foliage/Weed/ThistleRosette/ThistleRosette_LOD2.glb
 [add] public/foliage/Weed/ThistleRosette/ThistleRosette_LOD3.glb
 [add] public/foliage/WheatUnderstory/BroadPlantainPatch/BroadPlantainPatch_LOD0.glb
 [add] public/foliage/WheatUnderstory/BroadPlantainPatch/BroadPlantainPatch_LOD1.glb
 [add] public/foliage/WheatUnderstory/BroadPlantainPatch/BroadPlantainPatch_LOD2.glb
 [add] public/foliage/WheatUnderstory/BroadPlantainPatch/BroadPlantainPatch_LOD3.glb
 [add] public/foliage/WheatUnderstory/ChickweedMat/ChickweedMat_LOD0.glb
 [add] public/foliage/WheatUnderstory/ChickweedMat/ChickweedMat_LOD1.glb
 [add] public/foliage/WheatUnderstory/ChickweedMat/ChickweedMat_LOD2.glb
 [add] public/foliage/WheatUnderstory/ChickweedMat/ChickweedMat_LOD3.glb
 [add] public/foliage/WheatUnderstory/FieldWeedSprig/FieldWeedSprig_LOD0.glb
 [add] public/foliage/WheatUnderstory/FieldWeedSprig/FieldWeedSprig_LOD1.glb
 [add] public/foliage/WheatUnderstory/FieldWeedSprig/FieldWeedSprig_LOD2.glb
 [add] public/foliage/WheatUnderstory/FieldWeedSprig/FieldWeedSprig_LOD3.glb
 [add] public/foliage/WheatUnderstory/RedCloverTuft/RedCloverTuft_LOD0.glb
 [add] public/foliage/WheatUnderstory/RedCloverTuft/RedCloverTuft_LOD1.glb
 [add] public/foliage/WheatUnderstory/RedCloverTuft/RedCloverTuft_LOD2.glb
 [add] public/foliage/WheatUnderstory/RedCloverTuft/RedCloverTuft_LOD3.glb
 [add] public/foliage/WheatUnderstory/RibwortPlantain/RibwortPlantain_LOD0.glb
 [add] public/foliage/WheatUnderstory/RibwortPlantain/RibwortPlantain_LOD1.glb
 [add] public/foliage/WheatUnderstory/RibwortPlantain/RibwortPlantain_LOD2.glb
 [add] public/foliage/WheatUnderstory/RibwortPlantain/RibwortPlantain_LOD3.glb
 [add] public/foliage/WheatUnderstory/TinyBlueFlowerClump/TinyBlueFlowerClump_LOD0.glb
 [add] public/foliage/WheatUnderstory/TinyBlueFlowerClump/TinyBlueFlowerClump_LOD1.glb
 [add] public/foliage/WheatUnderstory/TinyBlueFlowerClump/TinyBlueFlowerClump_LOD2.glb
 [add] public/foliage/WheatUnderstory/TinyBlueFlowerClump/TinyBlueFlowerClump_LOD3.glb
 [add] public/foliage/WheatUnderstory/TinyDaisyClump/TinyDaisyClump_LOD0.glb
 [add] public/foliage/WheatUnderstory/TinyDaisyClump/TinyDaisyClump_LOD1.glb
 [add] public/foliage/WheatUnderstory/TinyDaisyClump/TinyDaisyClump_LOD2.glb
 [add] public/foliage/WheatUnderstory/TinyDaisyClump/TinyDaisyClump_LOD3.glb
 [add] public/foliage/WheatUnderstory/WhiteCloverPatch/WhiteCloverPatch_LOD0.glb
 [add] public/foliage/WheatUnderstory/WhiteCloverPatch/WhiteCloverPatch_LOD1.glb
 [add] public/foliage/WheatUnderstory/WhiteCloverPatch/WhiteCloverPatch_LOD2.glb
 [add] public/foliage/WheatUnderstory/WhiteCloverPatch/WhiteCloverPatch_LOD3.glb
2026-05-02 03:38:28 +02:00
905ea1ccfe auto-git:
[change] src/app/App.tsx
2026-05-01 22:11:33 +02:00
c6f12d91d4 auto-git:
[change] src/viewport-three/viewport-host.ts
2026-05-01 22:08:17 +02:00
6361c72dfe auto-git:
[change] tests/serialization/editor-draft-storage.test.ts
2026-05-01 18:55:45 +02:00
b53564423d auto-git:
[change] tests/serialization/editor-draft-storage.test.ts
2026-05-01 18:54:09 +02:00
0558ddfaed auto-git:
[add] tests/serialization/editor-draft-storage.test.ts
2026-05-01 18:54:09 +02:00
99a7f05f4f auto-git:
[add] tests/unit/editor-autosave.test.ts
2026-05-01 18:54:08 +02:00
d38c9b9941 auto-git:
[unlink] tests/unit/editor-autosave.test.ts
2026-05-01 18:52:44 +02:00
dfc1ed2fa9 auto-git:
[change] src/serialization/editor-draft-storage.ts
2026-05-01 18:52:37 +02:00
30aae4f846 auto-git:
[change] src/main.tsx
2026-05-01 18:52:20 +02:00
f69cd4d269 auto-git:
[change] src/app/App.tsx
2026-05-01 18:52:06 +02:00