2009-04-15 14:03:31 +00:00
|
|
|
/*
|
2017-07-13 11:26:03 +03:00
|
|
|
* CCursorHandler.h, part of VCMI engine
|
2009-04-15 14:03:31 +00: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
|
|
|
|
*
|
2009-04-16 11:14:13 +00:00
|
|
|
*/
|
2017-07-13 11:26:03 +03:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
class CAnimImage;
|
|
|
|
struct SDL_Surface;
|
2009-04-16 11:14:13 +00:00
|
|
|
|
2012-03-30 21:36:07 +00:00
|
|
|
namespace ECursor
|
|
|
|
{
|
2017-07-20 02:50:47 +03:00
|
|
|
enum ECursorTypes
|
|
|
|
{
|
|
|
|
ADVENTURE,
|
|
|
|
COMBAT,
|
|
|
|
DEFAULT,
|
|
|
|
SPELLBOOK
|
|
|
|
};
|
2012-03-30 21:36:07 +00:00
|
|
|
|
2017-07-20 02:50:47 +03:00
|
|
|
enum EBattleCursors
|
|
|
|
{
|
|
|
|
COMBAT_BLOCKED,
|
|
|
|
COMBAT_MOVE,
|
|
|
|
COMBAT_FLY,
|
|
|
|
COMBAT_SHOOT,
|
|
|
|
COMBAT_HERO,
|
|
|
|
COMBAT_QUERY,
|
|
|
|
COMBAT_POINTER,
|
|
|
|
//various attack frames
|
|
|
|
COMBAT_SHOOT_PENALTY = 15,
|
|
|
|
COMBAT_SHOOT_CATAPULT,
|
|
|
|
COMBAT_HEAL,
|
|
|
|
COMBAT_SACRIFICE,
|
|
|
|
COMBAT_TELEPORT
|
|
|
|
};
|
2012-03-30 21:36:07 +00:00
|
|
|
}
|
|
|
|
|
2011-02-22 11:52:36 +00:00
|
|
|
/// handles mouse cursor
|
2017-07-20 02:50:47 +03:00
|
|
|
class CCursorHandler
|
2009-04-16 11:14:13 +00:00
|
|
|
{
|
|
|
|
SDL_Surface * help;
|
2012-12-14 15:32:53 +00:00
|
|
|
CAnimImage * currentCursor;
|
|
|
|
CAnimImage * dndObject; //if set, overrides currentCursor
|
|
|
|
bool showing;
|
|
|
|
|
2014-07-03 15:10:01 +04:00
|
|
|
/// Draw cursor preserving original image below cursor
|
|
|
|
void drawWithScreenRestore();
|
|
|
|
/// Restore original image below cursor
|
|
|
|
void drawRestored();
|
|
|
|
/// Simple draw cursor
|
2017-07-20 02:50:47 +03:00
|
|
|
void draw(SDL_Surface * to);
|
|
|
|
|
2012-12-14 15:32:53 +00:00
|
|
|
public:
|
|
|
|
/// position of cursor
|
|
|
|
int xpos, ypos;
|
|
|
|
|
|
|
|
/// Current cursor
|
|
|
|
ECursor::ECursorTypes type;
|
|
|
|
size_t frame;
|
|
|
|
|
|
|
|
/// inits cursorHandler - run only once, it's not memleak-proof (rev 1333)
|
|
|
|
void initCursor();
|
|
|
|
|
|
|
|
/// changes cursor graphic for type type (0 - adventure, 1 - combat, 2 - default, 3 - spellbook) and frame index (not used for type 3)
|
|
|
|
void changeGraphic(ECursor::ECursorTypes type, int index);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Replaces the cursor with a custom image.
|
|
|
|
*
|
2013-06-26 11:18:27 +00:00
|
|
|
* @param image Image to replace cursor with or nullptr to use the normal
|
2012-12-14 15:32:53 +00:00
|
|
|
* cursor. CursorHandler takes ownership of object
|
|
|
|
*/
|
2017-07-20 02:50:47 +03:00
|
|
|
void dragAndDropCursor(CAnimImage * image);
|
|
|
|
|
2014-07-03 15:10:01 +04:00
|
|
|
void render();
|
2009-08-30 12:47:40 +00:00
|
|
|
|
2017-07-20 02:50:47 +03:00
|
|
|
void shiftPos(int & x, int & y);
|
|
|
|
void hide() { showing = 0; };
|
|
|
|
void show() { showing = 1; };
|
2012-12-14 15:32:53 +00:00
|
|
|
|
|
|
|
/// change cursor's positions to (x, y)
|
|
|
|
void cursorMove(const int & x, const int & y);
|
|
|
|
/// Move cursor to screen center
|
2011-04-05 17:38:24 +00:00
|
|
|
void centerCursor();
|
2012-12-14 15:32:53 +00:00
|
|
|
|
2009-10-25 14:36:11 +00:00
|
|
|
~CCursorHandler();
|
2009-04-16 11:14:13 +00:00
|
|
|
};
|