Add on_body_entered to player common code

This commit is contained in:
Sofia 2026-08-03 22:21:26 +03:00
parent 6056b2cc1b
commit d3a2997514
3 changed files with 19 additions and 38 deletions

View File

@ -421,11 +421,10 @@ impl IPlayer for LocalPlayer {
area.signals()
.body_entered()
.connect_other(self, |s, other| s.body_entered(other));
.connect_other(self, |s, other| s.on_body_entered(other));
self.base_mut().add_child(&area);
godot_print!("added area");
self.telefrag_frames = 1;
self.telefrag_area = Some(area);
@ -789,7 +788,6 @@ impl ICharacterBody3D for LocalPlayer {
if self.telefrag_frames == 0 {
if let Some(area) = &mut self.telefrag_area.take() {
godot_print!("removed area");
area.queue_free();
}
} else {
@ -905,22 +903,6 @@ impl LocalPlayer {
mat.set("shader_parameter/Color", &color.to_variant());
}
}
fn body_entered(&mut self, collider: Gd<Node3D>) {
if !NetworkManager::singleton().bind().is_host() {
return;
}
if collider.instance_id() == self.base().instance_id() {
return;
}
if let Ok(mut player) = collider.try_dynify::<dyn IPlayer>() {
player.dyn_bind_mut().take_damage(
DamageSource::Player(self.get_player_id().unwrap_or(0)),
1000,
true,
);
}
}
}
#[godot_dyn]

View File

@ -93,6 +93,7 @@ pub trait PlayerCommon {
fn try_punch_common(&mut self, to: Vector3, deal_damage: bool) -> bool;
fn throw_telegrenade_common(&mut self, to: Vector3) -> bool;
fn telegrenade_teleport_common(&mut self, to: Vector3) -> bool;
fn on_body_entered(&self, other: Gd<Node3D>);
}
impl<T: IPlayer + ICharacterBody3D + WithBaseField> PlayerCommon for T {
@ -324,6 +325,22 @@ impl<T: IPlayer + ICharacterBody3D + WithBaseField> PlayerCommon for T {
self.set_telefrag_frame();
true
}
fn on_body_entered(&self, collider: Gd<Node3D>) {
if !NetworkManager::singleton().bind().is_host() {
return;
}
if collider.instance_id() == self.base().instance_id() {
return;
}
if let Ok(mut player) = collider.try_dynify::<dyn IPlayer>() {
player.dyn_bind_mut().take_damage(
DamageSource::Player(self.get_player_id().unwrap_or(0)),
1000,
true,
);
}
}
}
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]

View File

@ -372,12 +372,10 @@ impl IPlayer for RemotePlayer {
area.signals()
.body_entered()
.connect_other(self, |s, other| s.body_entered(other));
.connect_other(self, |s, other| s.on_body_entered(other));
self.base_mut().add_child(&area);
godot_print!("added area");
self.telefrag_frames = 1;
self.telefrag_area = Some(area);
@ -495,22 +493,6 @@ impl RemotePlayer {
self.health = health;
self.update_health_bar();
}
fn body_entered(&mut self, collider: Gd<Node3D>) {
if !NetworkManager::singleton().bind().is_host() {
return;
}
if collider.instance_id() == self.base().instance_id() {
return;
}
if let Ok(mut player) = collider.try_dynify::<dyn IPlayer>() {
player.dyn_bind_mut().take_damage(
DamageSource::Player(self.get_player_id().unwrap_or(0)),
1000,
true,
);
}
}
}
#[godot_dyn]