From 77006ce97321d4df96ff6e0cfc1e3677485e13d9 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Thu, 6 Feb 2020 13:27:26 +0100 Subject: [PATCH] Migrate magazine compatibility --- src/item_factory.cpp | 33 +++++++++++++++++++++++++++++++++ src/item_factory.h | 1 + 2 files changed, 34 insertions(+) diff --git a/src/item_factory.cpp b/src/item_factory.cpp index b0a600e4238b2..cc7a38f74823d 100644 --- a/src/item_factory.cpp +++ b/src/item_factory.cpp @@ -275,6 +275,27 @@ void Item_factory::finalize_pre( itype &obj ) } } + // Migrate compataible magazines + for( auto kv : obj.magazines ) { + for( auto mag_it = kv.second.begin(); mag_it != kv.second.end(); ) { + auto maybe_migrated = migrated_magazines.find( *mag_it ); + if( maybe_migrated != migrated_magazines.end() ) { + mag_it = kv.second.erase( mag_it ); + kv.second.insert( kv.second.begin(), maybe_migrated->second ); + } else { + ++mag_it; + } + } + } + + // Migrate default magazines + for( auto kv : obj.magazine_default ) { + auto maybe_migrated = migrated_magazines.find( kv.second ); + if( maybe_migrated != migrated_magazines.end() ) { + kv.second = maybe_migrated->second; + } + } + if( obj.mod ) { // Migrate acceptable ammo and ammo modifiers migrate_ammo_set( obj.mod->acceptable_ammo ); @@ -598,6 +619,18 @@ void Item_factory::finalize_item_blacklist() migrate.first ); } } + + // migrate magazines as well + auto maybe_mag = m_templates.find( migrate.first ); + if( maybe_mag != m_templates.end() && maybe_mag->second.magazine ) { + auto replacement = m_templates.find( migrate.second.replace ); + if( replacement->second.magazine ) { + migrated_magazines.emplace( std::make_pair( migrate.first, migrate.second.replace ) ); + } else { + debugmsg( "Replacement item %s for migrated magazine %s is not a magazine.", migrate.second.replace, + migrate.first ); + } + } } for( vproto_id &vid : vehicle_prototype::get_all() ) { vehicle_prototype &prototype = const_cast( vid.obj() ); diff --git a/src/item_factory.h b/src/item_factory.h index 864b2bfb6c3a5..f936b7fc48f82 100644 --- a/src/item_factory.h +++ b/src/item_factory.h @@ -249,6 +249,7 @@ class Item_factory GroupMap m_template_groups; std::unordered_map migrated_ammo; + std::unordered_map migrated_magazines; /** Checks that ammo is listed in ammunition_type::name(). * At least one instance of this ammo type should be defined.