term_buffer_triangle/
term-buffer-triangle.rs

1use glint::TermBuffer;
2
3enum Direction {
4    Grow,
5    Shrink,
6}
7
8const MIN: usize = 1;
9const MAX: usize = 30;
10
11struct State(usize, Direction);
12
13impl State {
14    fn update(&mut self) -> usize {
15        match self.1 {
16            Direction::Grow => {
17                if self.0 >= MAX {
18                    self.0 -= 1;
19                    self.1 = Direction::Shrink
20                } else {
21                    self.0 += 1;
22                }
23            }
24            Direction::Shrink => {
25                if self.0 <= MIN {
26                    self.0 = 1;
27                    self.1 = Direction::Grow
28                } else {
29                    self.0 -= 1;
30                }
31            }
32        }
33        self.0
34    }
35}
36
37pub fn main() {
38    let mut state = State(0, Direction::Grow);
39    let mut buf = TermBuffer::default();
40
41    loop {
42        let count = state.update();
43        // let count = MAX;
44
45        for i in 0..count {
46            let line = format!("|{}\\", "*".repeat(i));
47            buf.push_line(line);
48        }
49        buf.push_line(format!(" {}", "‾".repeat(count - 1)));
50
51        buf.render_frame();
52        buf.flush();
53        // x
54        std::thread::sleep(std::time::Duration::from_millis(15));
55    }
56}