use std::io::{Read, Seek, Write};
use crate::chunks::animation::M2AnimationBlock;
use crate::error::Result;
use crate::version::M2Version;
#[derive(Debug, Default, Clone)]
pub struct M2TransparencyAnimation {
pub alpha: M2AnimationBlock<f32>,
}
impl M2TransparencyAnimation {
pub fn parse<R: Read + Seek>(reader: &mut R) -> Result<Self> {
let alpha = M2AnimationBlock::parse(reader)?;
Ok(Self { alpha })
}
pub fn write<W: Write>(&self, writer: &mut W) -> Result<()> {
self.alpha.write(writer)?;
Ok(())
}
pub fn convert(&self, _target_version: M2Version) -> Self {
self.clone()
}
pub fn new() -> Self {
Self::default()
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::io::Cursor;
#[test]
fn test_transparency_animation_parse_write() {
let mut data = Vec::new();
data.extend_from_slice(&1u16.to_le_bytes()); data.extend_from_slice(&(-1i16).to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes());
let mut cursor = Cursor::new(data);
let trans_anim = M2TransparencyAnimation::parse(&mut cursor).unwrap();
let mut output = Vec::new();
trans_anim.write(&mut output).unwrap();
assert_eq!(output.len(), cursor.get_ref().len());
}
}