bevy_ratatui_camera 0.11.0

A bevy plugin for rendering your bevy app to the terminal using ratatui.
Documentation
use image::DynamicImage;
use ratatui::widgets::Widget;
use ratatui::{prelude::*, widgets::WidgetRef};
use ratatui_image::{
    FilterType, Resize,
    picker::{Picker, ProtocolType},
};

pub struct RatatuiCameraWidgetHalfblocks<'a> {
    camera_image: &'a DynamicImage,
}

impl<'a> RatatuiCameraWidgetHalfblocks<'a> {
    pub fn new(camera_image: &'a DynamicImage) -> Self {
        Self { camera_image }
    }
}

impl WidgetRef for RatatuiCameraWidgetHalfblocks<'_> {
    fn render_ref(&self, area: Rect, buf: &mut Buffer) {
        let mut picker = Picker::from_fontsize((1, 2));
        picker.set_protocol_type(ProtocolType::Halfblocks);

        let camera_image = self.camera_image.resize(
            area.width as u32,
            area.height as u32 * 2,
            FilterType::Nearest,
        );

        let render_area = Rect {
            x: area.x + area.width.saturating_sub(camera_image.width() as u16) / 2,
            y: area.y + (area.height * 2).saturating_sub(camera_image.height() as u16) / 4,
            ..area
        };

        let mut image_as_halfblocks = picker
            .new_protocol(camera_image, render_area, Resize::Fit(None))
            .unwrap();

        ratatui_image::Image::new(&mut image_as_halfblocks).render(render_area, buf);
    }
}