38 lines
814 B
Rust
38 lines
814 B
Rust
use godot::{
|
|
classes::{Area3D, IArea3D},
|
|
prelude::*,
|
|
};
|
|
|
|
use crate::{
|
|
net::network_manager::NetworkManager,
|
|
player::{DamageSource, 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(DamageSource::Killbox, 1000, true);
|
|
}
|
|
}
|
|
}
|
|
}
|