diff options
author | Iago Garrido <iago086@gmail.com> | 2019-11-19 23:15:54 +0100 |
---|---|---|
committer | Iago Garrido <iago086@gmail.com> | 2019-11-19 23:15:54 +0100 |
commit | bd87cf7569ace13eb2351fb5fc1a58f01f83f343 (patch) | |
tree | db68666f8375caf1f0e99bf39e45e3c3ca1618cc | |
parent | 138b22aec818572e88e1cc254301dc4a844784b0 (diff) |
print help in notification zone
-rw-r--r-- | src/main.rs | 29 | ||||
-rw-r--r-- | src/state.rs | 50 |
2 files changed, 67 insertions, 12 deletions
diff --git a/src/main.rs b/src/main.rs index 0351ffb..82c08b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,16 +9,33 @@ mod tiling; mod world; use crossterm::cursor; -use crossterm::input::{input, InputEvent, KeyEvent}; -use crossterm::screen::{EnterAlternateScreen, LeaveAlternateScreen, RawScreen}; +use crossterm::input::{ + input, + InputEvent, + KeyEvent +}; +use crossterm::screen::{ + EnterAlternateScreen, + LeaveAlternateScreen, + RawScreen +}; use crossterm::terminal; -use crossterm::{execute, Output}; +use crossterm::execute; use entities::Player; use ignore_result::Ignore; use state::State; use std::env; -use std::io::{stdout, Write}; -use world::{Dungeon, DOWN, LEFT, RIGHT, UP}; +use std::io::{ + stdout, + Write +}; +use world::{ + Dungeon, + DOWN, + LEFT, + RIGHT, + UP +}; fn player_name() -> String { match env::var_os("USER") { @@ -59,7 +76,7 @@ fn main() { match event { InputEvent::Keyboard(KeyEvent::Char('q')) => break, InputEvent::Keyboard(KeyEvent::Char('?')) => { - execute!(stdout(), Output("q: quit")).unwrap() + state.ui_help(); } InputEvent::Keyboard(KeyEvent::Char('j')) => state.move_player(DOWN).ignore(), InputEvent::Keyboard(KeyEvent::Char('k')) => state.move_player(UP).ignore(), diff --git a/src/state.rs b/src/state.rs index d377784..5f86d3a 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,10 +1,30 @@ use crossterm::cursor::MoveTo; -use crossterm::{queue, Output}; -use std::io::{stdout, Write}; +use crossterm::{ + queue, + Output +}; +use std::io::{ + stdout, + Write +}; -use crate::entities::{Character, Entity, Player}; -use crate::tiling::{tile_to_str, TileGrid, TileType}; -use crate::world::{apply_movement, Dungeon, Generatable, Level, Movement}; +use crate::entities::{ + Character, + Entity, + Player +}; +use crate::tiling::{ + tile_to_str, + TileGrid, + TileType +}; +use crate::world::{ + apply_movement, + Dungeon, + Generatable, + Level, + Movement +}; pub struct State { pub player: Character, @@ -75,17 +95,35 @@ impl State { self.render_entity(&self.player) } + fn ui_state_position(&self) -> MoveTo { + MoveTo(0, (self.dungeon.ysize()) as u16) + } + + fn ui_notification_position(&self) -> MoveTo { + MoveTo(0, (self.dungeon.ysize() + 1) as u16) + } + pub fn render_ui(&self) { let mut sout = stdout(); queue!( sout, - MoveTo(0, (self.dungeon.ysize() + 1) as u16), + self.ui_state_position(), Output(self.player.stats()) ) .unwrap(); sout.flush().unwrap(); } + pub fn ui_help(&self) { + let mut sout = stdout(); + queue!( + sout, + self.ui_notification_position(), + Output("quit: q, movement{up(k), down(j), left(h), right(l)}") + ).unwrap(); + sout.flush().unwrap(); + } + pub fn current_level(&self) -> &Level { &self.dungeon.levels[self.level] } |