bracket-terminal 0.8.7

ASCII/Codepage 437 terminal emulator with a game loop. Defaults to OpenGL, also support WebGPU (for Vulkan/Metal/WGPU), Curses and Crossterm for output. Part of the bracket-lib family.
Documentation
use bracket_terminal::prelude::{main_loop, BTerm, BTermBuilder, GameState, VirtualKeyCode, RGBA};

const USE_WORKAROUND: bool = false;
fn main() {
    let context = BTermBuilder::simple80x50()
        .with_font("vga8x16.png", 8, 16)
        .with_tile_dimensions(16, 16)
        .with_sparse_console(80, 25, "vga8x16.png")
        .build()
        .unwrap();

    main_loop(
        context,
        Demo {
            show_outer_console: false,
        },
    )
    .unwrap();
}

struct Demo {
    show_outer_console: bool,
}

impl GameState for Demo {
    fn tick(&mut self, ctx: &mut BTerm) {
        ctx.set_active_console(0);
        ctx.cls();
        ctx.print_centered(0, "Main console - overlapping text");

        if self.show_outer_console {
            ctx.set_active_console(1);
            ctx.cls();
            ctx.print_centered(0, "Sparse console");
        }

        match ctx.key {
            Some(VirtualKeyCode::Space) => {
                if self.show_outer_console {
                    ctx.set_active_console(1);
                    ctx.cls();

                    if USE_WORKAROUND {
                        let transparent = RGBA::from_f32(0., 0., 0., 0.);
                        ctx.set(40, 0, transparent, transparent, ' ' as u16);
                    }
                }
                self.show_outer_console = !self.show_outer_console
            }
            _ => (),
        }
    }
}