From 7a501d15e000e2a14d82f1a823cfbd904849b14f Mon Sep 17 00:00:00 2001 From: wuwenbo Date: Thu, 28 May 2026 16:29:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BC=80=E5=B1=80=E5=BC=80?= =?UTF-8?q?=E9=98=9F=E5=8F=8B=E9=A6=96=E9=83=BD=E8=A7=86=E9=87=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Unity/Assets/Scripts/TH1_Data/PlayerData.cs | 1 + .../Scripts/TH1_Logic/Player/PlayerLogic.cs | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/Unity/Assets/Scripts/TH1_Data/PlayerData.cs b/Unity/Assets/Scripts/TH1_Data/PlayerData.cs index 6a95ee640..a2a9432d4 100644 --- a/Unity/Assets/Scripts/TH1_Data/PlayerData.cs +++ b/Unity/Assets/Scripts/TH1_Data/PlayerData.cs @@ -499,6 +499,7 @@ namespace RuntimeData public void OnTurnStart(MapData map) { Turn++; + Main.PlayerLogic.UpdateAllTeammateCapitalSight(map); //减少1点伟人复活冷却的时间点 for (int i = 0; i < 6; i++) if (giantPenalty[i] > 0) giantPenalty[i]--; diff --git a/Unity/Assets/Scripts/TH1_Logic/Player/PlayerLogic.cs b/Unity/Assets/Scripts/TH1_Logic/Player/PlayerLogic.cs index 997783a48..59909b339 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Player/PlayerLogic.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Player/PlayerLogic.cs @@ -1615,6 +1615,41 @@ namespace Logic return UpdateSight_LogicView(mapData,playerData,mapData.GridMap.GetAroundGridIdList(radius,gridData,true),ViewNextFrame); } + public void UpdateAllTeammateCapitalSight(MapData mapData) + { + if (mapData?.PlayerMap?.PlayerDataList == null) return; + + foreach (var player in mapData.PlayerMap.PlayerDataList) + { + if (player == null || !player.IsSurvival) continue; + + using var pooledGidList = THCollectionPool.GetListHandle(out var gidList); + foreach (var teammate in mapData.PlayerMap.PlayerDataList) + { + if (teammate == null || !teammate.IsSurvival || teammate.Id == player.Id) continue; + if (!CheckIsTeammate(mapData, player, teammate)) continue; + if (!mapData.GetCapitalCityDataByPlayerId(teammate.Id, out var capital)) continue; + if (!mapData.GetGridIdByCityId(capital.Id, out var capitalGid)) continue; + if (player.Sight.CheckIsInSight(capitalGid)) continue; + gidList.Add(capitalGid); + } + + if (gidList.Count > 0) + UpdateSight_LogicView(mapData, player, gidList); + } + } + + private static bool CheckIsTeammate(MapData mapData, PlayerData player, PlayerData targetPlayer) + { + if (mapData?.MapConfig != null && mapData.MapConfig.ArePlayersInSameTeam(player.Id, targetPlayer.Id)) + return true; + + if (player.GetCountryDiplomacyInfo(targetPlayer.Id, out var selfToTarget) && selfToTarget.IsTeammate) + return true; + + return targetPlayer.GetCountryDiplomacyInfo(player.Id, out var targetToSelf) && targetToSelf.IsTeammate; + } + public void DebugGetAllSight(MapData mapData, PlayerData playerData) { using var pooledGidList = THCollectionPool.GetListHandle(out var gidList);