summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Desktop.Tests
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-21 10:58:30 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-21 10:58:30 +0800
commite91a4a7ed0a55e9406623d1649cc432369bc0834 (patch)
tree40de4d948158146cd1bd4c14a683829055ecd989 /src/LivingVillage.Desktop.Tests
parent9df2da41289f4d0852f86e86eae81ca7f7e7b598 (diff)
downloadliving-village-e91a4a7ed0a55e9406623d1649cc432369bc0834.tar.gz
feat(desktop): 民居正面完整化与图集足迹
新增屋脊/檐口/木构粉墙/格窗/木门五个地块图块,可进屋民居以门为锚点绘制四宽三高完整立面(黛瓦正脊、檐口层次、木构白墙、格窗与木门);新增 planFootprint 供生成阻挡判定,村民不会刷在建筑图块上。
Diffstat (limited to 'src/LivingVillage.Desktop.Tests')
-rw-r--r--src/LivingVillage.Desktop.Tests/DesktopTests.fs2
-rw-r--r--src/LivingVillage.Desktop.Tests/PrototypeTests.fs14
2 files changed, 15 insertions, 1 deletions
diff --git a/src/LivingVillage.Desktop.Tests/DesktopTests.fs b/src/LivingVillage.Desktop.Tests/DesktopTests.fs
index 526d1af..e9713e5 100644
--- a/src/LivingVillage.Desktop.Tests/DesktopTests.fs
+++ b/src/LivingVillage.Desktop.Tests/DesktopTests.fs
@@ -102,7 +102,7 @@ type DesktopTests () =
let renderPlan = VillageArt.sampleRenderPlan ()
let blockedTiles =
(renderPlan.Grounds |> List.map (fun (tile, _) -> VillageArt.worldTile renderPlan tile))
- @ (renderPlan.Props |> List.map (fun prop -> VillageArt.worldTile renderPlan prop.Position))
+ @ VillageArt.planFootprint renderPlan
|> List.map (fun tile -> tile.X, tile.Y)
|> Set.ofList
let sceneTileOf (position: Vec2) : TilePosition =
diff --git a/src/LivingVillage.Desktop.Tests/PrototypeTests.fs b/src/LivingVillage.Desktop.Tests/PrototypeTests.fs
index a403223..06b3250 100644
--- a/src/LivingVillage.Desktop.Tests/PrototypeTests.fs
+++ b/src/LivingVillage.Desktop.Tests/PrototypeTests.fs
@@ -291,6 +291,20 @@ type PrototypeTests () =
Assert.AreEqual<int>(4, first.Interior.Elements.Length)
[<TestMethod>]
+ member _.HouseFacadeCoversRoofEaveAndWalledDoorRow () =
+ let plan = VillageArt.sampleRenderPlan ()
+ let footprint = VillageArt.planFootprint plan |> Set.ofList
+ let door = scene.Homes |> List.head |> fun home -> VillageArt.worldTile plan home.Door
+
+ // The enterable home must present a full facade: ridge, eave, and a walled row with the door.
+ for dx in -2 .. 1 do
+ 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 + 2 bridge + 3 bamboo + 2 garden.
+ Assert.AreEqual<int>(19, footprint.Count)
+
+ [<TestMethod>]
member _.FacingUsesTheActualMovementOrTargetVector () =
Assert.AreEqual<VillageArt.FacingDirection>(VillageArt.EastFacing, VillageArt.directionFromVector { X = 1.0f; Y = 0.1f })
Assert.AreEqual<VillageArt.FacingDirection>(VillageArt.WestFacing, VillageArt.directionFromVector { X = -1.0f; Y = 0.1f })