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); } } }
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); } }