Exemple #1
0
 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);
 }
Exemple #2
0
            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);
                    }
                }
            }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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);
            }
        }