gsa 0.2.1

Game development library modelled after an imaginary console
Documentation
use crate::{Rgb, TILESET_SIZE, TILE_SIZE};

pub(crate) fn load_tileset(data: &[u8]) -> (Vec<u8>, [Rgb; 256]) {
    let mut options = gif::DecodeOptions::new();
    options.set_color_output(gif::ColorOutput::Indexed);
    let mut decoder = options.read_info(data).unwrap();

    assert_eq!(decoder.width(), (TILESET_SIZE * TILE_SIZE) as u16);
    assert_eq!(decoder.height(), (TILESET_SIZE * TILE_SIZE) as u16);

    decoder.next_frame_info().unwrap();
    let mut tileset = Vec::new();
    tileset.resize(TILESET_SIZE * TILE_SIZE * TILESET_SIZE * TILE_SIZE, 0);
    decoder.read_into_buffer(tileset.as_mut_slice()).unwrap();
    let pal = decoder.palette().unwrap();
    let mut palette = [Rgb { r: 0, g: 0, b: 0 }; 256];
    for i in 0..pal.len() / 3 {
        palette[i] = Rgb {
            r: pal[i * 3 + 2],
            g: pal[i * 3 + 1],
            b: pal[i * 3],
        };
    }
    (tileset, palette)
}