示例#1
0
        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);
        }
示例#2
0
 public ConvertedExteriorPathgrid(TES3Lib.Records.PGRD pathGrid, TES4Lib.Subrecords.PGRD.PGRI interCellConnections)
 {
     PathGrid             = pathGrid;
     InterCellConnections = interCellConnections;
 }