logs + events refactor

This commit is contained in:
Llywelwyn 2023-07-10 13:09:01 +01:00
parent 4f899d329e
commit c10eda695a
7 changed files with 85 additions and 4 deletions

43
src/gamelog/events.rs Normal file
View file

@ -0,0 +1,43 @@
use std::collections::HashMap;
use std::sync::Mutex;
lazy_static! {
static ref EVENTS: Mutex<HashMap<String, i32>> = Mutex::new(HashMap::new());
}
pub fn clear_events() {
EVENTS.lock().unwrap().clear();
}
pub fn record_event<T: ToString>(event: T, n: i32) {
let event_name = event.to_string();
let mut events_lock = EVENTS.lock();
let mut events = events_lock.as_mut().unwrap();
if let Some(e) = events.get_mut(&event_name) {
*e += n;
} else {
events.insert(event_name, n);
}
}
pub fn get_event_count<T: ToString>(event: T) -> i32 {
let event_name = event.to_string();
let events_lock = EVENTS.lock();
let events = events_lock.unwrap();
if let Some(e) = events.get(&event_name) {
*e
} else {
0
}
}
pub fn clone_events() -> HashMap<String, i32> {
EVENTS.lock().unwrap().clone()
}
pub fn load_events(events: HashMap<String, i32>) {
EVENTS.lock().unwrap().clear();
events.iter().for_each(|(k, v)| {
EVENTS.lock().unwrap().insert(k.to_string(), *v);
});
}

View file

@ -32,3 +32,12 @@ pub fn log_display() -> TextBuilder {
return buf;
}
pub fn clone_log() -> Vec<Vec<crate::gamelog::LogFragment>> {
return LOG.lock().unwrap().clone();
}
pub fn restore_log(log: &mut Vec<Vec<crate::gamelog::LogFragment>>) {
LOG.lock().unwrap().clear();
LOG.lock().unwrap().append(log);
}

View file

@ -4,8 +4,12 @@ mod builder;
pub use builder::*;
mod logstore;
use logstore::*;
pub use logstore::{clear_log, log_display};
pub use logstore::{clear_log, clone_log, log_display, restore_log};
mod events;
pub use events::*;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone)]
pub struct LogFragment {
pub colour: RGB,
pub text: String,