diff --git a/rust/src/game/mod.rs b/rust/src/game/mod.rs index 671a89a..0d53e10 100644 --- a/rust/src/game/mod.rs +++ b/rust/src/game/mod.rs @@ -421,8 +421,7 @@ impl Game { peer.broadcast_reliable(Package::SetReady(player.id(), true)); } for player in &mut self.players { - player.data.kills = 0; - player.data.deaths = 0; + player.stats = Default::default(); } self.goals.clear(); } @@ -569,9 +568,8 @@ impl Game { ping: 0, team: 0, ready: false, - kills: 0, - deaths: 0, }, + stats: Default::default(), killing_spree: 0, killing_spree_cd: 0., character: None, @@ -1079,7 +1077,7 @@ impl Game { .record_event(ReplayEvent::Death(source, player_id)); } - let total_prev_kills: u16 = self.players.iter().map(|p| p.data.kills).sum(); + let total_prev_kills: u16 = self.players.iter().map(|p| p.stats.kills).sum(); if let Some(chat) = &mut Chat::singleton() { chat.bind_mut() @@ -1089,7 +1087,7 @@ impl Game { let killing_spree = if let DamageSource::Player(source_id) = source && let Some(source_player) = self.find_player_mut(source_id) { - source_player.data.kills += 1; + source_player.stats.kills += 1; source_player.killing_spree += 1; source_player.killing_spree_cd = 10.; source_player.killing_spree @@ -1100,7 +1098,7 @@ impl Game { if let Some(player) = self.find_player_mut(player_id) { player.killing_spree = 0; player.killing_spree_cd = 0.; - player.data.deaths += 1; + player.stats.deaths += 1; } self.run_deferred(move |s| { s.signals().on_player_killed().emit(player_id); @@ -1354,6 +1352,7 @@ impl Game { pub struct Player { pub connection_addr: SocketAddr, pub data: NetPlayer, + pub stats: PlayerStats, pub character: Option>, pub killing_spree: u16, pub killing_spree_cd: f64, @@ -1495,6 +1494,16 @@ impl Player { } } +#[derive(Debug, Default, Serialize, Deserialize, Clone)] +pub struct PlayerStats { + pub kills: u16, + pub deaths: u16, + pub goals: u16, + pub own_goals: u16, + pub friendly_kills: u16, + pub friendly_deaths: u16, +} + #[derive(Debug, Serialize, Deserialize, Clone)] pub struct NetPlayer { pub id: u16, @@ -1502,8 +1511,6 @@ pub struct NetPlayer { pub name: String, pub ping: u128, pub team: u8, - pub kills: u16, - pub deaths: u16, } impl From for Player { @@ -1511,6 +1518,7 @@ impl From for Player { Player { connection_addr: SocketAddr::from(([0, 0, 0, 0], 0)), data: value, + stats: Default::default(), character: None, killing_spree: 0, killing_spree_cd: 0., diff --git a/rust/src/replay.rs b/rust/src/replay.rs index 5d67978..934ae3c 100644 --- a/rust/src/replay.rs +++ b/rust/src/replay.rs @@ -9,7 +9,7 @@ use godot::{ use serde::{Deserialize, Serialize}; use crate::{ - game::{Game, GameManager, Player}, + game::{Game, GameManager, Player, PlayerStats}, game_settings::GameSettingsManager, map::Map, net::{network_manager::BallSync, util::NetVector3}, @@ -514,8 +514,7 @@ impl INode for ReplayRecorder { name: player.data.name.clone(), color: team.bind().color.into(), team: player.data.team, - kills: 0, - deaths: 0, + stats: Default::default(), }, ); } @@ -585,8 +584,7 @@ impl ReplayRecorder { player_data.insert(player.id(), state); } if let Some(replay_player) = self.replay.players.get_mut(&player.id()) { - replay_player.kills = player.data.kills; - replay_player.deaths = player.data.deaths; + replay_player.stats = player.stats.clone(); } } ball_data = if let Some(ball) = &game.bind().world_ball { @@ -688,8 +686,7 @@ pub struct ReplayPlayer { pub name: String, pub color: ReplayColor, pub team: u8, - pub kills: u16, - pub deaths: u16, + pub stats: PlayerStats, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -778,8 +775,8 @@ impl Player { .map(|w| w.dyn_bind().get_type()) .unwrap_or(WeaponType::Raygun), is_dead: character.dyn_bind().is_dead(), - kills: player.data.kills, - deaths: player.data.deaths, + kills: player.stats.kills, + deaths: player.stats.deaths, health: character.dyn_bind().get_health(), buffs: character.dyn_bind().get_buffs().clone(), }) diff --git a/rust/src/ui/player_listing.rs b/rust/src/ui/player_listing.rs index 77f4b1f..8e687d3 100644 --- a/rust/src/ui/player_listing.rs +++ b/rust/src/ui/player_listing.rs @@ -70,10 +70,10 @@ impl PlayerListing { name_label.set_text(&player.data.name); } if let Some(kills_label) = &mut self.kills_label { - kills_label.set_text(&player.data.kills.to_string()); + kills_label.set_text(&player.stats.kills.to_string()); } if let Some(deaths_label) = &mut self.deaths_label { - deaths_label.set_text(&player.data.deaths.to_string()); + deaths_label.set_text(&player.stats.deaths.to_string()); } if let Some(ping_label) = &mut self.ping_label { ping_label.set_text(&player.data.ping.to_string());