From e769071244de0bdfe53c2b570b8cc6629cc5ec6c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 2 Sep 2024 02:08:31 +0200 Subject: scoreboard insert function --- server/src/scoreboard.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'server/src') diff --git a/server/src/scoreboard.rs b/server/src/scoreboard.rs index e7b97b8d..e546f973 100644 --- a/server/src/scoreboard.rs +++ b/server/src/scoreboard.rs @@ -18,7 +18,7 @@ use anyhow::Result; use hurrycurry_protocol::Score; use serde::{Deserialize, Serialize}; -use std::collections::HashMap; +use std::{cmp::Reverse, collections::HashMap}; use tokio::{ fs::{read_to_string, rename, File}, io::AsyncWriteExt, @@ -28,7 +28,7 @@ use tokio::{ pub struct ScoreboardStore { maps: HashMap, } -#[derive(Debug, Serialize, Deserialize, Clone)] +#[derive(Debug, Serialize, Deserialize, Clone, Default)] pub struct Scoreboard { plays: usize, best: Vec, @@ -62,4 +62,13 @@ impl ScoreboardStore { rename(buffer_path, path).await?; Ok(()) } + pub fn insert(&mut self, map: &str, players: Vec, score: Score) { + let b = self.maps.entry(map.to_owned()).or_default(); + b.plays += 1; + b.best.push(ScoreboardEntry { players, score }); + b.best.sort_by_key(|e| Reverse(e.score.points)); + while b.best.len() > 16 { + b.best.pop(); + } + } } -- cgit v1.2.3-70-g09d2