Add new announcer sounds

This commit is contained in:
Sofia 2026-08-08 21:28:31 +03:00
parent a267f22406
commit ee31a8fffb
4 changed files with 52 additions and 37 deletions

View File

@ -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"

View File

@ -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<Gd<AudioStream>>,
#[export]
#[export_group(name = "Sounds")]
double_kill: Option<Gd<AudioStream>>,
#[export]
#[export_group(name = "Sounds")]
triple_kill: Option<Gd<AudioStream>>,
#[export]
#[export_group(name = "Sounds")]
mega_kill: Option<Gd<AudioStream>>,
sounds: Dictionary<Announcement, Option<Gd<AudioStream>>>,
base: Base<Node3D>,
}
#[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();
}
}
}
}

View File

@ -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) => {

View File

@ -738,7 +738,6 @@ impl Game {
velocity: Option<NetVector3>,
player_id: Option<u16>,
) {
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 {