diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-21 11:12:52 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-21 11:12:52 +0800 |
| commit | 326575888b9c8edf0ded1dcf1c01f5c78d3eca84 (patch) | |
| tree | 1a31ec020d3db972d2e39b9e20f2d2750249fcdc /src/LivingVillage.Desktop.Tests | |
| parent | 623ee728e939663aa4c98a731dcd0dcfe58bdb90 (diff) | |
| download | living-village-326575888b9c8edf0ded1dcf1c01f5c78d3eca84.tar.gz | |
feat(desktop): 河畔植被与中式道具点缀
图集新增柳树(垂枝两段)、灌木、花丛、芦苇、石凳、灯笼七类图块并经复制规则进构建;场景加入两株垂柳、两丛灌木、两处花丛、水中两簇芦苇、河畔石凳与两盏岸边灯笼,芦苇立于水面、灯笼立于岸道,全部入图集无程序几何占位。
Diffstat (limited to 'src/LivingVillage.Desktop.Tests')
| -rw-r--r-- | src/LivingVillage.Desktop.Tests/PrototypeTests.fs | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/LivingVillage.Desktop.Tests/PrototypeTests.fs b/src/LivingVillage.Desktop.Tests/PrototypeTests.fs index 7959d27..4d698ad 100644 --- a/src/LivingVillage.Desktop.Tests/PrototypeTests.fs +++ b/src/LivingVillage.Desktop.Tests/PrototypeTests.fs @@ -301,8 +301,30 @@ type PrototypeTests () = Assert.IsTrue(footprint.Contains({ X = door.X + dx; Y = door.Y - 2 } : TilePosition), sprintf "missing ridge tile dx=%d" dx) Assert.IsTrue(footprint.Contains({ X = door.X + dx; Y = door.Y - 1 } : TilePosition), sprintf "missing eave tile dx=%d" dx) Assert.IsTrue(footprint.Contains({ X = door.X + dx; Y = door.Y } : TilePosition), sprintf "missing wall tile dx=%d" dx) - // 12 house tiles + 3 bridge + 3 bamboo + 2 garden. - Assert.AreEqual<int>(20, footprint.Count) + // 12 house + 3 bridge + 3 bamboo + 2 garden + 2x2 willow + 2 shrub + 2 flowers + 2 reeds + 1 bench + 2 lanterns. + Assert.AreEqual<int>(33, footprint.Count) + + [<TestMethod>] + member _.VegetationAndRiversidePropsDecorateTheScene () = + let plan = VillageArt.sampleRenderPlan () + let kinds = plan.Props |> List.map (fun prop -> prop.Kind) + let count kind = kinds |> List.filter (fun candidate -> candidate = kind) |> List.length + let grounds = plan.Grounds |> List.map fst |> Set.ofList + + Assert.AreEqual<int>(2, count VillageArt.WillowTree) + Assert.IsTrue(count VillageArt.ShrubPatch >= 2) + Assert.IsTrue(count VillageArt.FlowerBush >= 2) + Assert.AreEqual<int>(2, count VillageArt.ReedCluster) + Assert.AreEqual<int>(1, count VillageArt.StoneBench) + Assert.AreEqual<int>(2, count VillageArt.RiverLantern) + + // Reeds must root in water; lanterns stand on the bank path. + for prop in plan.Props do + let tile = VillageArt.worldTile plan prop.Position + match prop.Kind with + | VillageArt.ReedCluster -> Assert.IsTrue(grounds.Contains(prop.Position), "reeds must sit on water tiles") + | VillageArt.RiverLantern -> Assert.IsTrue(plan.Grounds |> List.contains (prop.Position, VillageArt.StonePath), "lanterns must stand on the bank path") + | _ -> () [<TestMethod>] member _.WaterRippleFramesAreDeterministicAndTwoPhase () = |
