aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIago Garrido <iago086@gmail.com>2019-11-19 23:15:54 +0100
committerIago Garrido <iago086@gmail.com>2019-11-19 23:15:54 +0100
commitbd87cf7569ace13eb2351fb5fc1a58f01f83f343 (patch)
treedb68666f8375caf1f0e99bf39e45e3c3ca1618cc
parent138b22aec818572e88e1cc254301dc4a844784b0 (diff)
print help in notification zone
-rw-r--r--src/main.rs29
-rw-r--r--src/state.rs50
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]
}