diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 21 | ||||
| -rw-r--r-- | src/view.rs | 26 | 
2 files changed, 26 insertions, 21 deletions
| diff --git a/src/main.rs b/src/main.rs index 81583b8..2e8ca3e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,30 +31,37 @@ fn init() -> pancurses::Window {  fn main() {      let main = init(); -      let mut map = Map::new();      let mut view = View::new(main.get_max_yx(), &map.window); -    let cursor = Character::new('X', 3, Location{x:150,y:150}); -    map.fill(); +    let mut cursor = Character::new('X', 3, Location{x:150,y:150}); +      let list = List::new(map.impassable.to_vec()); -    list.draw(&map.window); -    cursor.draw(&map.window);      let paused = false;      loop{          match main.getch() { -            Some(Input::Character(c)) => break, +            Some(Input::Character(c)) => { +                match c { +                    'h' => cursor.location.y -= 1, +                    'l' => cursor.location.y += 1, +                    'k' => cursor.location.x -= 1, +                    'j' => cursor.location.x += 1, +                    'q' => break, +                    _ => (), +                } +            },              _ => ()          }          if !paused {              list.action();          } +          map.fill();          list.draw(&map.window);          cursor.draw(&map.window); -        view.center(cursor, map.window.get_max_yx()); +        view.center(cursor, &map.window);      }  	endwin(); diff --git a/src/view.rs b/src/view.rs index 51a052b..acd4807 100644 --- a/src/view.rs +++ b/src/view.rs @@ -12,7 +12,7 @@ pub struct View{  impl View{      pub fn new((x,y) : (i32, i32), map_window : &pancurses::Window) -> View { -        let window = map_window.derwin(x,y,0,0).expect("help"); +        let window = map_window.derwin(x,y,0,0).expect("Cannot create derwin.");          View{              width : 	    x,              height : 	    y, @@ -22,40 +22,38 @@ impl View{          }      } -    pub fn center(&mut self, character : Character, (hh, ww) : (i32,i32)) { -        let mut rr = self.row; -        let mut cc = self.col; +    pub fn center(&mut self, character : Character, map_window : &pancurses::Window) {          let r = character.location.x - self.height/2;          let c = character.location.y - self.width/2; + +        let (hh, ww) = map_window.get_max_yx();          if c + self.width >= ww {              let delta = ww - (c + self.width); -            cc = c + delta; +            self.col = c + delta;          }          else { -            cc = c; +            self.col = c;          }          if r + self.height >= hh {              let delta = hh - (r + self.height); -            rr = r + delta; +            self.row = r + delta;          }          else { -            rr = r; +            self.row = r;          }          if r < 0 { -            rr = 0; +            self.row = 0;          }          if c < 0 { -            cc = 0; +            self.col = 0;          } -        self.window.refresh(); -        self.window.mv(rr, cc); -        self.row = rr; -        self.col = cc; +        self.window.mvderwin(self.row, self.col); +        map_window.touch();          self.window.refresh();      }  } | 
