1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-12-24 00:36:29 +02:00

Quests in map now use shared_ptr instead of const ptr

This commit is contained in:
Ivan Savenko
2025-03-09 22:44:36 +00:00
parent 417ea6451a
commit 797646cc05
20 changed files with 64 additions and 39 deletions

View File

@@ -194,9 +194,6 @@ CMap::~CMap()
for(auto obj : objects)
obj.dellNull();
for(auto quest : quests)
quest.dellNull();
for(auto artInstance : artInstances)
artInstance.dellNull();
@@ -527,17 +524,15 @@ void CMap::removeArtifactInstance(CArtifactSet & set, const ArtifactPosition & s
art->addPlacementMap(partsMap);
}
void CMap::addNewQuestInstance(CQuest* quest)
void CMap::addNewQuestInstance(std::shared_ptr<CQuest> quest)
{
quest->qid = static_cast<si32>(quests.size());
quests.emplace_back(quest);
}
void CMap::removeQuestInstance(CQuest * quest)
void CMap::removeQuestInstance(std::shared_ptr<CQuest> quest)
{
//TODO: should be called only by map editor.
//During game, completed quests or quests from removed objects stay forever
//Shift indexes
auto iter = std::next(quests.begin(), quest->qid);
@@ -548,6 +543,13 @@ void CMap::removeQuestInstance(CQuest * quest)
}
}
void CMap::clearQuestInstance(const CQuest * quest)
{
assert(quests.at(quest->qid).get() == quest);
quests.at(quest->qid) = nullptr;
}
void CMap::setUniqueInstanceName(CGObjectInstance * obj)
{
//this gives object unique name even if objects are removed later