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>, #[export] kills_label: Option>, #[export] deaths_label: Option>, #[export] ping_label: Option>, pub player_id: Option, base: Base, } #[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"); } } } } }