增加发现渲染小兵异常时的自修复

This commit is contained in:
wuwenbo 2026-06-05 19:26:16 +08:00
parent ff13d2a466
commit 095c653b33
2 changed files with 43 additions and 0 deletions

View File

@ -1345,6 +1345,7 @@ namespace Logic.Action
AppendDataOnlyUnitsLog(sb, mapData, mapRenderer);
LogSystem.LogError(sb.ToString());
mapRenderer.RepairUnitRenderersToData(mapData, _sharedRendererOnlyUnitIds, _sharedDataOnlyUnitIds);
}
private static void AppendPreviousActionsLog(StringBuilder sb, MapData mapData)

View File

@ -452,6 +452,48 @@ namespace TH1Renderer
}
}
}
public void RepairUnitRenderersToData(MapData mapData, List<uint> rendererOnlyUnitIds, List<uint> dataOnlyUnitIds)
{
if (mapData != Main.MapData || mapData?.UnitMap == null || ROUnitMap == null) return;
if (PresentationManager.Busy) return;
if (rendererOnlyUnitIds != null)
{
foreach (var unitId in rendererOnlyUnitIds)
{
if (!ROUnitMap.TryGetValue(unitId, out var orphanRenderer)) continue;
if (orphanRenderer != null)
orphanRenderer.Die();
else
ROUnitMap.Remove(unitId);
}
}
if (dataOnlyUnitIds != null)
{
foreach (var unitId in dataOnlyUnitIds)
{
if (!mapData.UnitMap.GetUnitDataByUnitId(unitId, out var unitData) || unitData == null) continue;
if (ROUnitMap.TryGetValue(unitId, out var existingRenderer))
{
if (existingRenderer != null && existingRenderer.IsValid) continue;
if (existingRenderer != null)
existingRenderer.Die();
else
ROUnitMap.Remove(unitId);
}
var unitRenderer = new UnitRenderer(_unitPrefab, _unitRenderMap, unitData.Id);
if (!unitRenderer.IsValid) continue;
ROUnitMap[unitData.Id] = unitRenderer;
unitRenderer.InstantUpdateUnit(true);
}
}
if (SelectUnitData != null && !mapData.UnitMap.GetUnitDataByUnitId(SelectUnitData.Id, out _))
SelectUnitData = null;
}
//当projectileMap出现新的对象时新建对象
public void RenderUpdateProjectileMap()