增加发现渲染小兵异常时的自修复
This commit is contained in:
parent
ff13d2a466
commit
095c653b33
@ -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)
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user