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}