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()
|
area.signals()
|
||||||
.body_entered()
|
.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);
|
self.base_mut().add_child(&area);
|
||||||
|
|
||||||
godot_print!("added area");
|
|
||||||
self.telefrag_frames = 1;
|
self.telefrag_frames = 1;
|
||||||
|
|
||||||
self.telefrag_area = Some(area);
|
self.telefrag_area = Some(area);
|
||||||
@ -789,7 +788,6 @@ impl ICharacterBody3D for LocalPlayer {
|
|||||||
|
|
||||||
if self.telefrag_frames == 0 {
|
if self.telefrag_frames == 0 {
|
||||||
if let Some(area) = &mut self.telefrag_area.take() {
|
if let Some(area) = &mut self.telefrag_area.take() {
|
||||||
godot_print!("removed area");
|
|
||||||
area.queue_free();
|
area.queue_free();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -905,22 +903,6 @@ impl LocalPlayer {
|
|||||||
mat.set("shader_parameter/Color", &color.to_variant());
|
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]
|
#[godot_dyn]
|
||||||
|
|||||||
@ -93,6 +93,7 @@ pub trait PlayerCommon {
|
|||||||
fn try_punch_common(&mut self, to: Vector3, deal_damage: bool) -> bool;
|
fn try_punch_common(&mut self, to: Vector3, deal_damage: bool) -> bool;
|
||||||
fn throw_telegrenade_common(&mut self, to: Vector3) -> bool;
|
fn throw_telegrenade_common(&mut self, to: Vector3) -> bool;
|
||||||
fn telegrenade_teleport_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 {
|
impl<T: IPlayer + ICharacterBody3D + WithBaseField> PlayerCommon for T {
|
||||||
@ -324,6 +325,22 @@ impl<T: IPlayer + ICharacterBody3D + WithBaseField> PlayerCommon for T {
|
|||||||
self.set_telefrag_frame();
|
self.set_telefrag_frame();
|
||||||
true
|
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)]
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
|
||||||
|
|||||||
@ -372,12 +372,10 @@ impl IPlayer for RemotePlayer {
|
|||||||
|
|
||||||
area.signals()
|
area.signals()
|
||||||
.body_entered()
|
.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);
|
self.base_mut().add_child(&area);
|
||||||
|
|
||||||
godot_print!("added area");
|
|
||||||
|
|
||||||
self.telefrag_frames = 1;
|
self.telefrag_frames = 1;
|
||||||
|
|
||||||
self.telefrag_area = Some(area);
|
self.telefrag_area = Some(area);
|
||||||
@ -495,22 +493,6 @@ impl RemotePlayer {
|
|||||||
self.health = health;
|
self.health = health;
|
||||||
self.update_health_bar();
|
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]
|
#[godot_dyn]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user