1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-02-05 13:04:54 +02:00
vcmi/client/adventureMap/CMinimap.h
Ivan Savenko 6d8e447ff3 Added new right-click popup to teleporters
Whirlpool, Subterranean Gates, and all Monoliths now show custom popup
on right-click that show all linked objects (exits and entrances).

Only revealed objects are visible, rest are hidden behind fow.

Exits, entrances, and bidirectional objects have different icon that
indicates direction.
2024-12-21 12:01:33 +00:00

74 lines
2.0 KiB
C++

/*
* CMinimap.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
#include "../gui/CIntObject.h"
VCMI_LIB_NAMESPACE_BEGIN
class ColorRGBA;
VCMI_LIB_NAMESPACE_END
class Canvas;
class CMinimap;
class CMinimapInstance : public CIntObject
{
std::unique_ptr<Canvas> minimap;
int level;
//get color of selected tile on minimap
ColorRGBA getTileColor(const int3 & pos) const;
void redrawMinimap();
public:
CMinimapInstance(const Point & position, const Point & dimensions, int level);
~CMinimapInstance();
void showAll(Canvas & to) override;
void refreshTile(const int3 & pos);
};
/// Minimap which is displayed at the right upper corner of adventure map
class CMinimap : public CIntObject
{
std::shared_ptr<CPicture> aiShield; //the graphic displayed during AI turn
std::shared_ptr<CMinimapInstance> minimap;
Rect screenArea;
int level;
void gesturePanning(const Point & initialPosition, const Point & currentPosition, const Point & lastUpdateDistance) override;
void clickPressed(const Point & cursorPosition) override;
void showPopupWindow(const Point & cursorPosition) override;
void hover(bool on) override;
void mouseDragged(const Point & cursorPosition, const Point & lastUpdateDistance) override;
/// relocates center of adventure map screen to currently hovered tile
void moveAdvMapSelection(const Point & positionGlobal);
protected:
/// computes coordinates of tile below cursor pos
int3 pixelToTile(const Point & cursorPos) const;
/// computes position of tile within minimap instance
Point tileToPixels(const int3 & position) const;
public:
explicit CMinimap(const Rect & position);
void onMapViewMoved(const Rect & visibleArea, int mapLevel);
void update();
void setAIRadar(bool on);
void showAll(Canvas & to) override;
void updateTiles(const std::unordered_set<int3> & positions);
};