internal void GiveMapNodes(MapNodeSection mapNodes) { // Sometimes when the map node count is 0 the index is also 0, // but usually this is accurate. MapNodesIndex = (short)mapNodes.Count; mapNodes.AddRange(MapNodes); }
internal void TakeMapNodes(MapNodeSection entries8) { MapNodes = new List <MapNode>(MapNodeCount); for (int i = 0; i < MapNodeCount; i++) { MapNodes.Add(entries8[MapNodesIndex + i]); } MapNodeCount = -1; foreach (MapNode mapNode in MapNodes) { if (mapNode.SiblingDistances.Count > MapNodes.Count) { mapNode.SiblingDistances.RemoveRange(MapNodes.Count, mapNode.SiblingDistances.Count - MapNodes.Count); } } }
/// <summary> /// Serializes file data to a stream. /// </summary> protected override void Write(BinaryWriterEx bw) { var connectorPoints = new ConnectorPointSection(); var connectorConditions = new ConnectorConditionSection(); foreach (Connector connector in Connectors) { connector.GivePointsAndConds(connectorPoints, connectorConditions); } var mapNodes = new MapNodeSection(Version == NVAVersion.Sekiro ? 2 : 1); foreach (Navmesh navmesh in Navmeshes) { navmesh.GiveMapNodes(mapNodes); } bw.BigEndian = false; bw.WriteASCII("NVMA"); bw.WriteUInt32((uint)Version); bw.ReserveUInt32("FileSize"); bw.WriteInt32(Version == NVAVersion.OldBloodborne ? 8 : 9); Navmeshes.Write(bw, 0); Entries1.Write(bw, 1); Entries2.Write(bw, 2); new Section3().Write(bw, 3); Connectors.Write(bw, 4); connectorPoints.Write(bw, 5); connectorConditions.Write(bw, 6); Entries7.Write(bw, 7); if (Version != NVAVersion.OldBloodborne) { mapNodes.Write(bw, 8); } bw.FillUInt32("FileSize", (uint)bw.Position); }
/// <summary> /// Deserializes file data from a stream. /// </summary> protected override void Read(BinaryReaderEx br) { br.BigEndian = false; br.AssertASCII("NVMA"); Version = br.ReadEnum32 <NVAVersion>(); br.ReadUInt32(); // File size br.AssertInt32(Version == NVAVersion.OldBloodborne ? 8 : 9); // Section count Navmeshes = new NavmeshSection(br); Entries1 = new Section1(br); Entries2 = new Section2(br); new Section3(br); Connectors = new ConnectorSection(br); var connectorPoints = new ConnectorPointSection(br); var connectorConditions = new ConnectorConditionSection(br); Entries7 = new Section7(br); MapNodeSection mapNodes; if (Version == NVAVersion.OldBloodborne) { mapNodes = new MapNodeSection(1); } else { mapNodes = new MapNodeSection(br); } foreach (Navmesh navmesh in Navmeshes) { navmesh.TakeMapNodes(mapNodes); } foreach (Connector connector in Connectors) { connector.TakePointsAndConds(connectorPoints, connectorConditions); } }