From 0b4732befaaf4a742acb319256c535eb449668a7 Mon Sep 17 00:00:00 2001 From: Nemrav <> Date: Thu, 1 Aug 2024 18:17:24 -0300 Subject: Music and Sound Effect define loading sound and music pr feedback more sound and music style fixes check lookup path --- src/openvic-simulation/misc/SongChance.cpp | 53 ++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/openvic-simulation/misc/SongChance.cpp (limited to 'src/openvic-simulation/misc/SongChance.cpp') diff --git a/src/openvic-simulation/misc/SongChance.cpp b/src/openvic-simulation/misc/SongChance.cpp new file mode 100644 index 0000000..4a99362 --- /dev/null +++ b/src/openvic-simulation/misc/SongChance.cpp @@ -0,0 +1,53 @@ +#include "SongChance.hpp" + +using namespace OpenVic; +using namespace OpenVic::NodeTools; + +SongChance::SongChance(size_t new_index, std::string_view new_filename, ConditionalWeight&& new_chance): +HasIdentifier { std::to_string(new_index) }, +file_name { new_filename }, +chance { std::move(new_chance) } +{} + +bool SongChance::parse_scripts(DefinitionManager const& definition_manager) { + return chance.parse_scripts(definition_manager); +} + +bool SongChanceManager::load_songs_file(ast::NodeCPtr root) { + bool ret = true; + + ret &= expect_dictionary_reserve_length( + song_chances, + [this](std::string_view key, ast::NodeCPtr value) -> bool { + if (key != "song") { + Logger::error("Invalid song declaration ", key); + return false; + } + std::string_view name {}; + ConditionalWeight chance { scope_t::COUNTRY, scope_t::COUNTRY, scope_t::NO_SCOPE }; + + bool ret = expect_dictionary_keys( + "name", ONE_EXACTLY, expect_string(assign_variable_callback(name)), + "chance", ONE_EXACTLY, chance.expect_conditional_weight(ConditionalWeight::BASE) + )(value); + + ret &= song_chances.add_item({song_chances.size(), name, std::move(chance) }); + return ret; + } + )(root); + + if(song_chances.size() == 0) { + Logger::error("No songs found in Songs.txt"); + return false; + } + + return ret; +} + +bool SongChanceManager::parse_scripts(DefinitionManager const& definition_manager) { + bool ret = true; + for (SongChance& songChance : song_chances.get_items()) { + ret &= songChance.parse_scripts(definition_manager); + } + return ret; +} \ No newline at end of file -- cgit v1.2.3-56-ga3b1