Add on_body_entered to player common code
This commit is contained in:
parent
6056b2cc1b
commit
d3a2997514
@ -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]
|
||||
|
||||
@ -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)]
|
||||
|
||||
@ -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]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user