ryot 0.2.2

MMORPG library based on the concepts of open tibia written in rust and bevy.
Documentation
use glam::UVec2;
use serde::Deserialize;

#[derive(Debug, Copy, Clone, Deserialize)]
pub struct SpriteSheetConfig {
    pub sheet_size: UVec2,
    #[serde(default)]
    pub compression_config: Option<CompressionConfig>,
    #[serde(default)]
    pub encoding_config: Option<EncodingConfig>,
}

impl Default for SpriteSheetConfig {
    fn default() -> Self {
        SpriteSheetConfig {
            sheet_size: UVec2::new(384, 384),
            compression_config: None,
            encoding_config: None,
        }
    }
}

impl SpriteSheetConfig {
    pub fn cip_sheet() -> SpriteSheetConfig {
        SpriteSheetConfig {
            sheet_size: UVec2::new(384, 384),
            compression_config: Some(CompressionConfig {
                compressed_header_size: 32,
                content_header_size: 122,
            }),
            encoding_config: Some(EncodingConfig::default()),
        }
    }
}

#[derive(Debug, Copy, Clone, Deserialize)]
pub struct CompressionConfig {
    pub compressed_header_size: usize,
    pub content_header_size: usize,
}

#[derive(Debug, Copy, Clone, Deserialize)]
pub struct EncodingConfig {
    pub vertically_flipped: bool,
    pub reversed_r_b_channels: bool,
}

impl Default for EncodingConfig {
    fn default() -> Self {
        EncodingConfig {
            vertically_flipped: true,
            reversed_r_b_channels: true,
        }
    }
}