aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/main.rs b/src/main.rs
index f17b9cf..f88a4b1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,23 +1,22 @@
-extern crate crossterm;
-extern crate ignore_result;
-extern crate rand;
-extern crate text_io;
-
mod entities;
mod state;
mod tiling;
mod world;
+use std::env;
+use std::fs::File;
+use std::io::{stdout, Write};
+
use crossterm::cursor;
use crossterm::execute;
use crossterm::input::{input, InputEvent, KeyEvent};
use crossterm::screen::{EnterAlternateScreen, LeaveAlternateScreen, RawScreen};
use crossterm::terminal;
-use entities::Player;
use ignore_result::Ignore;
+use simplelog::*;
+
+use entities::Player;
use state::State;
-use std::env;
-use std::io::{stdout, Write};
use world::{Dungeon, DOWN, LEFT, RIGHT, UP};
fn player_name() -> String {
@@ -28,23 +27,35 @@ fn player_name() -> String {
}
fn main() {
+ // Set up the debug logger only if required.
+ if let Ok(_val) = env::var("DEBUG") {
+ WriteLogger::init(
+ LevelFilter::Debug,
+ Config::default(),
+ File::create("roguerust.log").unwrap(),
+ )
+ .unwrap();
+ }
+
+ // Initialise the terminal, the raw alternate mode allows direct character
+ // seeking and hides the prompt.
let term_size = terminal::size().unwrap();
+ execute!(stdout(), EnterAlternateScreen).unwrap();
+ execute!(stdout(), cursor::Hide).unwrap();
+ let _raw = RawScreen::into_raw_mode();
+ // Initialise state, create the player and dungeon
let mut state = State::new(
Player::new(player_name(), String::from("Warrior"), 30, 10, 10, 20),
Dungeon::new(term_size.0 as usize, (term_size.1 - 2) as usize, 5),
);
-
state.init();
- execute!(stdout(), EnterAlternateScreen).unwrap();
- execute!(stdout(), cursor::Hide).unwrap();
-
- let _raw = RawScreen::into_raw_mode();
-
let input = input();
let mut reader = input.read_sync();
+ // Main loop, dispatches events and calls rendering routines. Don't
+ // add any game logic here.
loop {
state.render_level();
state.render_entities();