skullball/rust/src/killbox.rs
2026-07-21 01:47:35 +03:00

33 lines
725 B
Rust

use godot::{
classes::{Area3D, IArea3D},
prelude::*,
};
use crate::{net::network_manager::NetworkManager, player::IPlayer};
#[derive(GodotClass)]
#[class(base=Area3D, init)]
pub struct Killbox {
base: Base<Area3D>,
}
#[godot_api]
impl IArea3D for Killbox {
fn ready(&mut self) {
self.base()
.signals()
.body_entered()
.connect_other(self, |s, body| s.kill(body));
}
}
impl Killbox {
pub fn kill(&mut self, node: Gd<Node3D>) {
if let Ok(mut player) = node.try_dynify::<dyn IPlayer>() {
if NetworkManager::singleton().bind().is_host() {
player.dyn_bind_mut().take_damage(0, 1000, true);
}
}
}
}