From 264a81e0729bab88c022f8a73b3a02f50e63f6dd Mon Sep 17 00:00:00 2001 From: Sofia Date: Tue, 28 Jul 2026 19:55:17 +0300 Subject: [PATCH] Add map music --- godot/maps/default_map.tres | 4 ++++ rust/src/bgm.rs | 14 +++++++++++++- rust/src/game_manager.rs | 4 ++++ rust/src/map_resource.rs | 4 +++- rust/src/ui/lobby.rs | 5 +++++ 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/godot/maps/default_map.tres b/godot/maps/default_map.tres index 9efaa0f..ef685fb 100644 --- a/godot/maps/default_map.tres +++ b/godot/maps/default_map.tres @@ -1,10 +1,14 @@ [gd_resource type="MapResource" format=3 uid="uid://c7n1tacc7a73t"] +[ext_resource type="AudioStream" uid="uid://d3tpaim4ia0xr" path="res://raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3" id="1_bjd18"] [ext_resource type="PackedScene" uid="uid://7iooamjot1tg" path="res://maps/default_map/map0.tscn" id="1_k5804"] +[ext_resource type="AudioStream" uid="uid://dkgm7o8u0w550" path="res://raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3" id="2_an43b"] [ext_resource type="TeamResource" uid="uid://p2fqqnaejjn7" path="res://maps/teams/blue_team.tres" id="2_kkbjr"] +[ext_resource type="AudioStream" uid="uid://dai8by348wqss" path="res://raw_assets/music/Thrust Sequence.mp3" id="3_e1bs0"] [ext_resource type="TeamResource" uid="uid://db4b3sjsftg15" path="res://maps/teams/red_ream.tres" id="3_o48fm"] [resource] name = "Default Map" scene = ExtResource("1_k5804") teams = Array[TeamResource]([ExtResource("2_kkbjr"), ExtResource("3_o48fm")]) +music = Array[AudioStream]([ExtResource("1_bjd18"), ExtResource("2_an43b"), ExtResource("3_e1bs0")]) diff --git a/rust/src/bgm.rs b/rust/src/bgm.rs index da065c5..be3819a 100644 --- a/rust/src/bgm.rs +++ b/rust/src/bgm.rs @@ -4,6 +4,8 @@ use godot::{ tools::get_autoload_by_name, }; +use crate::game_manager::GameManager; + pub const MUSIC_MANAGER_GLOBAL: &str = "MusicManagerGlobal"; #[derive(Debug, PartialEq, PartialOrd, Clone, Copy)] @@ -40,11 +42,21 @@ impl MusicManager { Some(music) => { let songs = match music { Music::MainMenu => self.main_menu_songs.clone(), - Music::Map(_) => self.main_menu_songs.clone(), + Music::Map(idx) => { + if let Some(map) = + GameManager::singleton().bind().maps.get(idx as usize) + { + map.bind().music.clone() + } else { + Array::new() + } + } }; if let Some(song) = songs.pick_random() { player.set_stream(&song); player.play(); + } else { + player.stop(); } } None => player.stop(), diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 91d7f7a..02ce281 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -8,6 +8,7 @@ use crate::{ Announcement::{self, FirstBlood}, Announcer, }, + bgm::{Music, MusicManager}, chat::{Chat, ChatMessage}, map::Map, map_resource::MapResource, @@ -454,6 +455,9 @@ impl Game { self.base().get_tree().change_scene_to_packed(scene); } } + MusicManager::singleton() + .bind_mut() + .play(Some(Music::Map(self.selected_map_idx))); self.run_deferred(|_| { if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer { diff --git a/rust/src/map_resource.rs b/rust/src/map_resource.rs index 42e7502..89b0038 100644 --- a/rust/src/map_resource.rs +++ b/rust/src/map_resource.rs @@ -1,4 +1,4 @@ -use godot::prelude::*; +use godot::{classes::AudioStream, prelude::*}; use crate::team_resource::TeamResource; @@ -11,6 +11,8 @@ pub struct MapResource { pub scene: Option>, #[export] pub teams: Array>, + #[export] + pub music: Array>, base: Base, } diff --git a/rust/src/ui/lobby.rs b/rust/src/ui/lobby.rs index 270695d..c7d3705 100644 --- a/rust/src/ui/lobby.rs +++ b/rust/src/ui/lobby.rs @@ -9,6 +9,7 @@ use godot::{ }; use crate::{ + bgm::{Music, MusicManager}, game_manager::{Game, GameManager, GameOption, GameOptionValue, GameOptions}, net::network_manager::{NetworkManager, Package, PeerKind}, ui::lobby_player_listing::LobbyPlayerListing, @@ -188,6 +189,10 @@ impl IPanel for LobbyPanel { grid.add_child(&node); } } + + MusicManager::singleton() + .bind_mut() + .play(Some(Music::MainMenu)); } }