skullball/rust/src/ui/menu_player.rs

51 lines
1.3 KiB
Rust

use godot::{
classes::{CharacterBody3D, ICharacterBody3D, Label3D},
prelude::*,
};
use crate::{game::Game, player::soldier_mesh::SoldierMesh};
#[derive(GodotClass)]
#[class(base=CharacterBody3D, init)]
pub struct MenuPlayer {
#[export]
mesh: Option<Gd<SoldierMesh>>,
#[export]
name_label: Option<Gd<Label3D>>,
pub player_id: Option<u16>,
base: Base<CharacterBody3D>,
}
#[godot_api]
impl ICharacterBody3D for MenuPlayer {
fn ready(&mut self) {
if let Some(mesh) = &mut self.mesh {
mesh.bind_mut().spawn_raygun();
}
}
fn physics_process(&mut self, _: f64) {
self.base_mut().move_and_slide();
}
}
impl MenuPlayer {
pub fn update(&mut self) {
if let Some(player_id) = self.player_id
&& let Some(game) = Game::singleton()
&& let Some(player) = game.bind().find_player(player_id)
&& let Some(team) = game.bind().get_team(player.data.team)
{
if let Some(name_label) = &mut self.name_label {
name_label.set_text(&player.data.name);
name_label.set_modulate(team.bind().color);
}
if let Some(mesh) = &mut self.mesh {
mesh.bind_mut().set_color(team.bind().color);
}
}
}
}