private static TES3Lib.Records.PGRD MergeExteriorPathGrids(List <ConvertedExteriorPathgrid> pathGrids) { var mergedPGRD = new TES3Lib.Records.PGRD() { DATA = new TES3Lib.Subrecords.PGRD.DATA() }; mergedPGRD.DATA.Granularity = pathGrids[0].PathGrid.DATA.Granularity; mergedPGRD.DATA.GridX = pathGrids[0].PathGrid.DATA.GridX; mergedPGRD.DATA.GridY = pathGrids[0].PathGrid.DATA.GridY; var points = new List <TES3Lib.Subrecords.PGRD.PGRP.Point>(); var edges = new List <int>(); int offset = 0; foreach (var subGrid in pathGrids) { if (IsNull(subGrid.PathGrid.PGRC)) { continue; } offset = points.Count; points.AddRange(subGrid.PathGrid.PGRP.Points); edges.AddRange(Array.ConvertAll(subGrid.PathGrid.PGRC.Edges, edge => edge + offset).ToList()); } mergedPGRD.PGRP = new TES3Lib.Subrecords.PGRD.PGRP { Points = points.ToArray() }; mergedPGRD.PGRC = new TES3Lib.Subrecords.PGRD.PGRC { Edges = edges.ToArray() }; mergedPGRD.DATA.Points = (short)points.Count; var cell = ConvertedRecords["CELL"].FirstOrDefault(x => (x.Record as TES3Lib.Records.CELL).DATA.GridX.Equals(mergedPGRD.DATA.GridX) && (x.Record as TES3Lib.Records.CELL).DATA.GridY.Equals(mergedPGRD.DATA.GridY)).Record as TES3Lib.Records.CELL; mergedPGRD.NAME = new TES3Lib.Subrecords.Shared.NAME(); if (!IsNull(cell.NAME) && !cell.NAME.EditorId.Equals("\0")) { mergedPGRD.NAME.EditorId = cell.NAME.EditorId; } else if (!IsNull(cell.RGNN)) { mergedPGRD.NAME.EditorId = cell.RGNN.RegionName; } else { mergedPGRD.NAME.EditorId = "Wilderness\0"; } return(mergedPGRD); }
public ConvertedExteriorPathgrid(TES3Lib.Records.PGRD pathGrid, TES4Lib.Subrecords.PGRD.PGRI interCellConnections) { PathGrid = pathGrid; InterCellConnections = interCellConnections; }