Implement kills/deaths
This commit is contained in:
parent
bdbbf5a436
commit
036d7c723a
@ -304,6 +304,8 @@ impl Game {
|
||||
pub fn on_goal();
|
||||
#[signal]
|
||||
pub fn on_game_finished();
|
||||
#[signal]
|
||||
pub fn on_player_killed(player: u16);
|
||||
|
||||
pub fn singleton() -> Option<Gd<Game>> {
|
||||
GameManager::singleton()
|
||||
@ -330,6 +332,8 @@ impl Game {
|
||||
character.queue_free();
|
||||
}
|
||||
player.data.ready = false;
|
||||
player.data.kills = 0;
|
||||
player.data.deaths = 0;
|
||||
}
|
||||
|
||||
self.run_deferred(|s| {
|
||||
@ -351,6 +355,7 @@ impl Game {
|
||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
||||
&& let PeerKind::Server(peer, _) = peer
|
||||
{
|
||||
peer.set_accepting_connections(true);
|
||||
peer.broadcast_reliable(Package::FinishGame);
|
||||
}
|
||||
s.signals().on_game_finished().emit()
|
||||
@ -474,6 +479,8 @@ impl Game {
|
||||
ping: 0,
|
||||
team: 0,
|
||||
ready: false,
|
||||
kills: 0,
|
||||
deaths: 0,
|
||||
},
|
||||
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
|
||||
pub fn handle_take_damage(&mut self, source: DamageSource, player_id: u16, damage: i32) {
|
||||
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) {
|
||||
if let Some(player) = self.find_player_mut(player_id) {
|
||||
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) {
|
||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().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 ping: u128,
|
||||
pub team: u8,
|
||||
pub kills: u16,
|
||||
pub deaths: u16,
|
||||
}
|
||||
|
||||
impl From<NetPlayer> for Player {
|
||||
|
||||
@ -30,6 +30,9 @@ impl IHBoxContainer for PlayerListing {
|
||||
game.signals()
|
||||
.on_players_updated()
|
||||
.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 {
|
||||
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 {
|
||||
ping_label.set_text(&player.data.ping.to_string());
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user