93 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UniversalEditor.IO;
namespace UniversalEditor.ObjectModels.PMAXPatch.Chunks
{
public class PMAXAdvancedTextureBlockChunk : PMAXPatchChunk
{
private string mvarName = "TEXA";
public override string Name
{
get { return mvarName; }
}
private PMAXAdvancedTextureBlock.PMAXAdvancedTextureBlockCollection mvarAdvancedTextureBlocks = new PMAXAdvancedTextureBlock.PMAXAdvancedTextureBlockCollection();
public PMAXAdvancedTextureBlock.PMAXAdvancedTextureBlockCollection AdvancedTextureBlocks { get { return mvarAdvancedTextureBlocks; } }
public override void LoadInternal(Accessor accessor)
{
Reader reader = new Reader(accessor);
int animatedTextureBlocksCount = reader.ReadInt32();
for (int i = 0; i < animatedTextureBlocksCount; i++)
{
PMAXAdvancedTextureBlock block = new PMAXAdvancedTextureBlock();
block.MaterialID = reader.ReadInt32();
int flags = reader.ReadInt32();
if (flags == 1)
{
block.AlwaysLight = true;
}
else
{
block.AlwaysLight = false;
}
int imageCount = reader.ReadInt32();
for (int j = 0; j < imageCount; j++)
{
PMAXAdvancedTextureBlockImage image = new PMAXAdvancedTextureBlockImage();
image.Timestamp = reader.ReadInt64();
image.FileName = reader.ReadNullTerminatedString();
image.TextureFlags = (UniversalEditor.ObjectModels.Multimedia3D.Model.ModelTextureFlags)reader.ReadInt32();
block.Images.Add(image);
}
mvarAdvancedTextureBlocks.Add(block);
}
}
public override void SaveInternal(Accessor accessor)
{
Writer writer = new Writer(accessor);
writer.WriteInt32(mvarAdvancedTextureBlocks.Count);
foreach (PMAXAdvancedTextureBlock block in mvarAdvancedTextureBlocks)
{
writer.WriteInt32(block.MaterialID);
int flags = 1; // always light the texture
if (block.AlwaysLight)
{
flags = 1;
}
else
{
flags = 0;
}
writer.WriteInt32(flags);
writer.WriteInt32(block.Images.Count);
foreach (PMAXAdvancedTextureBlockImage image in block.Images)
{
writer.WriteInt64(image.Timestamp);
writer.WriteNullTerminatedString(image.FileName);
writer.WriteInt32((int)image.TextureFlags);
}
}
writer.Flush();
}
public override object Clone()
{
PMAXAdvancedTextureBlockChunk clone = new PMAXAdvancedTextureBlockChunk();
foreach (PMAXAdvancedTextureBlock block in mvarAdvancedTextureBlocks)
{
clone.AdvancedTextureBlocks.Add(block.Clone() as PMAXAdvancedTextureBlock);
}
return clone;
}
}
}