Implement kills/deaths
This commit is contained in:
parent
a1205635f0
commit
923c863583
@ -304,6 +304,8 @@ impl Game {
|
|||||||
pub fn on_goal();
|
pub fn on_goal();
|
||||||
#[signal]
|
#[signal]
|
||||||
pub fn on_game_finished();
|
pub fn on_game_finished();
|
||||||
|
#[signal]
|
||||||
|
pub fn on_player_killed(player: u16);
|
||||||
|
|
||||||
pub fn singleton() -> Option<Gd<Game>> {
|
pub fn singleton() -> Option<Gd<Game>> {
|
||||||
GameManager::singleton()
|
GameManager::singleton()
|
||||||
@ -330,6 +332,8 @@ impl Game {
|
|||||||
character.queue_free();
|
character.queue_free();
|
||||||
}
|
}
|
||||||
player.data.ready = false;
|
player.data.ready = false;
|
||||||
|
player.data.kills = 0;
|
||||||
|
player.data.deaths = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.run_deferred(|s| {
|
self.run_deferred(|s| {
|
||||||
@ -351,6 +355,7 @@ impl Game {
|
|||||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
||||||
&& let PeerKind::Server(peer, _) = peer
|
&& let PeerKind::Server(peer, _) = peer
|
||||||
{
|
{
|
||||||
|
peer.set_accepting_connections(true);
|
||||||
peer.broadcast_reliable(Package::FinishGame);
|
peer.broadcast_reliable(Package::FinishGame);
|
||||||
}
|
}
|
||||||
s.signals().on_game_finished().emit()
|
s.signals().on_game_finished().emit()
|
||||||
@ -474,6 +479,8 @@ impl Game {
|
|||||||
ping: 0,
|
ping: 0,
|
||||||
team: 0,
|
team: 0,
|
||||||
ready: false,
|
ready: false,
|
||||||
|
kills: 0,
|
||||||
|
deaths: 0,
|
||||||
},
|
},
|
||||||
character: None,
|
character: None,
|
||||||
});
|
});
|
||||||
@ -824,6 +831,19 @@ impl Game {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle for when a player is killed, run both on client and server
|
||||||
|
pub fn on_kill(&mut self, source: DamageSource, player_id: u16) {
|
||||||
|
if let DamageSource::Player(source_id) = source
|
||||||
|
&& let Some(source_player) = self.find_player_mut(source_id)
|
||||||
|
{
|
||||||
|
source_player.data.kills += 1;
|
||||||
|
}
|
||||||
|
if let Some(player) = self.find_player_mut(player_id) {
|
||||||
|
player.data.deaths += 1;
|
||||||
|
}
|
||||||
|
self.run_deferred(move |s| s.signals().on_player_killed().emit(player_id));
|
||||||
|
}
|
||||||
|
|
||||||
// Handle taking damage, from server to client
|
// Handle taking damage, from server to client
|
||||||
pub fn handle_take_damage(&mut self, source: DamageSource, player_id: u16, damage: i32) {
|
pub fn handle_take_damage(&mut self, source: DamageSource, player_id: u16, damage: i32) {
|
||||||
if let Some(player) = self.find_player_mut(player_id) {
|
if let Some(player) = self.find_player_mut(player_id) {
|
||||||
@ -837,7 +857,8 @@ impl Game {
|
|||||||
pub fn handle_kill(&mut self, source: DamageSource, player_id: u16) {
|
pub fn handle_kill(&mut self, source: DamageSource, player_id: u16) {
|
||||||
if let Some(player) = self.find_player_mut(player_id) {
|
if let Some(player) = self.find_player_mut(player_id) {
|
||||||
if let Some(character) = &mut player.character {
|
if let Some(character) = &mut player.character {
|
||||||
character.dyn_bind_mut().kill(source);
|
character.dyn_bind_mut().kill(source.clone());
|
||||||
|
self.on_kill(source, player_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -855,7 +876,8 @@ impl Game {
|
|||||||
pub fn on_death(&mut self, source: DamageSource, target_player_id: u16) {
|
pub fn on_death(&mut self, source: DamageSource, target_player_id: u16) {
|
||||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
|
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
|
||||||
if let PeerKind::Server(peer, _) = peer {
|
if let PeerKind::Server(peer, _) = peer {
|
||||||
peer.broadcast_reliable(Kill(source, target_player_id));
|
peer.broadcast_reliable(Kill(source.clone(), target_player_id));
|
||||||
|
self.on_kill(source, target_player_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -971,6 +993,8 @@ pub struct NetPlayer {
|
|||||||
pub name: String,
|
pub name: String,
|
||||||
pub ping: u128,
|
pub ping: u128,
|
||||||
pub team: u8,
|
pub team: u8,
|
||||||
|
pub kills: u16,
|
||||||
|
pub deaths: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<NetPlayer> for Player {
|
impl From<NetPlayer> for Player {
|
||||||
|
|||||||
@ -30,6 +30,9 @@ impl IHBoxContainer for PlayerListing {
|
|||||||
game.signals()
|
game.signals()
|
||||||
.on_players_updated()
|
.on_players_updated()
|
||||||
.connect_other(self, |s| s.update());
|
.connect_other(self, |s| s.update());
|
||||||
|
game.signals()
|
||||||
|
.on_player_killed()
|
||||||
|
.connect_other(self, |s, _| s.update());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -43,6 +46,12 @@ impl PlayerListing {
|
|||||||
if let Some(name_label) = &mut self.name_label {
|
if let Some(name_label) = &mut self.name_label {
|
||||||
name_label.set_text(&player.data.name);
|
name_label.set_text(&player.data.name);
|
||||||
}
|
}
|
||||||
|
if let Some(kills_label) = &mut self.kills_label {
|
||||||
|
kills_label.set_text(&player.data.kills.to_string());
|
||||||
|
}
|
||||||
|
if let Some(deaths_label) = &mut self.deaths_label {
|
||||||
|
deaths_label.set_text(&player.data.deaths.to_string());
|
||||||
|
}
|
||||||
if let Some(ping_label) = &mut self.ping_label {
|
if let Some(ping_label) = &mut self.ping_label {
|
||||||
ping_label.set_text(&player.data.ping.to_string());
|
ping_label.set_text(&player.data.ping.to_string());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user