use bevy::prelude::*;
#[derive(Component, Clone, Debug)]
#[require(RatatuiCameraStrategy)]
pub struct RatatuiCamera {
pub dimensions: (u32, u32),
}
impl Default for RatatuiCamera {
fn default() -> Self {
Self {
dimensions: (256, 256),
}
}
}
impl RatatuiCamera {
pub fn new(dimensions: (u32, u32)) -> Self {
Self { dimensions }
}
}
#[derive(Component, Debug)]
pub struct RatatuiSubcamera(pub Entity);
#[derive(Component, Clone, Debug, Default)]
pub enum RatatuiCameraStrategy {
#[default]
HalfBlocks,
Luminance(LuminanceConfig),
None,
}
impl RatatuiCameraStrategy {
pub fn luminance_braille() -> Self {
Self::Luminance(LuminanceConfig {
luminance_characters: LuminanceConfig::LUMINANCE_CHARACTERS_BRAILLE.into(),
..default()
})
}
pub fn luminance_misc() -> Self {
Self::Luminance(LuminanceConfig {
luminance_characters: LuminanceConfig::LUMINANCE_CHARACTERS_MISC.into(),
..default()
})
}
pub fn luminance_shading() -> Self {
Self::Luminance(LuminanceConfig {
luminance_characters: LuminanceConfig::LUMINANCE_CHARACTERS_SHADING.into(),
..default()
})
}
}
#[derive(Clone, Debug)]
pub struct LuminanceConfig {
pub luminance_characters: Vec<char>,
pub luminance_scale: f32,
pub mask_color: Option<ratatui::style::Color>,
}
impl LuminanceConfig {
pub const LUMINANCE_CHARACTERS_BRAILLE: &'static [char] =
&[' ', '⠂', '⠒', '⠖', '⠶', '⠷', '⠿', '⡿', '⣿'];
pub const LUMINANCE_CHARACTERS_MISC: &'static [char] =
&[' ', '.', ':', '+', '=', '!', '*', '?', '#', '%', '&', '@'];
pub const LUMINANCE_CHARACTERS_SHADING: &'static [char] = &[' ', '░', '▒', '▓', '█'];
const LUMINANCE_SCALE_DEFAULT: f32 = 10.;
}
impl Default for LuminanceConfig {
fn default() -> Self {
Self {
luminance_characters: LuminanceConfig::LUMINANCE_CHARACTERS_BRAILLE.into(),
luminance_scale: LuminanceConfig::LUMINANCE_SCALE_DEFAULT,
mask_color: None,
}
}
}