From e91a4a7ed0a55e9406623d1649cc432369bc0834 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Mon, 21 Sep 2026 10:58:30 +0800 Subject: feat(desktop): 民居正面完整化与图集足迹 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增屋脊/檐口/木构粉墙/格窗/木门五个地块图块,可进屋民居以门为锚点绘制四宽三高完整立面(黛瓦正脊、檐口层次、木构白墙、格窗与木门);新增 planFootprint 供生成阻挡判定,村民不会刷在建筑图块上。 --- src/LivingVillage.Desktop.Tests/DesktopTests.fs | 2 +- src/LivingVillage.Desktop.Tests/PrototypeTests.fs | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'src/LivingVillage.Desktop.Tests') 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 @@ -290,6 +290,20 @@ type PrototypeTests () = Assert.IsTrue(first.Props |> List.exists (fun prop -> prop.Kind = VillageArt.Bridge)) Assert.AreEqual(4, first.Interior.Elements.Length) + [] + 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(19, footprint.Count) + [] member _.FacingUsesTheActualMovementOrTargetVector () = Assert.AreEqual(VillageArt.EastFacing, VillageArt.directionFromVector { X = 1.0f; Y = 0.1f }) -- cgit v1.2.3