Skip to main content

retris/
score.rs

1use cursive::{
2    View,
3    Printer,
4};
5use crate::numbers;
6
7pub struct Score {
8    score: usize,
9    perfect: usize,
10}
11
12impl Default for Score {
13    fn default() -> Self {
14        Self {
15            score: 0,
16            perfect: 40,
17        }
18    }
19}
20
21impl Score {
22    pub fn new() -> Score{
23        Self::default()
24    }
25
26    pub fn add(&mut self, s: usize) {
27        self.score += s
28    }
29
30    pub fn is_gameover(&self) -> bool {
31        self.score >= self.perfect
32    }
33
34    pub fn renew(&mut self) {
35        self.score = 0;
36    }
37
38    fn num2str(&self) -> String {
39        format!("Lines: {} / {}", numbers::padding(self.score, 2), self.perfect)
40    }
41}
42
43impl View for Score {
44    fn draw(&self, printer: &Printer) {
45        printer.print((0, 0), &self.num2str());
46    }
47
48    fn required_size(&mut self, _constraint: cursive::Vec2) -> cursive::Vec2 {
49        let line = self.num2str();
50        cursive::Vec2::new(line.len() + 3, 1)
51    }
52}