mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-27 21:49:10 +02:00
- copy of campaign heroes can be done later (at the point where it's clear if they will be replaced)
This commit is contained in:
parent
1d17d60449
commit
40ab89e179
@ -1268,21 +1268,6 @@ CGameState::CrossoverHeroesList CGameState::getCrossoverHeroesFromPreviousScenar
|
||||
}
|
||||
}
|
||||
|
||||
// Now we need to perform deep copies of all heroes
|
||||
// The lambda below replaces pointer to a hero with a pointer to its deep copy.
|
||||
auto replaceWithDeepCopy = [](CGHeroInstance *&hero)
|
||||
{
|
||||
// We cache map original hero => copy.
|
||||
// We may be called multiple times with the same hero and should return a single copy.
|
||||
static std::map<CGHeroInstance*, CGHeroInstance*> oldToCopy;
|
||||
if(!oldToCopy[hero])
|
||||
oldToCopy[hero] = CMemorySerializer::deepCopy(*hero).release();
|
||||
|
||||
hero = oldToCopy[hero];
|
||||
};
|
||||
range::for_each(crossoverHeroes.heroesFromAnyPreviousScenarios, replaceWithDeepCopy);
|
||||
range::for_each(crossoverHeroes.heroesFromPreviousScenario, replaceWithDeepCopy);
|
||||
|
||||
return crossoverHeroes;
|
||||
}
|
||||
|
||||
@ -2808,7 +2793,7 @@ std::vector<CGameState::CampaignHeroReplacement> CGameState::generateCampaignHer
|
||||
{
|
||||
auto hero = *it;
|
||||
crossoverHeroes.removeHeroFromBothLists(hero);
|
||||
campaignHeroReplacements.push_back(CampaignHeroReplacement(hero, heroPlaceholder->id));
|
||||
campaignHeroReplacements.push_back(CampaignHeroReplacement(CMemorySerializer::deepCopy(*hero).release(), heroPlaceholder->id));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2843,7 +2828,8 @@ std::vector<CGameState::CampaignHeroReplacement> CGameState::generateCampaignHer
|
||||
auto heroPlaceholder = heroPlaceholders[i];
|
||||
if(crossoverHeroes.heroesFromPreviousScenario.size() > i)
|
||||
{
|
||||
campaignHeroReplacements.push_back(CampaignHeroReplacement(crossoverHeroes.heroesFromPreviousScenario[i], heroPlaceholder->id));
|
||||
auto hero = crossoverHeroes.heroesFromPreviousScenario[i];
|
||||
campaignHeroReplacements.push_back(CampaignHeroReplacement(CMemorySerializer::deepCopy(*hero).release(), heroPlaceholder->id));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user