1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-14 10:12:59 +02:00

search basic implementation

This commit is contained in:
Laserlicht 2024-10-01 18:15:32 +02:00
parent f816c3306b
commit d04f369d85
5 changed files with 40 additions and 1 deletions

View File

@ -36,6 +36,7 @@
#include "../../lib/mapObjects/CGTownInstance.h" #include "../../lib/mapObjects/CGTownInstance.h"
#include "../../lib/mapping/CMap.h" #include "../../lib/mapping/CMap.h"
#include "../../lib/pathfinder/CGPathNode.h" #include "../../lib/pathfinder/CGPathNode.h"
#include "../../lib/mapObjectConstructors/CObjectClassesHandler.h"
AdventureMapShortcuts::AdventureMapShortcuts(AdventureMapInterface & owner) AdventureMapShortcuts::AdventureMapShortcuts(AdventureMapInterface & owner)
: owner(owner) : owner(owner)
@ -109,7 +110,8 @@ std::vector<AdventureMapShortcutState> AdventureMapShortcuts::getShortcuts()
{ EShortcut::ADVENTURE_MOVE_HERO_EE, optionHeroSelected(), [this]() { this->moveHeroDirectional({+1, 0}); } }, { EShortcut::ADVENTURE_MOVE_HERO_EE, optionHeroSelected(), [this]() { this->moveHeroDirectional({+1, 0}); } },
{ EShortcut::ADVENTURE_MOVE_HERO_NW, optionHeroSelected(), [this]() { this->moveHeroDirectional({-1, -1}); } }, { EShortcut::ADVENTURE_MOVE_HERO_NW, optionHeroSelected(), [this]() { this->moveHeroDirectional({-1, -1}); } },
{ EShortcut::ADVENTURE_MOVE_HERO_NN, optionHeroSelected(), [this]() { this->moveHeroDirectional({ 0, -1}); } }, { EShortcut::ADVENTURE_MOVE_HERO_NN, optionHeroSelected(), [this]() { this->moveHeroDirectional({ 0, -1}); } },
{ EShortcut::ADVENTURE_MOVE_HERO_NE, optionHeroSelected(), [this]() { this->moveHeroDirectional({+1, -1}); } } { EShortcut::ADVENTURE_MOVE_HERO_NE, optionHeroSelected(), [this]() { this->moveHeroDirectional({+1, -1}); } },
{ EShortcut::ADVENTURE_SEARCH, optionSidePanelActive(),[this]() { this->search(); } }
}; };
return result; return result;
} }
@ -457,6 +459,39 @@ void AdventureMapShortcuts::zoom( int distance)
owner.hotkeyZoom(distance, false); owner.hotkeyZoom(distance, false);
} }
void AdventureMapShortcuts::search()
{
LOCPLINT->showInfoDialog("search");
std::vector<ObjectInstanceID> visitableObjInstances;
int3 mapSizes = LOCPLINT->cb->getMapSize();
for(int x = 0; x < mapSizes.x; x++)
for(int y = 0; y < mapSizes.y; y++)
for(int z = 0; z < mapSizes.z; z++)
for(auto & obj : LOCPLINT->cb->getVisitableObjs(int3(x, y, z), false))
visitableObjInstances.push_back(obj->id);
// count of elements for each group
std::map<MapObjectID, int> mapObjCount;
for(auto & obj : visitableObjInstances)
mapObjCount[LOCPLINT->cb->getObjInstance(obj)->getObjGroupIndex()]++;
// sort by name
std::vector<std::pair<int, int>> mapObjCountList;
for (auto itr = mapObjCount.begin(); itr != mapObjCount.end(); ++itr)
mapObjCountList.push_back(*itr);
std::sort(mapObjCountList.begin(), mapObjCountList.end(),
[=](std::pair<int, int>& a, std::pair<int, int>& b)
{
return VLC->objtypeh->getObjectName(a.first, 0) < VLC->objtypeh->getObjectName(b.first, 0);
}
);
//TODO show table as popup
for(auto & obj : mapObjCountList)
std::cout << VLC->objtypeh->getObjectName(obj.first, 0) << " " << obj.second << "\n";
}
void AdventureMapShortcuts::nextObject() void AdventureMapShortcuts::nextObject()
{ {
const CGHeroInstance *h = LOCPLINT->localState->getCurrentHero(); const CGHeroInstance *h = LOCPLINT->localState->getCurrentHero();

View File

@ -71,6 +71,7 @@ class AdventureMapShortcuts
void nextTown(); void nextTown();
void nextObject(); void nextObject();
void zoom( int distance); void zoom( int distance);
void search();
void moveHeroDirectional(const Point & direction); void moveHeroDirectional(const Point & direction);
public: public:

View File

@ -161,6 +161,7 @@ enum class EShortcut
ADVENTURE_RESTART_GAME, ADVENTURE_RESTART_GAME,
ADVENTURE_TO_MAIN_MENU, ADVENTURE_TO_MAIN_MENU,
ADVENTURE_QUIT_GAME, ADVENTURE_QUIT_GAME,
ADVENTURE_SEARCH,
// Move hero one tile in specified direction. Bound to cursors & numpad buttons // Move hero one tile in specified direction. Bound to cursors & numpad buttons
ADVENTURE_MOVE_HERO_SW, ADVENTURE_MOVE_HERO_SW,

View File

@ -209,6 +209,7 @@ EShortcut ShortcutHandler::findShortcut(const std::string & identifier ) const
{"adventureZoomIn", EShortcut::ADVENTURE_ZOOM_IN }, {"adventureZoomIn", EShortcut::ADVENTURE_ZOOM_IN },
{"adventureZoomOut", EShortcut::ADVENTURE_ZOOM_OUT }, {"adventureZoomOut", EShortcut::ADVENTURE_ZOOM_OUT },
{"adventureZoomReset", EShortcut::ADVENTURE_ZOOM_RESET }, {"adventureZoomReset", EShortcut::ADVENTURE_ZOOM_RESET },
{"adventureSearch", EShortcut::ADVENTURE_SEARCH },
{"battleToggleHeroesStats", EShortcut::BATTLE_TOGGLE_HEROES_STATS}, {"battleToggleHeroesStats", EShortcut::BATTLE_TOGGLE_HEROES_STATS},
{"battleToggleQueue", EShortcut::BATTLE_TOGGLE_QUEUE }, {"battleToggleQueue", EShortcut::BATTLE_TOGGLE_QUEUE },
{"battleUseCreatureSpell", EShortcut::BATTLE_USE_CREATURE_SPELL }, {"battleUseCreatureSpell", EShortcut::BATTLE_USE_CREATURE_SPELL },

View File

@ -56,6 +56,7 @@
"adventureZoomIn": "Keypad +", "adventureZoomIn": "Keypad +",
"adventureZoomOut": "Keypad -", "adventureZoomOut": "Keypad -",
"adventureZoomReset": "Backspace", "adventureZoomReset": "Backspace",
"adventureSearch": "Ctrl+F",
"battleAutocombat": "A", "battleAutocombat": "A",
"battleAutocombatEnd": "Q", "battleAutocombatEnd": "Q",
"battleCastSpell": "C", "battleCastSpell": "C",