From a1e8d95028f2ce0e90379ec2ae54ef324351b6e6 Mon Sep 17 00:00:00 2001 From: Konstantin Date: Mon, 17 Apr 2023 00:41:50 +0300 Subject: [PATCH] vcmi: rework CArtHandler --- lib/CArtHandler.cpp | 33 ++++++++++++++------------------- lib/CArtHandler.h | 2 -- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/lib/CArtHandler.cpp b/lib/CArtHandler.cpp index ea45384ab..043240a0b 100644 --- a/lib/CArtHandler.cpp +++ b/lib/CArtHandler.cpp @@ -740,9 +740,21 @@ void CArtHandler::erasePickedArt(const ArtifactID & id) { CArtifact *art = objects[id]; - if(auto artl = listFromClass(art->aClass)) + if(!(art->aClass & CArtifact::ART_SPECIAL)) { - auto & artifactList = artl->get(); + auto & artifactList = treasures; + switch(art->aClass) + { + case CArtifact::ART_MINOR: + artifactList = minors; + break; + case CArtifact::ART_MAJOR: + artifactList = majors; + break; + case CArtifact::ART_RELIC: + artifactList = relics; + break; + } if(artifactList.empty()) fillList(artifactList, art->aClass); @@ -759,23 +771,6 @@ void CArtHandler::erasePickedArt(const ArtifactID & id) logMod->warn("Problem: cannot find list for artifact %s, strange class. (special?)", art->getNameTranslated()); } -std::optional>> CArtHandler::listFromClass(CArtifact::EartClass artifactClass) -{ - switch(artifactClass) - { - case CArtifact::ART_TREASURE: - return {std::ref(treasures)}; - case CArtifact::ART_MINOR: - return {std::ref(minors)}; - case CArtifact::ART_MAJOR: - return {std::ref(majors)}; - case CArtifact::ART_RELIC: - return {std::ref(relics)}; - default: //special artifacts should not be erased - return {}; - } -} - void CArtHandler::fillList( std::vector &listToBeFilled, CArtifact::EartClass artifactClass ) { assert(listToBeFilled.empty()); diff --git a/lib/CArtHandler.h b/lib/CArtHandler.h index c8625a2c2..90d1a0d81 100644 --- a/lib/CArtHandler.h +++ b/lib/CArtHandler.h @@ -244,8 +244,6 @@ public: void fillList(std::vector &listToBeFilled, CArtifact::EartClass artifactClass); //fills given empty list with allowed artifacts of given class. No side effects - std::optional>> listFromClass(CArtifact::EartClass artifactClass); - static CArtifact::EartClass stringToClass(const std::string & className); //TODO: rework EartClass to make this a constructor /// Gets a artifact ID randomly and removes the selected artifact from this handler.