2017-07-13 10:26:03 +02:00
|
|
|
/*
|
2023-02-01 16:42:03 +02:00
|
|
|
* CMinimap.h, part of VCMI engine
|
2017-07-13 10:26:03 +02:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*
|
|
|
|
*/
|
2012-06-13 16:04:06 +03:00
|
|
|
#pragma once
|
|
|
|
|
2023-02-01 20:42:06 +02:00
|
|
|
#include "../gui/CIntObject.h"
|
|
|
|
#include "../../lib/GameConstants.h"
|
2012-06-13 16:04:06 +03:00
|
|
|
|
|
|
|
|
2023-02-01 20:42:06 +02:00
|
|
|
struct SDL_Color;
|
2012-06-13 16:04:06 +03:00
|
|
|
class CMinimap;
|
|
|
|
|
|
|
|
class CMinimapInstance : public CIntObject
|
|
|
|
{
|
2018-04-07 13:34:11 +02:00
|
|
|
CMinimap * parent;
|
2012-06-13 16:04:06 +03:00
|
|
|
SDL_Surface * minimap;
|
|
|
|
int level;
|
|
|
|
|
|
|
|
//get color of selected tile on minimap
|
|
|
|
const SDL_Color & getTileColor(const int3 & pos);
|
|
|
|
|
2018-04-07 13:34:11 +02:00
|
|
|
void blitTileWithColor(const SDL_Color & color, const int3 & pos, SDL_Surface * to, int x, int y);
|
2012-06-13 16:04:06 +03:00
|
|
|
|
|
|
|
//draw minimap already scaled.
|
|
|
|
//result is not antialiased. Will result in "missing" pixels on huge maps (>144)
|
|
|
|
void drawScaled(int level);
|
|
|
|
public:
|
|
|
|
CMinimapInstance(CMinimap * parent, int level);
|
|
|
|
~CMinimapInstance();
|
|
|
|
|
2018-04-07 13:34:11 +02:00
|
|
|
void showAll(SDL_Surface * to) override;
|
|
|
|
void tileToPixels (const int3 & tile, int & x, int & y, int toX = 0, int toY = 0);
|
|
|
|
void refreshTile(const int3 & pos);
|
2012-06-13 16:04:06 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
/// Minimap which is displayed at the right upper corner of adventure map
|
|
|
|
class CMinimap : public CIntObject
|
|
|
|
{
|
2012-07-08 19:36:20 +03:00
|
|
|
protected:
|
2018-04-07 13:34:11 +02:00
|
|
|
std::shared_ptr<CPicture> aiShield; //the graphic displayed during AI turn
|
|
|
|
std::shared_ptr<CMinimapInstance> minimap;
|
2012-06-13 16:04:06 +03:00
|
|
|
int level;
|
|
|
|
|
|
|
|
//to initialize colors
|
2022-09-29 11:44:46 +02:00
|
|
|
std::map<TerrainId, std::pair<SDL_Color, SDL_Color> > loadColors();
|
2012-06-13 16:04:06 +03:00
|
|
|
|
2015-10-12 15:47:10 +02:00
|
|
|
void clickLeft(tribool down, bool previousState) override;
|
|
|
|
void clickRight(tribool down, bool previousState) override;
|
|
|
|
void hover (bool on) override;
|
2023-02-02 15:49:23 +02:00
|
|
|
void mouseMoved (const Point & cursorPosition) override;
|
2012-06-13 16:04:06 +03:00
|
|
|
|
2012-07-07 11:45:45 +03:00
|
|
|
void moveAdvMapSelection();
|
|
|
|
|
2012-06-13 16:04:06 +03:00
|
|
|
public:
|
|
|
|
// terrainID -> (normal color, blocked color)
|
2022-09-29 11:44:46 +02:00
|
|
|
const std::map<TerrainId, std::pair<SDL_Color, SDL_Color> > colors;
|
2012-06-13 16:04:06 +03:00
|
|
|
|
|
|
|
CMinimap(const Rect & position);
|
|
|
|
|
|
|
|
//should be called to invalidate whole map - different player or level
|
2012-07-08 19:36:20 +03:00
|
|
|
int3 translateMousePosition();
|
2012-06-13 16:04:06 +03:00
|
|
|
void update();
|
|
|
|
void setLevel(int level);
|
|
|
|
void setAIRadar(bool on);
|
|
|
|
|
2015-10-12 15:47:10 +02:00
|
|
|
void showAll(SDL_Surface * to) override;
|
2012-06-13 16:04:06 +03:00
|
|
|
|
|
|
|
void hideTile(const int3 &pos); //puts FoW
|
|
|
|
void showTile(const int3 &pos); //removes FoW
|
|
|
|
};
|
|
|
|
|