|  | @@ -1,57 +1,9 @@
 | 
	
		
			
				|  |  | -extern crate argparse;
 | 
	
		
			
				|  |  | -extern crate pancurses;
 | 
	
		
			
				|  |  | -extern crate yaml_rust;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -use std::fs::{File};
 | 
	
		
			
				|  |  | -use std::io::prelude::*;
 | 
	
		
			
				|  |  | -use std::process::exit;
 | 
	
		
			
				|  |  | -use std::{thread, time};
 | 
	
		
			
				|  |  | -use std::env;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -use argparse::{ArgumentParser, Store};
 | 
	
		
			
				|  |  | -use pancurses::{
 | 
	
		
			
				|  |  | -    initscr, endwin, noecho, has_colors, start_color, init_pair,
 | 
	
		
			
				|  |  | -    Window,
 | 
	
		
			
				|  |  | -    COLOR_GREEN, COLOR_BLACK
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -use yaml_rust::{YamlLoader, YamlEmitter, Yaml};
 | 
	
		
			
				|  |  | +mod config;
 | 
	
		
			
				|  |  | +mod screen;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  fn main() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // Argument handling
 | 
	
		
			
				|  |  | -    let mut difficulty = String::from("");
 | 
	
		
			
				|  |  | -    // TODO can't use ? ?
 | 
	
		
			
				|  |  | -    let foo = env::var("HOME")?.add(".config/");
 | 
	
		
			
				|  |  | -    let config_dir = match env::var("XDG_CONFIG_HOME") {
 | 
	
		
			
				|  |  | -        Ok(dir) => dir,
 | 
	
		
			
				|  |  | -        Err(_) => String::from("foo"),
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    let mut config_location = String::from("~/.config/fallout-terminal.yaml");
 | 
	
		
			
				|  |  | -    let config_help = format!("Config file location, default {}", config_location);
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        let mut ap = ArgumentParser::new();
 | 
	
		
			
				|  |  | -        ap.set_description("A Fallout terminal minigame inspired game.");
 | 
	
		
			
				|  |  | -        ap.refer(&mut difficulty)
 | 
	
		
			
				|  |  | -            .add_option(&["--difficulty"], Store, "The game's difficulty (veryEasy [default], \
 | 
	
		
			
				|  |  | -                                                   easy, average, hard, or veryHard)");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        ap.refer(&mut config_location)
 | 
	
		
			
				|  |  | -            .add_option(
 | 
	
		
			
				|  |  | -                &["--config"],
 | 
	
		
			
				|  |  | -                Store,
 | 
	
		
			
				|  |  | -                config_help.as_str()
 | 
	
		
			
				|  |  | -            );
 | 
	
		
			
				|  |  | -        ap.parse_args_or_exit();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    match difficulty.as_str() {
 | 
	
		
			
				|  |  | -        "" | "veryEasy" => {
 | 
	
		
			
				|  |  | -            println!("veryEasy");
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        _ => println!("Invalid difficulty, see --help")
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      // Config file handling
 | 
	
		
			
				|  |  |      let mut config_file = match File::open(config_location.as_str()) {
 | 
	
		
			
				|  |  |          Ok(config_file) => config_file,
 | 
	
	
		
			
				|  | @@ -77,45 +29,16 @@ fn main() {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    // DEBUG: seeing yaml values
 | 
	
		
			
				|  |  |      let mut out_str = String::new();
 | 
	
		
			
				|  |  |      let mut emitter = YamlEmitter::new(&mut out_str);
 | 
	
		
			
				|  |  |      for x in &config {
 | 
	
		
			
				|  |  |          println!("{:?}", emitter.dump(x).unwrap());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    let window = initscr();
 | 
	
		
			
				|  |  | -    noecho();
 | 
	
		
			
				|  |  | -    window.printw("Hello from Rust");
 | 
	
		
			
				|  |  | -    window_prep();
 | 
	
		
			
				|  |  | -    intro(&window);
 | 
	
		
			
				|  |  | +    let window = screen::init_window();
 | 
	
		
			
				|  |  | +    screen::intro(&window);
 | 
	
		
			
				|  |  |      window.refresh();
 | 
	
		
			
				|  |  |      window.getch();
 | 
	
		
			
				|  |  | -    endwin();
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -fn window_prep () {
 | 
	
		
			
				|  |  | -    if has_colors() {
 | 
	
		
			
				|  |  | -        start_color();
 | 
	
		
			
				|  |  | -        init_pair(1,COLOR_GREEN, COLOR_BLACK);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -fn intro (w: &Window) {
 | 
	
		
			
				|  |  | -    fn slow_print(w: &Window, line: i32, string: String) {
 | 
	
		
			
				|  |  | -        w.mv(line, 0);
 | 
	
		
			
				|  |  | -        for c in string.chars() {
 | 
	
		
			
				|  |  | -            w.addch(c);
 | 
	
		
			
				|  |  | -            w.refresh();
 | 
	
		
			
				|  |  | -            // TODO keyboard skip
 | 
	
		
			
				|  |  | -            thread::sleep(time::Duration::from_millis(20));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    w.clear();
 | 
	
		
			
				|  |  | -    thread::sleep(time::Duration::from_millis(250));
 | 
	
		
			
				|  |  | -    slow_print(&w, 0, String::from("WELCOME TO ROBCO INDUSTRIES (TM) TERMLINK"));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    w.mv(1, 0);
 | 
	
		
			
				|  |  | -    w.refresh();
 | 
	
		
			
				|  |  | -    thread::sleep(time::Duration::from_millis(30));
 | 
	
		
			
				|  |  | +    screen::end_window();
 | 
	
		
			
				|  |  |  }
 |