66 lines
1.8 KiB
Rust
66 lines
1.8 KiB
Rust
use godot::{
|
|
classes::{HBoxContainer, IHBoxContainer, Label},
|
|
prelude::*,
|
|
};
|
|
|
|
use crate::game_manager::Game;
|
|
|
|
#[derive(GodotClass)]
|
|
#[class(base=HBoxContainer, init)]
|
|
pub struct PlayerListing {
|
|
#[export]
|
|
name_label: Option<Gd<Label>>,
|
|
#[export]
|
|
kills_label: Option<Gd<Label>>,
|
|
#[export]
|
|
deaths_label: Option<Gd<Label>>,
|
|
#[export]
|
|
ping_label: Option<Gd<Label>>,
|
|
|
|
pub player_id: Option<u16>,
|
|
|
|
base: Base<HBoxContainer>,
|
|
}
|
|
|
|
#[godot_api]
|
|
impl IHBoxContainer for PlayerListing {
|
|
fn ready(&mut self) {
|
|
self.update();
|
|
if let Some(game) = Game::singleton() {
|
|
game.signals()
|
|
.on_players_updated()
|
|
.connect_other(self, |s| s.update());
|
|
}
|
|
}
|
|
}
|
|
|
|
impl PlayerListing {
|
|
pub fn update(&mut self) {
|
|
if let Some(game) = Game::singleton() {
|
|
if let Some(player_id) = self.player_id
|
|
&& let Some(player) = game.bind().find_player(player_id)
|
|
{
|
|
if let Some(name_label) = &mut self.name_label {
|
|
name_label.set_text(&player.data.name);
|
|
}
|
|
if let Some(ping_label) = &mut self.ping_label {
|
|
ping_label.set_text(&player.data.ping.to_string());
|
|
}
|
|
} else {
|
|
if let Some(name_label) = &mut self.name_label {
|
|
name_label.set_text("Name");
|
|
}
|
|
if let Some(kills_label) = &mut self.kills_label {
|
|
kills_label.set_text("Kills");
|
|
}
|
|
if let Some(deaths_label) = &mut self.deaths_label {
|
|
deaths_label.set_text("Deaths");
|
|
}
|
|
if let Some(ping_label) = &mut self.ping_label {
|
|
ping_label.set_text("Ping");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|