bevy_ratatui_camera 0.8.1

A bevy plugin for rendering your bevy app to the terminal using ratatui.
Documentation
use bevy::prelude::Component;
use image::DynamicImage;
use ratatui::widgets::Widget;
use ratatui::{prelude::*, widgets::WidgetRef};

use crate::widget_halfblocks::RatatuiCameraWidgetHalfblocks;
use crate::widget_luminance::RatatuiCameraWidgetLuminance;
use crate::widget_none::RatatuiCameraWidgetNone;
use crate::{RatatuiCameraEdgeDetection, RatatuiCameraStrategy};

/// Ratatui widget that will be inserted into each RatatuiCamera containing entity and updated each
/// frame with the last image rendered by the camera. When drawn in a ratatui buffer, it will use
/// the RatatuiCamera's specified RatatuiCameraStrategy to convert the rendered image to unicode
/// characters, and will draw them in the buffer.
///
#[derive(Component)]
pub struct RatatuiCameraWidget {
    pub camera_image: DynamicImage,
    pub sobel_image: Option<DynamicImage>,
    pub strategy: RatatuiCameraStrategy,
    pub edge_detection: Option<RatatuiCameraEdgeDetection>,
}

impl Widget for &RatatuiCameraWidget {
    fn render(self, area: Rect, buf: &mut Buffer) {
        match self.strategy {
            RatatuiCameraStrategy::HalfBlocks => {
                RatatuiCameraWidgetHalfblocks::new(&self.camera_image).render_ref(area, buf)
            }
            RatatuiCameraStrategy::Luminance(ref strategy_config) => {
                RatatuiCameraWidgetLuminance::new(
                    &self.camera_image,
                    &self.sobel_image,
                    strategy_config,
                    &self.edge_detection,
                )
                .render_ref(area, buf);
            }
            RatatuiCameraStrategy::None => {
                RatatuiCameraWidgetNone::new(
                    &self.camera_image,
                    &self.sobel_image,
                    &self.edge_detection,
                )
                .render_ref(area, buf);
            }
        }
    }
}