From ee31a8fffbc69e1608fa66e7584c95834cd35a97 Mon Sep 17 00:00:00 2001 From: Sofia Date: Sat, 8 Aug 2026 21:28:31 +0300 Subject: [PATCH] Add new announcer sounds --- godot/scenes/misc/announcer.tscn | 22 +++++++++++++---- rust/src/announcer.rs | 41 +++++++++++++------------------- rust/src/chat.rs | 19 +++++++++------ rust/src/game/mod.rs | 7 +++++- 4 files changed, 52 insertions(+), 37 deletions(-) diff --git a/godot/scenes/misc/announcer.tscn b/godot/scenes/misc/announcer.tscn index f1b3403..ade9b6d 100644 --- a/godot/scenes/misc/announcer.tscn +++ b/godot/scenes/misc/announcer.tscn @@ -4,13 +4,27 @@ [ext_resource type="AudioStream" uid="uid://b5816xcsj2ueh" path="res://raw_assets/sfx/announcer/DoubleKill.wav" id="2_6jrtu"] [ext_resource type="AudioStream" uid="uid://co82glo13i8at" path="res://raw_assets/sfx/announcer/TripleKill.wav" id="3_6ob50"] [ext_resource type="AudioStream" uid="uid://dfxrsl808f6o0" path="res://raw_assets/sfx/announcer/MegaKill.wav" id="4_0lbme"] +[ext_resource type="AudioStream" uid="uid://cc5t6p6w468hi" path="res://raw_assets/sfx/announcer/KillingSpree.wav" id="5_2n7uu"] +[ext_resource type="AudioStream" uid="uid://cmx868xfm5tr" path="res://raw_assets/sfx/announcer/Carnage.wav" id="6_5jmf7"] +[ext_resource type="AudioStream" uid="uid://bjewmgxjuwsqo" path="res://raw_assets/sfx/announcer/Mayhem.wav" id="7_64qar"] +[ext_resource type="AudioStream" uid="uid://bwv7hydyynxo3" path="res://raw_assets/sfx/announcer/Dominating.wav" id="8_ym8wh"] +[ext_resource type="AudioStream" uid="uid://ccg5hd454nqpe" path="res://raw_assets/sfx/announcer/Rampage.wav" id="9_r1xer"] +[ext_resource type="AudioStream" uid="uid://celsg1h2xc85k" path="res://raw_assets/sfx/announcer/Godlike.wav" id="10_ow3y7"] [node name="announcer" type="Announcer" unique_id=1062756235 node_paths=PackedStringArray("player")] player = NodePath("audio_stream_player") -first_blood = ExtResource("1_h17tq") -double_kill = ExtResource("2_6jrtu") -triple_kill = ExtResource("3_6ob50") -mega_kill = ExtResource("4_0lbme") +sounds = Dictionary[String, AudioStream]({ +"Carnage": ExtResource("6_5jmf7"), +"Dominating": ExtResource("8_ym8wh"), +"DoubleKill": ExtResource("2_6jrtu"), +"FirstBlood": ExtResource("1_h17tq"), +"Godlike": ExtResource("10_ow3y7"), +"KillingSpree": ExtResource("5_2n7uu"), +"Mayhem": ExtResource("7_64qar"), +"MegaKill": ExtResource("4_0lbme"), +"Rampage": ExtResource("9_r1xer"), +"TripleKill": ExtResource("3_6ob50") +}) [node name="audio_stream_player" type="AudioStreamPlayer" parent="." unique_id=1168314007] bus = &"Announcer" diff --git a/rust/src/announcer.rs b/rust/src/announcer.rs index 69e36e7..4a243e2 100644 --- a/rust/src/announcer.rs +++ b/rust/src/announcer.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use godot::{ classes::{AudioStream, AudioStreamPlayer}, prelude::*, @@ -15,29 +17,24 @@ pub struct Announcer { #[export] #[export_group(name = "Sounds")] - first_blood: Option>, - - #[export] - #[export_group(name = "Sounds")] - double_kill: Option>, - - #[export] - #[export_group(name = "Sounds")] - triple_kill: Option>, - - #[export] - #[export_group(name = "Sounds")] - mega_kill: Option>, + sounds: Dictionary>>, base: Base, } -#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize, GodotConvert, Export, Var)] +#[godot(via = GString)] pub enum Announcement { FirstBlood, DoubleKill, TripleKill, MegaKill, + KillingSpree, + Carnage, + Mayhem, + Dominating, + Rampage, + Godlike, } impl Announcer { @@ -46,17 +43,11 @@ impl Announcer { } pub fn announce(&mut self, announcement: Announcement) { - let sound = match announcement { - Announcement::FirstBlood => &self.first_blood, - Announcement::DoubleKill => &self.double_kill, - Announcement::TripleKill => &self.triple_kill, - Announcement::MegaKill => &self.mega_kill, - }; - if let Some(sound) = sound - && let Some(player) = &mut self.player - { - player.set_stream(sound); - player.play(); + if let Some(Some(sound)) = self.sounds.get(announcement) { + if let Some(player) = &mut self.player { + player.set_stream(&sound); + player.play(); + } } } } diff --git a/rust/src/chat.rs b/rust/src/chat.rs index ba6c101..6e4e430 100644 --- a/rust/src/chat.rs +++ b/rust/src/chat.rs @@ -74,14 +74,19 @@ impl ChatMessage { && let Some(player) = game.bind().find_player(*player_id) { add_player(&mut label, &player); - label.append_text(" got "); - let what = match announcement { - Announcement::FirstBlood => "First Blood", - Announcement::DoubleKill => "a Double Kill", - Announcement::TripleKill => "a Triple Kill", - Announcement::MegaKill => "a Mega Kill", + let (is, what) = match announcement { + Announcement::FirstBlood => ("got", "First Blood"), + Announcement::DoubleKill => ("got", "a Double Kill"), + Announcement::TripleKill => ("got", "a Triple Kill"), + Announcement::MegaKill => ("got", "a Mega Kill"), + Announcement::KillingSpree => ("is on", "a Killing Spree"), + Announcement::Carnage => ("made", "Carnage"), + Announcement::Mayhem => ("made", "Mayhem"), + Announcement::Dominating => ("is", "Dominating"), + Announcement::Rampage => ("is on a", "Rampage"), + Announcement::Godlike => ("is", "Godlike"), }; - label.append_text(&format!("[color=red]{}[/color]", what)); + label.append_text(&format!(" {} [color=red]{}[/color]", is, what)); } } ChatMessage::ChatMessage(name, color, message) => { diff --git a/rust/src/game/mod.rs b/rust/src/game/mod.rs index b588572..82e8d92 100644 --- a/rust/src/game/mod.rs +++ b/rust/src/game/mod.rs @@ -738,7 +738,6 @@ impl Game { velocity: Option, player_id: Option, ) { - godot_print!("Spawned ball"); if let Some(map) = &mut self.current_map { let mut ball = map.bind_mut().spawn_ball(transform, velocity, player_id); if let Some(ball) = &mut ball { @@ -1250,6 +1249,12 @@ impl Game { 2 => Some(Announcement::DoubleKill), 3 => Some(Announcement::TripleKill), 4 => Some(Announcement::MegaKill), + 5 => Some(Announcement::KillingSpree), + 6 => Some(Announcement::Mayhem), + 7 => Some(Announcement::Carnage), + 8 => Some(Announcement::Rampage), + 9 => Some(Announcement::Dominating), + 10 => Some(Announcement::Godlike), _ => None, }; if let Some(announcement) = announcement {