1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use std::collections::VecDeque;

use tui::{
    style::{Color, Style},
    widgets::Text,
};

#[derive(Clone, Default, Debug)]
pub struct GameEvents<'a> {
    events: VecDeque<Text<'a>>,
}

impl<'a> GameEvents<'a> {
    pub fn new() -> Self {
        let mut events = VecDeque::with_capacity(5);
        for _ in 0..5 {
            events.push_back(Text::styled("\n", Style::default()));
        }
        Self { events }
    }

    pub fn post_event(&mut self, content: String, color: Color) {
        self.events.pop_front();
        self.events
            .push_back(Text::styled(content, Style::default().fg(color)));
    }

    pub fn events(&self) -> &VecDeque<Text<'a>> {
        &self.events
    }
}