Example #1
0
        public override void Write(ResourceDataWriter writer, params object[] parameters)
        {
            base.Write(writer, parameters);

            VerticesPointer    = (ulong)(Vertices != null ? Vertices.FilePosition : 0);
            IndicesPointer     = (ulong)(Indices != null ? Indices.FilePosition : 0);
            EdgesPointer       = (ulong)(Edges != null ? Edges.FilePosition : 0);
            PolysPointer       = (ulong)(Polys != null ? Polys.FilePosition : 0);
            SectorTreePointer  = (ulong)(SectorTree != null ? SectorTree.FilePosition : 0);
            PortalsPointer     = (ulong)(PortalsBlock?.FilePosition ?? 0);
            PortalLinksPointer = (ulong)(PortalLinksBlock?.FilePosition ?? 0);


            UpdateCounts();


            writer.Write((uint)ContentFlags);
            writer.Write(VersionUnk1);
            writer.Write(Unused_018h);
            writer.Write(Unused_01Ch);
            writer.Write(Transform);
            writer.Write(AABBSize);
            writer.Write(AABBUnk);
            writer.Write(VerticesPointer);
            writer.Write(Unused_078h);
            writer.Write(Unused_07Ch);
            writer.Write(IndicesPointer);
            writer.Write(EdgesPointer);
            writer.Write(EdgesIndicesCount);
            writer.WriteStruct(AdjAreaIDs);
            writer.Write(PolysPointer);
            writer.Write(SectorTreePointer);
            writer.Write(PortalsPointer);
            writer.Write(PortalLinksPointer);
            writer.Write(VerticesCount);
            writer.Write(PolysCount);
            writer.Write(AreaID);
            writer.Write(TotalBytes);
            writer.Write(PointsCount);
            writer.Write(PortalsCount);
            writer.Write(PortalLinksCount);
            writer.Write(Unused_154h);
            writer.Write(Unused_158h);
            writer.Write(Unused_15Ch);
            writer.Write(VersionUnk2);
            writer.Write(Unused_164h);
            writer.Write(Unused_168h);
            writer.Write(Unused_16Ch);
        }
Example #2
0
        public override void Write(ResourceDataWriter writer, params object[] parameters)
        {
            DataPointer     = (ulong)(Data != null ? Data.FilePosition : 0);
            SubTree1Pointer = (ulong)(SubTree1 != null ? SubTree1.FilePosition : 0);
            SubTree2Pointer = (ulong)(SubTree2 != null ? SubTree2.FilePosition : 0);
            SubTree3Pointer = (ulong)(SubTree3 != null ? SubTree3.FilePosition : 0);
            SubTree4Pointer = (ulong)(SubTree4 != null ? SubTree4.FilePosition : 0);

            writer.Write(AABBMin);
            writer.Write(AABBMax);
            writer.WriteStruct(CellAABB);
            writer.Write(DataPointer);
            writer.Write(SubTree1Pointer);
            writer.Write(SubTree2Pointer);
            writer.Write(SubTree3Pointer);
            writer.Write(SubTree4Pointer);
            writer.Write(Unused_54h);
            writer.Write(Unused_58h);
            writer.Write(Unused_5Ch);
        }
Example #3
0
        public override void Write(ResourceDataWriter writer, params object[] parameters)
        {
            base.Write(writer, parameters);

            VerticesPointer    = (ulong)(Vertices != null ? Vertices.FilePosition : 0);
            IndicesPointer     = (ulong)(Indices != null ? Indices.FilePosition : 0);
            EdgesPointer       = (ulong)(Edges != null ? Edges.FilePosition : 0);
            PolysPointer       = (ulong)(Polys != null ? Polys.FilePosition : 0);
            SectorTreePointer  = (ulong)(SectorTree != null ? SectorTree.FilePosition : 0);
            PortalsPointer     = (ulong)(PortalsBlock?.FilePosition ?? 0);
            PortalLinksPointer = (ulong)(PortalLinksBlock?.FilePosition ?? 0);



            //uint totbytes = 0;
            //Stack<NavMeshSector> sectorstack = new Stack<NavMeshSector>();
            //if (SectorTree != null) sectorstack.Push(SectorTree);
            //while (sectorstack.Count > 0)
            //{
            //    var sector = sectorstack.Pop();
            //    if (sector.SubTree1 != null) sectorstack.Push(sector.SubTree1);
            //    if (sector.SubTree2 != null) sectorstack.Push(sector.SubTree2);
            //    if (sector.SubTree3 != null) sectorstack.Push(sector.SubTree3);
            //    if (sector.SubTree4 != null) sectorstack.Push(sector.SubTree4);
            //    if (sector.Data != null)
            //    {
            //        var sdata = sector.Data;
            //        totbytes += (uint)(sdata.PolyIDsBlock?.BlockLength ?? 0);
            //        totbytes += (uint)(sdata.PointsBlock?.BlockLength ?? 0);
            //    }
            //}
            //totbytes += PadSize(VerticesCount * (uint)Vertices.ItemSize);
            //totbytes += PadSize(EdgesIndicesCount * (uint)Indices.ItemSize);
            //totbytes += PadSize(EdgesIndicesCount * (uint)Edges.ItemSize);
            //totbytes += PadSize(PolysCount * (uint)Polys.ItemSize);
            ////totbytes += (uint)BlockLength;
            //totbytes += (uint)Vertices.ListParts.BlockLength;//Vertices.ListPartsCount * 16;
            //totbytes += (uint)Indices.ListParts.BlockLength;//Indices.ListPartsCount * 16;
            //totbytes += (uint)Edges.ListParts.BlockLength;//Edges.ListPartsCount * 16;
            //totbytes += (uint)Polys.ListParts.BlockLength;//Polys.ListPartsCount * 16;
            //totbytes += (uint)(PortalsBlock?.BlockLength ?? 0);//PortalsCount * 28;
            //totbytes += (uint)(PortalLinksBlock?.BlockLength ?? 0);//PortalLinksCount * 2;
            //int remaining = ((int)TotalBytes) - ((int)totbytes);
            //if (totbytes != TotalBytes)
            //{ }


            writer.Write((uint)ContentFlags);
            writer.Write(VersionUnk1);
            writer.Write(Unused_018h);
            writer.Write(Unused_01Ch);
            writer.Write(Transform);
            writer.Write(AABBSize);
            writer.Write(AABBUnk);
            writer.Write(VerticesPointer);
            writer.Write(Unused_078h);
            writer.Write(Unused_07Ch);
            writer.Write(IndicesPointer);
            writer.Write(EdgesPointer);
            writer.Write(EdgesIndicesCount);
            writer.WriteStruct(AdjAreaIDs);
            writer.Write(PolysPointer);
            writer.Write(SectorTreePointer);
            writer.Write(PortalsPointer);
            writer.Write(PortalLinksPointer);
            writer.Write(VerticesCount);
            writer.Write(PolysCount);
            writer.Write(AreaID);
            writer.Write(TotalBytes);
            writer.Write(PointsCount);
            writer.Write(PortalsCount);
            writer.Write(PortalLinksCount);
            writer.Write(Unused_154h);
            writer.Write(Unused_158h);
            writer.Write(Unused_15Ch);
            writer.Write(VersionUnk2);
            writer.Write(Unused_164h);
            writer.Write(Unused_168h);
            writer.Write(Unused_16Ch);
        }