use ra2_pal::Palette;
use ra2_types::{Ra2Error, Rgba, RgbaImage};
#[derive(Clone, Debug, Default)]
pub struct ShpFrame {
pub x: u16, pub y: u16, pub width: u16, pub height: u16, pub flags: u8, pub reserved1: [u8; 3], pub color: u32, pub reserved2: [u8; 4], pub offset: u32, pub buffer: Vec<u8>,
}
impl ShpFrame {
pub fn render(&self, palette: &Palette, width: u32, depth: u32) -> Result<RgbaImage, Ra2Error> {
let mut image = RgbaImage::new(width, depth);
let mut index = 0;
for dy in 0..self.height {
for dx in 0..self.width {
let pixel = image.get_pixel_mut((self.x + dx) as u32, (self.y + dy) as u32);
let color = self.buffer[index];
if color == 0 {
*pixel = Rgba([0, 0, 0, 0]);
}
else {
*pixel = palette.get_color(color)?.into();
}
index += 1;
}
}
Ok(image)
}
}