1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-18 03:21:27 +02:00

search with CObjectListWindow

This commit is contained in:
Laserlicht 2024-10-01 19:47:10 +02:00
parent d04f369d85
commit 5ea9063a3b
3 changed files with 26 additions and 6 deletions

View File

@ -13,6 +13,8 @@
"vcmi.adventureMap.monsterThreat.levels.10" : "Deadly", "vcmi.adventureMap.monsterThreat.levels.10" : "Deadly",
"vcmi.adventureMap.monsterThreat.levels.11" : "Impossible", "vcmi.adventureMap.monsterThreat.levels.11" : "Impossible",
"vcmi.adventureMap.monsterLevel" : "\n\nLevel %LEVEL %TOWN unit", "vcmi.adventureMap.monsterLevel" : "\n\nLevel %LEVEL %TOWN unit",
"vcmi.adventureMap.search.hover" : "Search map object",
"vcmi.adventureMap.search.help" : "Select object to search on map.",
"vcmi.adventureMap.confirmRestartGame" : "Are you sure you want to restart the game?", "vcmi.adventureMap.confirmRestartGame" : "Are you sure you want to restart the game?",
"vcmi.adventureMap.noTownWithMarket" : "There are no available marketplaces!", "vcmi.adventureMap.noTownWithMarket" : "There are no available marketplaces!",

View File

@ -13,6 +13,8 @@
"vcmi.adventureMap.monsterThreat.levels.10" : "Tödlich", "vcmi.adventureMap.monsterThreat.levels.10" : "Tödlich",
"vcmi.adventureMap.monsterThreat.levels.11" : "Unmöglich", "vcmi.adventureMap.monsterThreat.levels.11" : "Unmöglich",
"vcmi.adventureMap.monsterLevel" : "\n\nStufe %LEVEL %TOWN-Einheit", "vcmi.adventureMap.monsterLevel" : "\n\nStufe %LEVEL %TOWN-Einheit",
"vcmi.adventureMap.search.hover" : "Suche Kartenobjekt",
"vcmi.adventureMap.search.help" : "Wähle Objekt das gesucht werden soll.",
"vcmi.adventureMap.confirmRestartGame" : "Seid Ihr sicher, dass Ihr das Spiel neu starten wollt?", "vcmi.adventureMap.confirmRestartGame" : "Seid Ihr sicher, dass Ihr das Spiel neu starten wollt?",
"vcmi.adventureMap.noTownWithMarket" : "Kein Marktplatz verfügbar!", "vcmi.adventureMap.noTownWithMarket" : "Kein Marktplatz verfügbar!",

View File

@ -24,6 +24,7 @@
#include "../windows/CKingdomInterface.h" #include "../windows/CKingdomInterface.h"
#include "../windows/CSpellWindow.h" #include "../windows/CSpellWindow.h"
#include "../windows/CMarketWindow.h" #include "../windows/CMarketWindow.h"
#include "../windows/GUIClasses.h"
#include "../windows/settings/SettingsMainWindow.h" #include "../windows/settings/SettingsMainWindow.h"
#include "AdventureMapInterface.h" #include "AdventureMapInterface.h"
#include "AdventureOptions.h" #include "AdventureOptions.h"
@ -461,8 +462,6 @@ void AdventureMapShortcuts::zoom( int distance)
void AdventureMapShortcuts::search() void AdventureMapShortcuts::search()
{ {
LOCPLINT->showInfoDialog("search");
std::vector<ObjectInstanceID> visitableObjInstances; std::vector<ObjectInstanceID> visitableObjInstances;
int3 mapSizes = LOCPLINT->cb->getMapSize(); int3 mapSizes = LOCPLINT->cb->getMapSize();
for(int x = 0; x < mapSizes.x; x++) for(int x = 0; x < mapSizes.x; x++)
@ -477,19 +476,36 @@ void AdventureMapShortcuts::search()
mapObjCount[LOCPLINT->cb->getObjInstance(obj)->getObjGroupIndex()]++; mapObjCount[LOCPLINT->cb->getObjInstance(obj)->getObjGroupIndex()]++;
// sort by name // sort by name
std::vector<std::pair<int, int>> mapObjCountList; std::vector<std::pair<MapObjectID, int>> mapObjCountList;
for (auto itr = mapObjCount.begin(); itr != mapObjCount.end(); ++itr) for (auto itr = mapObjCount.begin(); itr != mapObjCount.end(); ++itr)
mapObjCountList.push_back(*itr); mapObjCountList.push_back(*itr);
std::sort(mapObjCountList.begin(), mapObjCountList.end(), std::sort(mapObjCountList.begin(), mapObjCountList.end(),
[=](std::pair<int, int>& a, std::pair<int, int>& b) [=](std::pair<MapObjectID, int>& a, std::pair<MapObjectID, int>& b)
{ {
return VLC->objtypeh->getObjectName(a.first, 0) < VLC->objtypeh->getObjectName(b.first, 0); return VLC->objtypeh->getObjectName(a.first, 0) < VLC->objtypeh->getObjectName(b.first, 0);
} }
); );
//TODO show table as popup std::vector<std::string> texts;
for(auto & obj : mapObjCountList) for(auto & obj : mapObjCountList)
std::cout << VLC->objtypeh->getObjectName(obj.first, 0) << " " << obj.second << "\n"; texts.push_back(VLC->objtypeh->getObjectName(obj.first, 0) + " (" + std::to_string(obj.second) + ")");
GH.windows().createAndPushWindow<CObjectListWindow>(texts, nullptr,
CGI->generaltexth->translate("vcmi.adventureMap.search.hover"),
CGI->generaltexth->translate("vcmi.adventureMap.search.help"),
[this, mapObjCountList, visitableObjInstances](int index)
{
auto selObj = mapObjCountList[index].first;
for(auto & obj : visitableObjInstances)
{
auto objInst = LOCPLINT->cb->getObjInstance(obj);
if(selObj == objInst->getObjGroupIndex())
owner.centerOnObject(objInst);
}
},
0);
} }
void AdventureMapShortcuts::nextObject() void AdventureMapShortcuts::nextObject()