Exemplo n.º 1
0
        private void WritePaths(BitWriter writer)
        {
            using var token = new LengthToken(writer);

            token.Allocate();

            writer.Write(PathFormatVersion);

            writer.Write((uint)(PathData?.Length ?? 0));

            if (PathData == default)
            {
                return;
            }

            foreach (var pathData in PathData)
            {
                writer.Write(pathData.Version);

                writer.WriteNiString(pathData.PathName, true, true);

                writer.Write((uint)pathData.Type);

                writer.Write(pathData.UnknownInt);

                pathData.Serialize(writer);

                writer.Write((uint)pathData.Waypoints.Length);

                foreach (var wayPoint in pathData.Waypoints)
                {
                    wayPoint.Serialize(writer);
                }
            }
        }
Exemplo n.º 2
0
        private void SerializeChunk(BitWriter writer, ChunkBase chunkBase)
        {
            if (chunkBase == default)
            {
                return;
            }

            _index++;

            chunkBase.Index = _index;

            using var token = new LengthToken(writer);

            switch (chunkBase)
            {
            case LevelEnvironmentConfig _:
                LevelInfo.EnvironmentPointer.Dispose();
                break;

            case LevelObjects _:
                LevelInfo.ObjectsPointer.Dispose();
                break;

            case LevelSkyConfig _:
                LevelInfo.SkyBoxPointer.Dispose();
                break;
            }

            writer.Write(ChunkHeader);

            writer.Write(chunkBase.ChunkType);

            writer.Write <ushort>(1);

            writer.Write(chunkBase.Index);

            token.Allocate();

            using (new PointerToken(writer))
            {
                while (writer.BaseStream.Position % 16 != 0)
                {
                    writer.Write <byte>(0xCD);
                }
            }

            chunkBase.Serialize(writer);

            while (writer.BaseStream.Position % 16 != 0)
            {
                writer.Write <byte>(0xCD);
            }
        }