Skip to content

Commit ea358cd

Browse files
authored
Merge pull request blazium-engine#21 from Meorge/mute-game
Mute game
2 parents f87f7b2 + 938e0e5 commit ea358cd

File tree

9 files changed

+72
-1
lines changed

9 files changed

+72
-1
lines changed

editor/debugger/editor_debugger_node.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,13 @@ void EditorDebuggerNode::live_debug_reparent_node(const NodePath &p_at, const No
801801
});
802802
}
803803

804+
void EditorDebuggerNode::set_audio_enabled(bool p_enabled) {
805+
_for_all(tabs, [&](ScriptEditorDebugger *dbg) {
806+
dbg->set_audio_enabled(p_enabled);
807+
});
808+
audio_enabled = p_enabled;
809+
}
810+
804811
void EditorDebuggerNode::set_camera_override(CameraOverride p_override) {
805812
_for_all(tabs, [&](ScriptEditorDebugger *dbg) {
806813
dbg->set_camera_override(p_override);

editor/debugger/editor_debugger_node.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ class EditorDebuggerNode : public MarginContainer {
111111
bool keep_open = false;
112112
String current_uri;
113113

114+
bool audio_enabled = true;
115+
114116
CameraOverride camera_override = OVERRIDE_NONE;
115117
HashMap<Breakpoint, bool, Breakpoint> breakpoints;
116118

@@ -205,6 +207,8 @@ class EditorDebuggerNode : public MarginContainer {
205207
void live_debug_duplicate_node(const NodePath &p_at, const String &p_new_name);
206208
void live_debug_reparent_node(const NodePath &p_at, const NodePath &p_new_place, const String &p_new_name, int p_at_pos);
207209

210+
void set_audio_enabled(bool p_enabled);
211+
208212
void set_camera_override(CameraOverride p_override);
209213
CameraOverride get_camera_override();
210214

editor/debugger/script_editor_debugger.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1482,6 +1482,17 @@ void ScriptEditorDebugger::live_debug_reparent_node(const NodePath &p_at, const
14821482
}
14831483
}
14841484

1485+
bool ScriptEditorDebugger::get_audio_enabled() const {
1486+
return audio_enabled;
1487+
}
1488+
1489+
void ScriptEditorDebugger::set_audio_enabled(bool p_enabled) {
1490+
Array msg;
1491+
msg.push_back(p_enabled);
1492+
_put_msg("scene:enable_audio", msg);
1493+
audio_enabled = p_enabled;
1494+
}
1495+
14851496
CameraOverride ScriptEditorDebugger::get_camera_override() const {
14861497
return camera_override;
14871498
}

editor/debugger/script_editor_debugger.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,8 @@ class ScriptEditorDebugger : public MarginContainer {
183183

184184
void _select_thread(int p_index);
185185

186+
bool audio_enabled = true;
187+
186188
EditorDebuggerNode::CameraOverride camera_override;
187189

188190
void _stack_dump_frame_selected();
@@ -299,6 +301,9 @@ class ScriptEditorDebugger : public MarginContainer {
299301
void live_debug_duplicate_node(const NodePath &p_at, const String &p_new_name);
300302
void live_debug_reparent_node(const NodePath &p_at, const NodePath &p_new_place, const String &p_new_name, int p_at_pos);
301303

304+
bool get_audio_enabled() const;
305+
void set_audio_enabled(bool p_enabled);
306+
302307
EditorDebuggerNode::CameraOverride get_camera_override() const;
303308
void set_camera_override(EditorDebuggerNode::CameraOverride p_override);
304309

editor/plugins/game_view_plugin.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ void GameViewDebugger::set_select_mode(int p_mode) {
130130
}
131131
}
132132

133+
void GameViewDebugger::set_audio_enabled(bool p_enabled) {
134+
EditorDebuggerNode::get_singleton()->set_audio_enabled(p_enabled);
135+
}
136+
133137
void GameViewDebugger::set_camera_override(bool p_enabled) {
134138
EditorDebuggerNode::get_singleton()->set_camera_override(p_enabled ? camera_override_mode : EditorDebuggerNode::OVERRIDE_NONE);
135139
}
@@ -359,6 +363,10 @@ void GameView::_hide_selection_toggled(bool p_pressed) {
359363
debugger->set_selection_visible(!p_pressed);
360364
}
361365

366+
void GameView::_enable_audio_button_toggled(bool p_pressed) {
367+
debugger->set_audio_enabled(p_pressed);
368+
}
369+
362370
void GameView::_camera_override_button_toggled(bool p_pressed) {
363371
_update_debugger_buttons();
364372

@@ -414,6 +422,7 @@ void GameView::_notification(int p_what) {
414422
keep_aspect_button->set_button_icon(get_editor_theme_icon(SNAME("KeepAspect")));
415423
embed_options_menu->set_button_icon(get_editor_theme_icon(SNAME("GuiTabMenuHl")));
416424

425+
enable_audio_button->set_button_icon(get_editor_theme_icon(SNAME("AudioStreamPlayer")));
417426
camera_override_button->set_button_icon(get_editor_theme_icon(SNAME("Camera")));
418427
camera_override_menu->set_button_icon(get_editor_theme_icon(SNAME("GuiTabMenuHl")));
419428
} break;
@@ -654,6 +663,16 @@ GameView::GameView(Ref<GameViewDebugger> p_debugger, WindowWrapper *p_wrapper) {
654663

655664
main_menu_hbox->add_child(memnew(VSeparator));
656665

666+
enable_audio_button = memnew(Button);
667+
main_menu_hbox->add_child(enable_audio_button);
668+
enable_audio_button->set_toggle_mode(true);
669+
enable_audio_button->set_pressed(true);
670+
enable_audio_button->set_theme_type_variation("FlatButton");
671+
enable_audio_button->connect(SceneStringName(toggled), callable_mp(this, &GameView::_enable_audio_button_toggled));
672+
enable_audio_button->set_tooltip_text("Enable or mute game audio.");
673+
674+
main_menu_hbox->add_child(memnew(VSeparator));
675+
657676
camera_override_button = memnew(Button);
658677
main_menu_hbox->add_child(camera_override_button);
659678
camera_override_button->set_toggle_mode(true);

editor/plugins/game_view_plugin.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ class GameViewDebugger : public EditorDebuggerPlugin {
6868

6969
void set_selection_visible(bool p_visible);
7070

71+
void set_audio_enabled(bool p_enabled);
72+
7173
void set_camera_override(bool p_enabled);
7274
void set_camera_manipulate_mode(EditorDebuggerNode::CameraOverride p_mode);
7375

@@ -115,6 +117,8 @@ class GameView : public VBoxContainer {
115117

116118
Button *hide_selection = nullptr;
117119

120+
Button *enable_audio_button = nullptr;
121+
118122
Button *camera_override_button = nullptr;
119123
MenuButton *camera_override_menu = nullptr;
120124

@@ -153,6 +157,8 @@ class GameView : public VBoxContainer {
153157

154158
void _hide_selection_toggled(bool p_pressed);
155159

160+
void _enable_audio_button_toggled(bool p_pressed);
161+
156162
void _camera_override_button_toggled(bool p_pressed);
157163
void _camera_override_menu_id_pressed(int p_id);
158164

scene/debugger/scene_debugger.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#include "scene/main/window.h"
5353
#include "scene/resources/packed_scene.h"
5454
#include "scene/theme/theme_db.h"
55+
#include "servers/audio_server.h"
5556

5657
SceneDebugger::SceneDebugger() {
5758
singleton = this;
@@ -144,6 +145,11 @@ Error SceneDebugger::parse_message(void *p_user, const String &p_msg, const Arra
144145
} else if (p_msg == "next_frame") {
145146
_next_frame();
146147

148+
} else if (p_msg == "enable_audio") { // Enable/disable audio
149+
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
150+
bool enable = p_args[0];
151+
AudioServer::get_singleton()->set_mute(!enable);
152+
147153
} else if (p_msg == "override_cameras") { // Camera
148154
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
149155
bool enable = p_args[0];

servers/audio_server.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) {
295295
// The destination start for data will be the same in all cases.
296296
int32_t *dest = &p_buffer[from_buf * (cs * 2) + (k * 2)];
297297

298-
if (master->channels[k].active) {
298+
if (master->channels[k].active && !mute) {
299299
const AudioFrame *buf = master->channels[k].buffer.ptr();
300300

301301
for (int j = 0; j < to_copy; j++) {
@@ -766,6 +766,14 @@ int AudioServer::thread_find_bus_index(const StringName &p_name) {
766766
}
767767
}
768768

769+
void AudioServer::set_mute(bool p_mute) {
770+
mute = p_mute;
771+
}
772+
773+
bool AudioServer::get_mute() const {
774+
return mute;
775+
}
776+
769777
void AudioServer::set_bus_count(int p_count) {
770778
ERR_FAIL_COND(p_count < 1);
771779
ERR_FAIL_INDEX(p_count, 256);

servers/audio_server.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ class AudioServer : public Object {
229229

230230
bool tag_used_audio_streams = false;
231231

232+
bool mute = false;
233+
232234
struct Bus {
233235
StringName name;
234236
bool solo = false;
@@ -367,6 +369,9 @@ class AudioServer : public Object {
367369
int thread_get_mix_buffer_size() const;
368370
int thread_find_bus_index(const StringName &p_name);
369371

372+
void set_mute(bool p_mute);
373+
bool get_mute() const;
374+
370375
void set_bus_count(int p_count);
371376
int get_bus_count() const;
372377

0 commit comments

Comments
 (0)