options: helpers readYamlField/Volume per a loadAudioConfigFromYaml
This commit is contained in:
+28
-37
@@ -568,51 +568,42 @@ namespace Options {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Carga configuración de audio desde YAML
|
// Carga configuración de audio desde YAML
|
||||||
void loadAudioConfigFromYaml(const fkyaml::node& yaml) { // NOLINT(readability-function-cognitive-complexity)
|
namespace {
|
||||||
|
// Llig parent[key] cap a dst si existeix; ignora errors de format (conserva el default).
|
||||||
|
template <typename T>
|
||||||
|
void readYamlField(const fkyaml::node& parent, const char* key, T& dst) {
|
||||||
|
if (!parent.contains(key)) { return; }
|
||||||
|
try {
|
||||||
|
dst = parent[key].template get_value<T>();
|
||||||
|
} catch (...) { /* @INTENTIONAL: camp YAML malformat → conservem default */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Versió específica per a volums (clamp a [0,1])
|
||||||
|
void readYamlVolume(const fkyaml::node& parent, const char* key, float& dst) {
|
||||||
|
if (!parent.contains(key)) { return; }
|
||||||
|
try {
|
||||||
|
dst = std::clamp(parent[key].get_value<float>(), 0.0F, 1.0F);
|
||||||
|
} catch (...) { /* @INTENTIONAL: camp YAML malformat → conservem default */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
void loadAudioConfigFromYaml(const fkyaml::node& yaml) {
|
||||||
if (!yaml.contains("audio")) { return; }
|
if (!yaml.contains("audio")) { return; }
|
||||||
const auto& a = yaml["audio"];
|
const auto& a = yaml["audio"];
|
||||||
|
|
||||||
if (a.contains("enabled")) {
|
readYamlField(a, "enabled", audio.enabled);
|
||||||
try {
|
readYamlVolume(a, "volume", audio.volume);
|
||||||
audio.enabled = a["enabled"].get_value<bool>();
|
|
||||||
} catch (...) { /* @INTENTIONAL: camp YAML malformat → conservem default */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (a.contains("volume")) {
|
|
||||||
try {
|
|
||||||
audio.volume = std::clamp(a["volume"].get_value<float>(), 0.0F, 1.0F);
|
|
||||||
} catch (...) { /* @INTENTIONAL: camp YAML malformat → conservem default */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (a.contains("music")) {
|
if (a.contains("music")) {
|
||||||
const auto& m = a["music"];
|
const auto& m = a["music"];
|
||||||
if (m.contains("enabled")) {
|
readYamlField(m, "enabled", audio.music.enabled);
|
||||||
try {
|
readYamlVolume(m, "volume", audio.music.volume);
|
||||||
audio.music.enabled = m["enabled"].get_value<bool>();
|
|
||||||
} catch (...) { /* @INTENTIONAL: camp YAML malformat → conservem default */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (m.contains("volume")) {
|
|
||||||
try {
|
|
||||||
audio.music.volume = std::clamp(m["volume"].get_value<float>(), 0.0F, 1.0F);
|
|
||||||
} catch (...) { /* @INTENTIONAL: camp YAML malformat → conservem default */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (a.contains("sound")) {
|
if (a.contains("sound")) {
|
||||||
const auto& s = a["sound"];
|
const auto& s = a["sound"];
|
||||||
if (s.contains("enabled")) {
|
readYamlField(s, "enabled", audio.sound.enabled);
|
||||||
try {
|
readYamlVolume(s, "volume", audio.sound.volume);
|
||||||
audio.sound.enabled = s["enabled"].get_value<bool>();
|
|
||||||
} catch (...) { /* @INTENTIONAL: camp YAML malformat → conservem default */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (s.contains("volume")) {
|
|
||||||
try {
|
|
||||||
audio.sound.volume = std::clamp(s["volume"].get_value<float>(), 0.0F, 1.0F);
|
|
||||||
} catch (...) { /* @INTENTIONAL: camp YAML malformat → conservem default */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user