From ae3e061ce88c4083965593e5cec4f7dc0487b77d Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Sun, 3 Sep 2023 08:42:10 +0100 Subject: [PATCH] back to curses -- still needs tweaking box drawing glyphs are misaligned, etc --- resources/curses8x16.pdn | Bin 0 -> 48783 bytes resources/curses8x16.png | Bin 0 -> 6450 bytes src/camera.rs | 7 ++++--- src/data/visuals.rs | 4 ++-- src/gui/mod.rs | 21 +++++++++++++-------- src/gui/tooltip.rs | 35 +++++++++++++++++++++++++++++------ src/main.rs | 24 ++++++++++++------------ 7 files changed, 60 insertions(+), 31 deletions(-) create mode 100644 resources/curses8x16.pdn create mode 100644 resources/curses8x16.png diff --git a/resources/curses8x16.pdn b/resources/curses8x16.pdn new file mode 100644 index 0000000000000000000000000000000000000000..02b21124614b4b2d76457578298a393c992ddbb4 GIT binary patch literal 48783 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 D(|m;O literal 0 HcmV?d00001 diff --git a/resources/curses8x16.png b/resources/curses8x16.png new file mode 100644 index 0000000000000000000000000000000000000000..4b830364e88fe431c97cc1a0db9fa5dc5047ee40 GIT binary patch literal 6450 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 G2~7aOrB3?* literal 0 HcmV?d00001 diff --git a/src/camera.rs b/src/camera.rs index 0d24e8a..f08d04b 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -132,13 +132,14 @@ pub fn render_camera(ecs: &World, ctx: &mut Rltk) { ctx.set_active_console(2); crate::gui::draw_lerping_bar( ctx, - (entity_offset_x + x_offset) * 22 + 2, - (entity_offset_y + y_offset) * 20 - 2, - 18, + (entity_offset_x + x_offset) * 16 + 2, + (entity_offset_y + y_offset) * 16 - 1, + 14, pool.hit_points.current, pool.hit_points.max, RGB::named(GREEN), RGB::named(RED), + false, false ); ctx.set_active_console(0); diff --git a/src/data/visuals.rs b/src/data/visuals.rs index a46ee1c..f57449b 100644 --- a/src/data/visuals.rs +++ b/src/data/visuals.rs @@ -1,7 +1,7 @@ // POST-PROCESSING pub const WITH_DARKEN_BY_DISTANCE: bool = true; // If further away tiles should get darkened, instead of a harsh transition to non-visible. -pub const VIEWPORT_W: i32 = 40; -pub const VIEWPORT_H: i32 = 30; +pub const VIEWPORT_W: i32 = 69; +pub const VIEWPORT_H: i32 = 41; pub const BRIGHTEN_FG_COLOUR_BY: i32 = 16; pub const GLOBAL_OFFSET_MIN_CLAMP: f32 = -0.5; diff --git a/src/gui/mod.rs b/src/gui/mod.rs index 19d6849..5359344 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -85,21 +85,24 @@ pub fn draw_lerping_bar( max: i32, full_colour: RGB, empty_colour: RGB, - with_text: bool + with_text: bool, + with_bg: bool ) { let percent = (n as f32) / (max as f32); let fill_width = (percent * (width as f32)) as i32; let bg = empty_colour.lerp(full_colour, percent); - let fg = RGB::named(rltk::BLACK); + let black = RGB::named(rltk::BLACK); for x in 0..width { if x <= fill_width { - ctx.set(sx + x, sy, fg, bg, to_cp437(' ')); + ctx.print_color(sx + x, sy, black, bg, ' '); + } else if with_bg { + ctx.print_color(sx + x, sy, black, black, ' '); } } if with_text { ctx.print(sx - 1, sy, "["); let health = format!("{}/{}", n, max); - ctx.print_color(sx + 1, sy, fg, bg, health); + ctx.print_color(sx + 1, sy, black, bg, health); ctx.print(sx + width, sy, "]"); } } @@ -126,23 +129,25 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { draw_lerping_bar( ctx, 2 * TEXT_FONT_MOD, - 53 * TEXT_FONT_MOD, - 22, + 53, + 22 * TEXT_FONT_MOD, stats.hit_points.current, stats.hit_points.max, RGB::from_u8(0, 255, 0), RGB::from_u8(255, 0, 0), + true, true ); draw_lerping_bar( ctx, 2 * TEXT_FONT_MOD, - 54 * TEXT_FONT_MOD, - 22, + 54, + 22 * TEXT_FONT_MOD, stats.mana.current, stats.mana.max, RGB::named(rltk::BLUE), RGB::named(rltk::BLACK), + true, true ); // Draw AC diff --git a/src/gui/tooltip.rs b/src/gui/tooltip.rs index c34782f..acd1d78 100644 --- a/src/gui/tooltip.rs +++ b/src/gui/tooltip.rs @@ -1,4 +1,16 @@ -use super::{ camera::get_screen_bounds, Attributes, Hidden, Map, Name, Pools, Position, Renderable, Rltk, World, RGB }; +use super::{ + camera::get_screen_bounds, + Attributes, + Hidden, + Map, + Name, + Pools, + Position, + Renderable, + Rltk, + World, + RGB, +}; use crate::TileType; use crate::data::ids::*; use rltk::prelude::*; @@ -34,10 +46,19 @@ impl Tooltip { return (self.lines.len() as i32) + 2i32; } fn render(&self, ctx: &mut Rltk, x: i32, y: i32) { - ctx.draw_box(x, y, self.width() - 1, self.height() - 1, RGB::named(WHITE), RGB::named(BLACK)); + ctx.set_active_console(1); + ctx.draw_box( + x, + y, + self.width() - 1, + self.height() - 1, + RGB::named(WHITE), + RGB::named(BLACK) + ); for (i, s) in self.lines.iter().enumerate() { ctx.print_color(x + 1, y + (i as i32) + 1, s.1, RGB::named(BLACK), &s.0); } + ctx.set_active_console(0); } } @@ -151,13 +172,15 @@ pub fn draw_tooltips(ecs: &World, ctx: &mut Rltk, xy: Option<(i32, i32)>) { if mouse_pos.0 > 35 { // Render to the left arrow = to_cp437('→'); - arrow_x = mouse_pos.0 - 1; + arrow_x = mouse_pos.0 * 2 - 1; } else { // Render to the right arrow = to_cp437('←'); - arrow_x = mouse_pos.0 + 1; + arrow_x = (mouse_pos.0 + 1) * 2; } + ctx.set_active_console(1); ctx.set(arrow_x, arrow_y, white, RGB::named(rltk::BLACK), arrow); + ctx.set_active_console(0); let mut total_height = 0; for t in tooltips.iter() { @@ -171,9 +194,9 @@ pub fn draw_tooltips(ecs: &World, ctx: &mut Rltk, xy: Option<(i32, i32)>) { for t in tooltips.iter() { let x = if mouse_pos.0 > 35 { - mouse_pos.0 - (1 + t.width()) + (mouse_pos.0 * 2) - (1 + t.width()) } else { - mouse_pos.0 + (1 + 1) + (mouse_pos.0 * 2) + 2 + 1 }; t.render(ctx, x, y); y += t.height(); diff --git a/src/main.rs b/src/main.rs index f926608..17a9b31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,20 +3,20 @@ use specs::prelude::*; use specs::saveload::{ SimpleMarker, SimpleMarkerAllocator }; use rltk::prelude::*; -const DISPLAYWIDTH: i32 = 72; -const DISPLAYHEIGHT: i32 = 40; +const DISPLAYWIDTH: i32 = 105; +const DISPLAYHEIGHT: i32 = 56; fn main() -> rltk::BError { // Embedded resources for use in wasm build - const MAIN_22_20_BYTES: &[u8] = include_bytes!("../resources/nagidal22x20_centred.png"); - const TEXT_11_20_BYTES: &[u8] = include_bytes!("../resources/curses11x20.png"); + const CURSES_16_16_BYTES: &[u8] = include_bytes!("../resources/curses16x16.png"); + const CURSES_8_16_BYTES: &[u8] = include_bytes!("../resources/curses8x16.png"); const SINGLE_1_1_BYTES: &[u8] = include_bytes!("../resources/healthbar22x2.png"); rltk::embedding::EMBED .lock() - .add_resource("resources/nagidal22x20_centred.png".to_string(), MAIN_22_20_BYTES); + .add_resource("resources/curses16x16.png".to_string(), CURSES_16_16_BYTES); rltk::embedding::EMBED .lock() - .add_resource("resources/curses11x20.png".to_string(), TEXT_11_20_BYTES); + .add_resource("resources/curses8x16.png".to_string(), CURSES_8_16_BYTES); rltk::embedding::EMBED .lock() .add_resource("resources/healthbar22x2.png".to_string(), SINGLE_1_1_BYTES); @@ -24,14 +24,14 @@ fn main() -> rltk::BError { let mut context = RltkBuilder::new() .with_title("rust-rl") .with_dimensions(DISPLAYWIDTH, DISPLAYHEIGHT) - .with_font("nagidal22x20_centred.png", 22, 20) - .with_font("curses11x20.png", 11, 20) + .with_font("curses16x16.png", 16, 16) + .with_font("curses8x16.png", 8, 16) .with_font("healthbar22x2.png", 1, 1) - .with_tile_dimensions(22, 20) + .with_tile_dimensions(16, 16) .with_gutter(2) - .with_simple_console(DISPLAYWIDTH, DISPLAYHEIGHT, "nagidal22x20_centred.png") - .with_sparse_console(DISPLAYWIDTH * 2, DISPLAYHEIGHT, "curses11x20.png") - .with_sparse_console(DISPLAYWIDTH * 22, DISPLAYHEIGHT * 20, "healthbar22x2.png") + .with_simple_console(DISPLAYWIDTH, DISPLAYHEIGHT, "curses16x16.png") + .with_sparse_console(DISPLAYWIDTH * 2, DISPLAYHEIGHT, "curses8x16.png") + .with_sparse_console(DISPLAYWIDTH * 16, DISPLAYHEIGHT * 16, "healthbar22x2.png") .build()?; if config::CONFIG.visuals.with_scanlines { context.with_post_scanlines(config::CONFIG.visuals.with_screen_burn);