113 lines
3.5 KiB
Rust
113 lines
3.5 KiB
Rust
use crate::constants::{SIDEBAR_POS_X, SIDEBAR_POS_Y};
|
|
use crate::resources::{Clock, LevelNumber, ShowDebugInfo, Stats};
|
|
use crate::vga_color as vga;
|
|
use bracket_lib::prelude::*;
|
|
use specs::prelude::*;
|
|
|
|
pub fn draw(ecs: &World, ctx: &mut BTerm) {
|
|
// Blue background
|
|
ctx.fill_region(
|
|
Rect {
|
|
x1: SIDEBAR_POS_X,
|
|
x2: SIDEBAR_POS_X + 14,
|
|
y1: SIDEBAR_POS_Y,
|
|
y2: SIDEBAR_POS_Y + 19,
|
|
},
|
|
to_cp437(' '),
|
|
RGB::named(vga::YELLOW_BRIGHT),
|
|
RGB::named(vga::BLUE),
|
|
);
|
|
|
|
// Gray number boxes
|
|
(1..17).step_by(3).for_each(|y| {
|
|
ctx.fill_region(
|
|
Rect {
|
|
x1: SIDEBAR_POS_X + 3,
|
|
x2: SIDEBAR_POS_X + 10,
|
|
y1: SIDEBAR_POS_Y + y,
|
|
y2: SIDEBAR_POS_Y + y + 1,
|
|
},
|
|
to_cp437(' '),
|
|
RGB::named(vga::RED),
|
|
RGB::named(vga::WHITE),
|
|
);
|
|
});
|
|
|
|
// Stats
|
|
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y, "Score");
|
|
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y + 3, "Level");
|
|
ctx.print_centered_at(
|
|
SIDEBAR_POS_X + 6,
|
|
SIDEBAR_POS_Y + 4,
|
|
ecs.read_resource::<LevelNumber>().0,
|
|
);
|
|
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y + 6, "Gems");
|
|
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y + 9, "Whips");
|
|
ctx.print(SIDEBAR_POS_X + 2, SIDEBAR_POS_Y + 12, "Teleports");
|
|
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y + 15, "Keys");
|
|
|
|
let stats = ecs.read_resource::<Stats>();
|
|
ctx.print_centered_at(SIDEBAR_POS_X + 6, SIDEBAR_POS_Y + 1, stats.score);
|
|
ctx.print_centered_at(SIDEBAR_POS_X + 6, SIDEBAR_POS_Y + 7, stats.gems);
|
|
ctx.print_centered_at(SIDEBAR_POS_X + 6, SIDEBAR_POS_Y + 10, stats.whips);
|
|
ctx.print_centered_at(SIDEBAR_POS_X + 6, SIDEBAR_POS_Y + 13, stats.teleports);
|
|
ctx.print_centered_at(SIDEBAR_POS_X + 6, SIDEBAR_POS_Y + 16, stats.keys);
|
|
|
|
// Hotkey list
|
|
ctx.print_color(
|
|
SIDEBAR_POS_X + 3,
|
|
SIDEBAR_POS_Y + 18,
|
|
RGB::named(vga::CYAN_BRIGHT),
|
|
RGB::named(vga::RED),
|
|
"OPTIONS",
|
|
);
|
|
|
|
ctx.fill_region(
|
|
Rect {
|
|
x1: SIDEBAR_POS_X,
|
|
x2: SIDEBAR_POS_X + 14,
|
|
y1: SIDEBAR_POS_Y + 19,
|
|
y2: SIDEBAR_POS_Y + 25,
|
|
},
|
|
to_cp437(' '),
|
|
RGB::named(vga::WHITE),
|
|
RGB::named(vga::BLUE),
|
|
);
|
|
|
|
ctx.fill_region(
|
|
Rect {
|
|
x1: SIDEBAR_POS_X + 3,
|
|
x2: SIDEBAR_POS_X + 4,
|
|
y1: SIDEBAR_POS_Y + 19,
|
|
y2: SIDEBAR_POS_Y + 25,
|
|
},
|
|
to_cp437(' '),
|
|
RGB::named(vga::WHITE_BRIGHT),
|
|
RGB::named(vga::BLUE),
|
|
);
|
|
|
|
ctx.print(SIDEBAR_POS_X + 3, SIDEBAR_POS_Y + 19, "Whip");
|
|
ctx.print(SIDEBAR_POS_X + 3, SIDEBAR_POS_Y + 20, "Teleport");
|
|
ctx.print(SIDEBAR_POS_X + 3, SIDEBAR_POS_Y + 21, "Pause");
|
|
ctx.print(SIDEBAR_POS_X + 3, SIDEBAR_POS_Y + 22, "Quit");
|
|
ctx.print(SIDEBAR_POS_X + 3, SIDEBAR_POS_Y + 23, "Save");
|
|
ctx.print(SIDEBAR_POS_X + 3, SIDEBAR_POS_Y + 24, "Restore");
|
|
|
|
if ecs.read_resource::<ShowDebugInfo>().0 {
|
|
ctx.print_color_right(
|
|
SIDEBAR_POS_X + 14,
|
|
SIDEBAR_POS_Y,
|
|
RGB::named(vga::GREEN_BRIGHT),
|
|
RGB::named(vga::BLACK),
|
|
&format!("{}", ctx.fps),
|
|
);
|
|
|
|
ctx.print_color(
|
|
0,
|
|
0,
|
|
RGB::named(vga::YELLOW_BRIGHT),
|
|
RGB::named(vga::BLACK),
|
|
&format!("{}", ecs.read_resource::<Clock>().ticks),
|
|
);
|
|
}
|
|
}
|