From 65f5143d3e01e111afb960451e0741ddb37be240 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Fri, 14 Nov 2025 23:30:05 -0500 Subject: graphics: add text message rendering (and sans ig) --- dungeon/src/lib.rs | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'dungeon/src/lib.rs') diff --git a/dungeon/src/lib.rs b/dungeon/src/lib.rs index a475f95..0c9e055 100644 --- a/dungeon/src/lib.rs +++ b/dungeon/src/lib.rs @@ -5,6 +5,7 @@ pub mod astar; pub mod bsp; pub mod entity; pub mod map; +pub mod msg; pub mod player_input; pub mod pos; @@ -16,10 +17,23 @@ use rand::{ use crate::{ entity::{Entity, Player}, map::Floor, + msg::Message, player_input::PlayerInput, pos::FPos, }; +/// Lets the caller know what has +/// changed in the game state this +/// tick +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum UpdateResult { + /// Default, entities have moved + EntityMovement, + /// Message on screen updated. + /// Contains if a char was added. + MessageUpdated(bool), +} + /// The `Dungeon` type represents the game state of the /// dungeon crawler. #[derive(Debug, Clone)] @@ -27,6 +41,7 @@ pub struct Dungeon { pub floor: Floor, pub player: Player, pub enemies: Vec, + pub msg: Message, seed: u64, rng: SmallRng, } @@ -48,11 +63,13 @@ impl Dungeon { let player = Player::new(floor.player_start()); // TODO: Randomize enemy positions/types let enemies = vec![Entity::zombie(floor.random_walkable_pos(&mut rng))]; + let msg = Message::empty(); Self { floor, player, enemies, + msg, seed, rng, } @@ -91,9 +108,15 @@ impl Dungeon { &mut self.rng } - pub fn update(&mut self, player_input: PlayerInput, delta_time: f32) { - self.act_player(player_input, delta_time); - self.act_non_players(delta_time); + pub fn update(&mut self, player_input: PlayerInput, delta_time: f32) -> UpdateResult { + if self.msg.visible() { + let changed = self.msg.update(player_input); + UpdateResult::MessageUpdated(changed) + } else { + self.act_player(player_input, delta_time); + self.act_non_players(delta_time); + UpdateResult::EntityMovement + } } fn act_player(&mut self, player_input: PlayerInput, delta_time: f32) { -- cgit v1.2.3-freya