mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-03-19 08:21:22 +00:00
58 lines
1.5 KiB
C#
58 lines
1.5 KiB
C#
|
using FSO.Files.RC;
|
|||
|
using Microsoft.Xna.Framework.Graphics;
|
|||
|
using System.IO;
|
|||
|
using System.IO.Compression;
|
|||
|
|
|||
|
namespace FSO.Files.Formats.IFF.Chunks
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Iff chunk wrapper for an FSOM file.
|
|||
|
/// </summary>
|
|||
|
public class FSOM : IffChunk
|
|||
|
{
|
|||
|
private byte[] data;
|
|||
|
private DGRP3DMesh Cached;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Reads a BMP chunk from a stream.
|
|||
|
/// </summary>
|
|||
|
/// <param name="iff">An Iff instance.</param>
|
|||
|
/// <param name="stream">A Stream object holding a BMP chunk.</param>
|
|||
|
public override void Read(IffFile iff, Stream stream)
|
|||
|
{
|
|||
|
data = new byte[stream.Length];
|
|||
|
stream.Read(data, 0, (int)stream.Length);
|
|||
|
}
|
|||
|
|
|||
|
public override bool Write(IffFile iff, Stream stream)
|
|||
|
{
|
|||
|
if (data == null)
|
|||
|
{
|
|||
|
using (var cstream = new GZipStream(stream, CompressionMode.Compress))
|
|||
|
Cached.Save(cstream);
|
|||
|
} else
|
|||
|
{
|
|||
|
stream.Write(data, 0, data.Length);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public DGRP3DMesh Get(DGRP dgrp, GraphicsDevice device)
|
|||
|
{
|
|||
|
if (Cached == null) {
|
|||
|
using (var stream = new MemoryStream(data)) {
|
|||
|
Cached = new DGRP3DMesh(dgrp, stream, device);
|
|||
|
}
|
|||
|
}
|
|||
|
data = null;
|
|||
|
return Cached;
|
|||
|
}
|
|||
|
|
|||
|
public void SetMesh(DGRP3DMesh mesh)
|
|||
|
{
|
|||
|
Cached = mesh;
|
|||
|
data = null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|