From 40bd942db1ad055a93ad87104921bdd9d96265a8 Mon Sep 17 00:00:00 2001 From: daixiawu Date: Mon, 29 Jun 2026 00:05:29 +0800 Subject: [PATCH] Fix generated mountain resource conflicts --- .../Scripts/TH1_Logic/Map/MapGenerator.cs | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/Unity/Assets/Scripts/TH1_Logic/Map/MapGenerator.cs b/Unity/Assets/Scripts/TH1_Logic/Map/MapGenerator.cs index 09ff2f480..02c6d2c21 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Map/MapGenerator.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Map/MapGenerator.cs @@ -132,6 +132,7 @@ namespace Logic //修复摇篮城市附近的地形保底和资源保底 CivTerrainFeatureCountControl(mapData); + NormalizeGeneratedGridLayerConflicts(mapData); //生成地脉(所有资源确定后执行) GenerateLeyLines(mapData); //TODO 暂时屏蔽地脉生成 @@ -730,7 +731,9 @@ namespace Logic } break; case ResourceType.Animal: - if (tgrid.Vegetation == Vegetation.Trees && tgrid.Resource != ResourceType.Animal) + if (tgrid.Terrain == TerrainType.Land && tgrid.Feature != TerrainFeature.Mountain + && tgrid.Vegetation == Vegetation.Trees + && tgrid.Resource != ResourceType.Animal) { tgrid.Resource = ResourceType.Animal; count++; @@ -889,10 +892,33 @@ namespace Logic if (grid == null) return; grid.Feature = TerrainFeature.Mountain; grid.Vegetation = Vegetation.None; - if (grid.Resource == ResourceType.Farm) + if (grid.Resource is not (ResourceType.None or ResourceType.Metal)) grid.Resource = ResourceType.None; } + private void NormalizeGeneratedGridLayerConflicts(MapData mapData) + { + if (mapData?.GridMap?.GridList == null) return; + + foreach (var grid in mapData.GridMap.GridList) + { + if (grid == null) continue; + + if (grid.Feature == TerrainFeature.Mountain) + { + grid.Vegetation = Vegetation.None; + if (grid.Resource is not (ResourceType.None or ResourceType.Metal or ResourceType.CityCenter + or ResourceType.Tower)) + grid.Resource = ResourceType.None; + } + + if (grid.Resource == ResourceType.Animal + && (grid.Terrain != TerrainType.Land || grid.Feature == TerrainFeature.Mountain + || grid.Vegetation != Vegetation.Trees)) + grid.Resource = ResourceType.None; + } + } + private bool IsStartingGuaranteeProtectedGrid(GridData grid) { if (grid == null) return true;