Compare commits
2 Commits
b6a4cd59bf
...
88e9d912a2
| Author | SHA1 | Date | |
|---|---|---|---|
| 88e9d912a2 | |||
| 0e40fe7f94 |
21
godot/default_bus_layout.tres
Normal file
21
godot/default_bus_layout.tres
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
[gd_resource type="AudioBusLayout" format=3 uid="uid://d3ju4ldpavkl4"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
bus/1/name = &"SFX"
|
||||||
|
bus/1/solo = false
|
||||||
|
bus/1/mute = false
|
||||||
|
bus/1/bypass_fx = false
|
||||||
|
bus/1/volume_db = -0.13049698
|
||||||
|
bus/1/send = &"Master"
|
||||||
|
bus/2/name = &"Music"
|
||||||
|
bus/2/solo = false
|
||||||
|
bus/2/mute = false
|
||||||
|
bus/2/bypass_fx = false
|
||||||
|
bus/2/volume_db = 0.0
|
||||||
|
bus/2/send = &"Master"
|
||||||
|
bus/3/name = &"Announcer"
|
||||||
|
bus/3/solo = false
|
||||||
|
bus/3/mute = false
|
||||||
|
bus/3/bypass_fx = false
|
||||||
|
bus/3/volume_db = 0.0
|
||||||
|
bus/3/send = &"Master"
|
||||||
@ -13,3 +13,4 @@ triple_kill = ExtResource("3_6ob50")
|
|||||||
mega_kill = ExtResource("4_0lbme")
|
mega_kill = ExtResource("4_0lbme")
|
||||||
|
|
||||||
[node name="audio_stream_player" type="AudioStreamPlayer" parent="." unique_id=1168314007]
|
[node name="audio_stream_player" type="AudioStreamPlayer" parent="." unique_id=1168314007]
|
||||||
|
bus = &"Announcer"
|
||||||
|
|||||||
@ -49,7 +49,9 @@ draw_pass_1 = SubResource("TubeTrailMesh_wwb7k")
|
|||||||
|
|
||||||
[node name="hit_sound" type="AudioStreamPlayer3D" parent="." unique_id=345049143]
|
[node name="hit_sound" type="AudioStreamPlayer3D" parent="." unique_id=345049143]
|
||||||
stream = ExtResource("1_uh1ab")
|
stream = ExtResource("1_uh1ab")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="walk" type="AudioStreamPlayer3D" parent="." unique_id=1589803505]
|
[node name="walk" type="AudioStreamPlayer3D" parent="." unique_id=1589803505]
|
||||||
stream = SubResource("AudioStreamRandomizer_uh1ab")
|
stream = SubResource("AudioStreamRandomizer_uh1ab")
|
||||||
max_distance = 20.0
|
max_distance = 20.0
|
||||||
|
bus = &"SFX"
|
||||||
|
|||||||
@ -182,6 +182,7 @@ vertical_alignment = 2
|
|||||||
|
|
||||||
[node name="hit_sound" type="AudioStreamPlayer" parent="." unique_id=1224745673]
|
[node name="hit_sound" type="AudioStreamPlayer" parent="." unique_id=1224745673]
|
||||||
stream = ExtResource("7_dguuj")
|
stream = ExtResource("7_dguuj")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
[connection signal="pressed" from="pause_menu/v_box_container/settings" to="settings" method="open"]
|
[connection signal="pressed" from="pause_menu/v_box_container/settings" to="settings" method="open"]
|
||||||
[connection signal="pressed" from="pause_menu/v_box_container/exit_to_lobby" to="." method="exit_to_lobby"]
|
[connection signal="pressed" from="pause_menu/v_box_container/exit_to_lobby" to="." method="exit_to_lobby"]
|
||||||
|
|||||||
@ -15,6 +15,7 @@ cooldown = 1.5
|
|||||||
[node name="sound_emitter" type="AudioStreamPlayer3D" parent="." unique_id=1572422640]
|
[node name="sound_emitter" type="AudioStreamPlayer3D" parent="." unique_id=1572422640]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8420726, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8420726, 0)
|
||||||
stream = ExtResource("3_m84jv")
|
stream = ExtResource("3_m84jv")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="bullet_source" type="Node3D" parent="." unique_id=211401237]
|
[node name="bullet_source" type="Node3D" parent="." unique_id=211401237]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.36108458, -1.490972)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.36108458, -1.490972)
|
||||||
|
|||||||
@ -57,6 +57,7 @@ cooldown = 1.0
|
|||||||
[node name="sound_emitter" type="AudioStreamPlayer3D" parent="." unique_id=1572422640]
|
[node name="sound_emitter" type="AudioStreamPlayer3D" parent="." unique_id=1572422640]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8420726, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8420726, 0)
|
||||||
stream = ExtResource("1_pyt38")
|
stream = ExtResource("1_pyt38")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="bullet_source" type="Node3D" parent="." unique_id=211401237]
|
[node name="bullet_source" type="Node3D" parent="." unique_id=211401237]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.36108458, -1.2375934)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.36108458, -1.2375934)
|
||||||
@ -72,6 +73,6 @@ one_shot = true
|
|||||||
explosiveness = 1.0
|
explosiveness = 1.0
|
||||||
local_coords = true
|
local_coords = true
|
||||||
trail_enabled = true
|
trail_enabled = true
|
||||||
trail_lifetime = 0.09999999999999999
|
trail_lifetime = 0.1
|
||||||
process_material = SubResource("ParticleProcessMaterial_1cgct")
|
process_material = SubResource("ParticleProcessMaterial_1cgct")
|
||||||
draw_pass_1 = SubResource("TubeTrailMesh_wwb7k")
|
draw_pass_1 = SubResource("TubeTrailMesh_wwb7k")
|
||||||
|
|||||||
@ -9,6 +9,9 @@ offset_right = 214.0
|
|||||||
offset_bottom = 23.0
|
offset_bottom = 23.0
|
||||||
|
|
||||||
[node name="label" type="Label" parent="." unique_id=2059967949]
|
[node name="label" type="Label" parent="." unique_id=2059967949]
|
||||||
|
custom_minimum_size = Vector2(30, 0)
|
||||||
|
custom_maximum_size = Vector2(30, -1)
|
||||||
|
clip_contents = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "50"
|
text = "50"
|
||||||
|
|
||||||
|
|||||||
@ -4,14 +4,21 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use godot::{
|
use godot::{
|
||||||
classes::{FileAccess, file_access::ModeFlags},
|
classes::{AudioBusLayout, AudioServer, FileAccess, file_access::ModeFlags},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
tools::get_autoload_by_name,
|
tools::get_autoload_by_name,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::ui::settings::Setting::MusicVolume;
|
||||||
|
|
||||||
pub const NETWORK_SINGLETON_NAME: &str = "GameSettingsGlobal";
|
pub const NETWORK_SINGLETON_NAME: &str = "GameSettingsGlobal";
|
||||||
|
|
||||||
|
pub const MASTER_BUS: &str = "Master";
|
||||||
|
pub const SFX_BUS: &str = "SFX";
|
||||||
|
pub const MUSIC_BUS: &str = "Music";
|
||||||
|
pub const ANNOUNCER_BUS: &str = "Announcer";
|
||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
pub struct GameSettings {
|
pub struct GameSettings {
|
||||||
pub fov: f64,
|
pub fov: f64,
|
||||||
@ -28,6 +35,24 @@ pub struct VolumeSettings {
|
|||||||
pub announcer_volume: f64,
|
pub announcer_volume: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl VolumeSettings {
|
||||||
|
pub fn master(&self) -> f32 {
|
||||||
|
(self.master_volume / 100.) as f32
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sfx(&self) -> f32 {
|
||||||
|
(self.sfx_volume / 100.) as f32
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn music(&self) -> f32 {
|
||||||
|
(self.music_volume / 10_000.) as f32
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn announcer(&self) -> f32 {
|
||||||
|
(self.announcer_volume / 100.) as f32
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
pub struct RecentServer {
|
pub struct RecentServer {
|
||||||
pub addr: SocketAddr,
|
pub addr: SocketAddr,
|
||||||
@ -80,12 +105,18 @@ impl GameSettingsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_settings(&mut self, settings: GameSettings) {
|
pub fn update_settings(&mut self, settings: GameSettings) {
|
||||||
|
set_bus_volume(MASTER_BUS, settings.volume.master());
|
||||||
|
set_bus_volume(SFX_BUS, settings.volume.sfx());
|
||||||
|
set_bus_volume(MUSIC_BUS, settings.volume.music());
|
||||||
|
set_bus_volume(ANNOUNCER_BUS, settings.volume.announcer());
|
||||||
|
|
||||||
self.settings = settings;
|
self.settings = settings;
|
||||||
if let Some(mut file) = FileAccess::open("user://config.toml", ModeFlags::WRITE) {
|
if let Some(mut file) = FileAccess::open("user://config.toml", ModeFlags::WRITE) {
|
||||||
if let Ok(serialized) = toml::to_string(&self.settings) {
|
if let Ok(serialized) = toml::to_string(&self.settings) {
|
||||||
file.store_string(&serialized);
|
file.store_string(&serialized);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.run_deferred(|s| s.signals().on_settings_changed().emit());
|
self.run_deferred(|s| s.signals().on_settings_changed().emit());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,3 +154,8 @@ impl GameSettingsManager {
|
|||||||
self.update_settings(settings);
|
self.update_settings(settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_bus_volume(bus: &str, volume: f32) {
|
||||||
|
let idx = AudioServer::singleton().get_bus_index(bus);
|
||||||
|
AudioServer::singleton().set_bus_volume_linear(idx, volume);
|
||||||
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
game_manager::Game,
|
game_manager::Game,
|
||||||
|
game_settings::{GameSettingsManager, VolumeSettings},
|
||||||
net::util::{cast_ray, shotgun_ray},
|
net::util::{cast_ray, shotgun_ray},
|
||||||
player::{DamageSource, shootable::Shootable},
|
player::{DamageSource, shootable::Shootable},
|
||||||
};
|
};
|
||||||
|
|||||||
@ -10,7 +10,7 @@ use godot::{
|
|||||||
|
|
||||||
use crate::{game_settings::GameSettingsManager, ui::slider::SliderContainer};
|
use crate::{game_settings::GameSettingsManager, ui::slider::SliderContainer};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Hash)]
|
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Ord, Eq, Hash)]
|
||||||
pub enum Setting {
|
pub enum Setting {
|
||||||
FoV,
|
FoV,
|
||||||
DefaultName,
|
DefaultName,
|
||||||
@ -111,7 +111,12 @@ impl IPanelContainer for SettingsPanel {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if let Some(mut grid) = self.settings_grid.clone() {
|
if let Some(mut grid) = self.settings_grid.clone() {
|
||||||
for (setting, value) in &self.settings {
|
let mut keys = self.settings.keys().collect::<Vec<_>>();
|
||||||
|
keys.sort();
|
||||||
|
|
||||||
|
for setting in keys.into_iter() {
|
||||||
|
let value = self.settings.get(setting).unwrap().clone();
|
||||||
|
|
||||||
let mut label = Label::new_alloc();
|
let mut label = Label::new_alloc();
|
||||||
label.set_text(&setting.to_string());
|
label.set_text(&setting.to_string());
|
||||||
label.set_h_size_flags(SizeFlags::EXPAND | SizeFlags::SHRINK_BEGIN);
|
label.set_h_size_flags(SizeFlags::EXPAND | SizeFlags::SHRINK_BEGIN);
|
||||||
@ -148,7 +153,7 @@ impl IPanelContainer for SettingsPanel {
|
|||||||
SettingValue::String(value) => {
|
SettingValue::String(value) => {
|
||||||
let mut line_edit = LineEdit::new_alloc();
|
let mut line_edit = LineEdit::new_alloc();
|
||||||
line_edit.set_custom_minimum_size(Vector2::new(100., -1.));
|
line_edit.set_custom_minimum_size(Vector2::new(100., -1.));
|
||||||
line_edit.set_text(value);
|
line_edit.set_text(&value);
|
||||||
line_edit.set_max_length(20);
|
line_edit.set_max_length(20);
|
||||||
|
|
||||||
let setting_clone = setting.clone();
|
let setting_clone = setting.clone();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user