diff options
Diffstat (limited to 'src/view.rs')
-rw-r--r-- | src/view.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/view.rs b/src/view.rs new file mode 100644 index 0000000..51a052b --- /dev/null +++ b/src/view.rs @@ -0,0 +1,61 @@ +extern crate pancurses; + +use character::Character; + +pub struct View{ + width: i32, + height: i32, + row: i32, + col: i32, + window: pancurses::Window, +} + +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"); + View{ + width : x, + height : y, + row : 0, + col : 0, + window: window, + } + } + + pub fn center(&mut self, character : Character, (hh, ww) : (i32,i32)) { + let mut rr = self.row; + let mut cc = self.col; + let r = character.location.x - self.height/2; + let c = character.location.y - self.width/2; + + if c + self.width >= ww { + let delta = ww - (c + self.width); + cc = c + delta; + } + else { + cc = c; + } + + if r + self.height >= hh { + let delta = hh - (r + self.height); + rr = r + delta; + } + else { + rr = r; + } + + if r < 0 { + rr = 0; + } + + if c < 0 { + cc = 0; + } + + self.window.refresh(); + self.window.mv(rr, cc); + self.row = rr; + self.col = cc; + self.window.refresh(); + } +} |