Files
Cubed/src/scene/settings_scene.cpp
zhenyan121 e5bd7aa4d1 feat(settings): add player voice volume and voice input type options
- Add player voice volume slider and voice input type combo in settings UI.
- Add localization strings for player voice and voice input types.
- Add config overloads for const char* default values.
- Implement voice input types (PTT, always, off) in world scene.
- Refactor WorldScene member order and add load_config method.
- Update audio engine to use player voice volume.
- Downgrade some logging to debug.
2026-07-20 17:47:05 +08:00

71 lines
2.6 KiB
C++

#include "Cubed/scene/settings_scene.hpp"
#include "Cubed/app.hpp"
#include "Cubed/config.hpp"
#include "Cubed/scene/scene_manager.hpp"
namespace Cubed {
SettingsScene::SettingsScene(SceneManager& scene_manager)
: m_scene_manager(scene_manager), m_settings_ui(*this) {}
SettingsScene::~SettingsScene() {}
void SettingsScene::update(float dt) { m_settings_ui.update(dt); }
void SettingsScene::render(Renderer& renderer) {
m_settings_ui.render(renderer);
}
bool SettingsScene::handle_event(const Event& e) {
if (m_settings_ui.handle_event(e)) {
return true;
}
return false;
}
void SettingsScene::on_enter() {
m_settings_ui.init();
auto& config = m_scene_manager.app().config();
m_slider_variable.fov = config.get("player.fov", m_slider_variable.fov);
m_slider_variable.mouse_sensitivity = config.get(
"player.mouse_sensitivity", m_slider_variable.mouse_sensitivity);
m_slider_variable.music =
config.get("volume.music", m_slider_variable.music);
m_slider_variable.sfx = config.get("volume.SFX", m_slider_variable.sfx);
m_slider_variable.rendering_distance = config.get(
"world.rendering_distance", m_slider_variable.rendering_distance);
m_slider_variable.player_voice =
config.get("vloume.player_voice", m_slider_variable.player_voice);
}
void SettingsScene::on_leave() {
save_and_apply();
if (m_need_texture_reload) {
m_scene_manager.app().texture_manager().need_reload();
}
}
void SettingsScene::on_re_enter() {
auto width = m_scene_manager.app().renderer().window_width();
auto height = m_scene_manager.app().renderer().window_height();
handle_event(
WindowResizeEvent{static_cast<int>(width), static_cast<int>(height)});
}
void SettingsScene::save_and_apply() {
auto& config = m_scene_manager.app().config();
config.set("player.fov", m_slider_variable.fov);
config.set("player.mouse_sensitivity", m_slider_variable.mouse_sensitivity);
config.set("world.rendering_distance",
m_slider_variable.rendering_distance);
config.set("volume.SFX", m_slider_variable.sfx);
config.set("volume.music", m_slider_variable.music);
config.set("volume.player_voice", m_slider_variable.player_voice);
config.save_to_file();
auto& app = m_scene_manager.app();
app.audio().reload_config();
app.renderer().reload_config();
}
SceneManager& SettingsScene::scene_manager() { return m_scene_manager; }
SliderVariable& SettingsScene::slider_variable() { return m_slider_variable; }
void SettingsScene::set_texture_reload(bool reload) {
m_need_texture_reload = reload;
}
} // namespace Cubed