#![warn(clippy::pedantic)]
bracket_terminal::add_wasm_support!();
use bracket_terminal::prelude::*;
struct State {
y: i32,
going_down: bool,
sprite: MultiTileSprite,
nyancat: MultiTileSprite,
}
impl GameState for State {
#[allow(clippy::cast_precision_loss)]
fn tick(&mut self, ctx: &mut BTerm) {
let mut draw_batch = DrawBatch::new();
let col1 = RGB::named(CYAN);
let col2 = RGB::named(YELLOW);
let percent: f32 = self.y as f32 / 50.0;
let fg = col1.lerp(col2, percent);
draw_batch.target(0);
draw_batch.cls();
draw_batch.print_color(
Point::new(1, self.y),
"Hello Bracket World",
ColorPair::new(fg, RGB::named(BLACK)),
);
self.nyancat
.add_to_batch(&mut draw_batch, Point::new(20, self.y));
if self.going_down {
self.y += 1;
if self.y > 48 {
self.going_down = false;
}
} else {
self.y -= 1;
if self.y < 2 {
self.going_down = true;
}
}
draw_batch.target(1);
draw_batch.cls();
draw_batch.draw_double_box(
Rect::with_size(39, 0, 20, 7),
ColorPair::new(RGB::named(WHITE), RGB::named(BLACK)),
);
draw_batch.print_color(
Point::new(40, 1),
&format!("FPS: {}", ctx.fps),
ColorPair::new(RGB::named(YELLOW), RGB::named(BLACK)),
);
draw_batch.print_color(
Point::new(40, 2),
&format!("Frame Time: {} ms", ctx.frame_time_ms),
ColorPair::new(RGB::named(CYAN), RGB::named(BLACK)),
);
self.sprite.add_to_batch(&mut draw_batch, Point::new(40, 3));
draw_batch.submit(0).expect("Batch error");
render_draw_buffer(ctx).expect("Render error");
}
}
bracket_terminal::embedded_resource!(NYAN_CAT, "../resources/nyan.xp");
#[allow(clippy::non_ascii_literal)]
fn main() -> BError {
bracket_terminal::link_resource!(NYAN_CAT, "../resources/nyan.xp");
let context = BTermBuilder::simple80x50()
.with_font("vga8x16.png", 8, 16)
.with_sparse_console_no_bg(80, 25, "vga8x16.png")
.with_title("Bracket Terminal Example - Text Sprites")
.build()?;
let gs = State {
y: 1,
going_down: true,
sprite: MultiTileSprite::from_string_colored(
" ▲ ◄☼► ▼ ",
3,
3,
&[
RGBA::from_f32(0.0, 0.0, 0.0, 1.0),
RGBA::from_f32(0.0, 1.0, 0.0, 1.0),
RGBA::from_f32(0.0, 0.0, 0.0, 1.0),
RGBA::from_f32(0.0, 1.0, 0.0, 1.0),
RGBA::from_f32(1.0, 1.0, 0.0, 1.0),
RGBA::from_f32(0.0, 1.0, 0.0, 1.0),
RGBA::from_f32(0.0, 0.0, 0.0, 1.0),
RGBA::from_f32(0.0, 1.0, 0.0, 1.0),
RGBA::from_f32(0.0, 0.0, 0.0, 1.0),
],
&[RGBA::from_f32(0.0, 0.0, 0.0, 1.0); 9],
),
nyancat: MultiTileSprite::from_xp(&XpFile::from_resource("../resources/nyan.xp")?),
};
main_loop(context, gs)
}