use bevy::prelude::*;
use crate::color_support::ColorSupport;
#[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 transparent: bool,
pub color_support: ColorSupport,
}
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,
transparent: true,
color_support: ColorSupport::TrueColor,
}
}
}