Add distance moved, move stats button

This commit is contained in:
Sofia 2026-08-03 17:12:29 +03:00
parent b21e0834b4
commit 525b2e7e13
3 changed files with 35 additions and 11 deletions

View File

@ -18,35 +18,41 @@ ping_medium_color = Color(0.7963379, 0.79633814, 0, 1)
ping_high = ExtResource("3_kx1on")
ping_high_color = Color(0.99999994, 0.22953579, 0.17418489, 1)
ping_icon = NodePath("ping_icon")
stats_button = NodePath("button")
stats_button = NodePath("stats_button")
size_flags_horizontal = 3
theme = ExtResource("4_kx1on")
[node name="stats_button" type="Button" parent="." unique_id=1272088409]
custom_minimum_size = Vector2(20, 0)
layout_mode = 2
icon = ExtResource("5_gadtc")
expand_icon = true
[node name="name" type="Label" parent="." unique_id=1361759955]
clip_contents = true
layout_mode = 2
size_flags_horizontal = 2
text = "Player Name"
text = "Name"
[node name="kills" type="Label" parent="." unique_id=690390687]
custom_minimum_size = Vector2(50, 0)
custom_maximum_size = Vector2(50, -1)
layout_mode = 2
text = "0"
text = "Kills"
horizontal_alignment = 1
[node name="deaths" type="Label" parent="." unique_id=1615203485]
custom_minimum_size = Vector2(50, 0)
custom_maximum_size = Vector2(50, -1)
layout_mode = 2
text = "0"
text = "Deaths"
horizontal_alignment = 1
[node name="ping" type="Label" parent="." unique_id=1700548535]
custom_minimum_size = Vector2(50, 0)
custom_maximum_size = Vector2(50, -1)
layout_mode = 2
text = "0ms"
text = "Ping"
horizontal_alignment = 2
clip_text = true
@ -55,9 +61,3 @@ layout_mode = 2
texture = ExtResource("3_kx1on")
expand_mode = 2
stretch_mode = 4
[node name="button" type="Button" parent="." unique_id=1272088409]
custom_minimum_size = Vector2(20, 0)
layout_mode = 2
icon = ExtResource("5_gadtc")
expand_icon = true

View File

@ -301,6 +301,14 @@ impl INode for Game {
self.last_replay_clone = 0.
}
}
for player in &mut self.players {
if let Some(character) = &player.character {
let delta = character.get_global_position() - player.last_position;
player.stats.distance_moved += delta.length();
player.last_position = character.get_global_position();
}
}
}
}
@ -574,6 +582,7 @@ impl Game {
killing_spree_cd: 0.,
character: None,
last_held_weapon: WeaponType::Raygun,
last_position: Vector3::ZERO,
});
self.run_deferred(move |s| s.signals().on_new_player().emit(id));
@ -850,6 +859,12 @@ impl Game {
map.bind_mut()
.spawn_player(id, team, id == self.self_id.unwrap_or(0), None, true);
if let Some(character) = &character
&& let Some(player) = self.find_player_mut(id)
{
player.last_position = character.get_global_position()
}
if let Some(character) = &mut character {
character.dyn_bind_mut().new_buff(Buff {
time_remaining: self.opts.get_float(GameOption::SpawnProtection),
@ -940,6 +955,11 @@ impl Game {
Some(transform),
true,
);
if let Some(character) = &character {
player.last_position = character.get_global_position()
}
if let Some(character) = &mut character {
character.dyn_bind_mut().new_buff(Buff {
time_remaining: self.opts.get_float(GameOption::SpawnProtection),
@ -1386,6 +1406,7 @@ pub struct Player {
pub killing_spree: u16,
pub killing_spree_cd: f64,
pub last_held_weapon: WeaponType,
pub last_position: Vector3,
}
impl Player {
@ -1531,6 +1552,7 @@ pub struct PlayerStats {
pub own_goals: u16,
pub friendly_kills: u16,
pub friendly_deaths: u16,
pub distance_moved: f32,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
@ -1552,6 +1574,7 @@ impl From<NetPlayer> for Player {
killing_spree: 0,
killing_spree_cd: 0.,
last_held_weapon: WeaponType::Raygun,
last_position: Vector3::ZERO,
}
}
}

View File

@ -58,6 +58,7 @@ impl PlayerStatsPanel {
("Own Goals", stats.own_goals.to_string()),
("Friendly Kills", stats.friendly_kills.to_string()),
("Friendly Deaths", stats.friendly_deaths.to_string()),
("Distance Moved", format!("{:.0}m", stats.distance_moved)),
];
for (stat_name, stat) in stats {