Add goal scoring chat message
This commit is contained in:
parent
f45f15b3bf
commit
ec566b3ecf
@ -38,6 +38,7 @@ pub enum ChatMessage {
|
|||||||
Death(DamageSource, u16),
|
Death(DamageSource, u16),
|
||||||
Announcement(u16, Announcement),
|
Announcement(u16, Announcement),
|
||||||
ChatMessage(String, Color, String),
|
ChatMessage(String, Color, String),
|
||||||
|
Goal(u16, Vec<u8>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ChatMessage {
|
impl ChatMessage {
|
||||||
@ -89,6 +90,27 @@ impl ChatMessage {
|
|||||||
label.pop();
|
label.pop();
|
||||||
label.add_text(message);
|
label.add_text(message);
|
||||||
}
|
}
|
||||||
|
ChatMessage::Goal(player_id, team_ids) => {
|
||||||
|
if let Some(game) = Game::singleton()
|
||||||
|
&& let Some(player) = game.bind().find_player(*player_id)
|
||||||
|
{
|
||||||
|
let teams = game.bind().get_teams();
|
||||||
|
let teams = teams
|
||||||
|
.iter_shared()
|
||||||
|
.enumerate()
|
||||||
|
.filter(|(id, _)| team_ids.contains(&((*id) as u8)));
|
||||||
|
add_player(&mut label, &player);
|
||||||
|
label.add_text(" scored a goal for ");
|
||||||
|
for (idx, (_, team)) in teams.enumerate() {
|
||||||
|
if idx > 0 {
|
||||||
|
label.add_text(" and ");
|
||||||
|
}
|
||||||
|
label.push_color(team.bind().color);
|
||||||
|
label.add_text(&team.bind().name);
|
||||||
|
label.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
label
|
label
|
||||||
}
|
}
|
||||||
|
|||||||
@ -729,16 +729,21 @@ impl Game {
|
|||||||
self.spawn_ball(None, None, None);
|
self.spawn_ball(None, None, None);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_goal(&mut self, teams: Vec<u8>) {
|
pub fn handle_goal(&mut self, scorer: u16, teams: Vec<u8>) {
|
||||||
for team in &teams {
|
for team in &teams {
|
||||||
self.goals
|
self.goals
|
||||||
.insert(*team, self.goals.get(&team).copied().unwrap_or(0) + 1);
|
.insert(*team, self.goals.get(&team).copied().unwrap_or(0) + 1);
|
||||||
}
|
}
|
||||||
self.run_deferred(move |s| {
|
self.run_deferred(move |s| {
|
||||||
|
if let Some(mut chat) = Chat::singleton() {
|
||||||
|
chat.bind_mut()
|
||||||
|
.new_message(ChatMessage::Goal(0, teams.clone()));
|
||||||
|
}
|
||||||
|
|
||||||
s.signals().on_goal().emit();
|
s.signals().on_goal().emit();
|
||||||
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(Package::Goal(teams));
|
peer.broadcast_reliable(Package::Goal(scorer, teams));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if NetworkManager::singleton().bind().is_host() {
|
if NetworkManager::singleton().bind().is_host() {
|
||||||
|
|||||||
@ -53,7 +53,8 @@ impl Goal {
|
|||||||
.collect();
|
.collect();
|
||||||
if NetworkManager::singleton().bind().is_host() {
|
if NetworkManager::singleton().bind().is_host() {
|
||||||
game.bind_mut().respawn_ball();
|
game.bind_mut().respawn_ball();
|
||||||
game.bind_mut().handle_goal(teams);
|
game.bind_mut()
|
||||||
|
.handle_goal(ball.bind().dropper.unwrap_or(0), teams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -342,7 +342,7 @@ pub enum Package {
|
|||||||
SpawnBall(NetTransform, NetVector3, Option<u16>),
|
SpawnBall(NetTransform, NetVector3, Option<u16>),
|
||||||
DespawnBall,
|
DespawnBall,
|
||||||
SwapWeapon(u16, WeaponType),
|
SwapWeapon(u16, WeaponType),
|
||||||
Goal(Vec<u8>),
|
Goal(u16, Vec<u8>),
|
||||||
Announcement(u16, Announcement),
|
Announcement(u16, Announcement),
|
||||||
Pickup(u8, u16),
|
Pickup(u8, u16),
|
||||||
ThrowTelegrenade(u16, NetVector3),
|
ThrowTelegrenade(u16, NetVector3),
|
||||||
|
|||||||
@ -202,9 +202,9 @@ impl NetworkManager {
|
|||||||
game.bind_mut().change_option(opt, value);
|
game.bind_mut().change_option(opt, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Package::Goal(teams) => {
|
Package::Goal(scorer, teams) => {
|
||||||
if let Some(game) = &mut Game::singleton() {
|
if let Some(game) = &mut Game::singleton() {
|
||||||
game.bind_mut().handle_goal(teams);
|
game.bind_mut().handle_goal(scorer, teams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Package::FinishGame => {
|
Package::FinishGame => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user