/* * CBattleFieldController.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 "../../lib/battle/BattleHex.h" #include "../gui/CIntObject.h" struct SDL_Surface; struct Rect; struct Point; class CClickableHex; class CCanvas; class CStack; class IImage; class CBattleInterface; class CBattleFieldController : public CIntObject { CBattleInterface * owner; std::shared_ptr background; std::shared_ptr cellBorder; std::shared_ptr cellShade; std::shared_ptr cellBorders; /// Canvas that contains background, hex grid (if enabled), absolute obstacles and movement range of active stack std::shared_ptr backgroundWithHexes; //BattleHex previouslyHoveredHex; //number of hex that was hovered by the cursor a while ago //BattleHex currentlyHoveredHex; //number of hex that is supposed to be hovered (for a while it may be inappropriately set, but will be renewed soon) BattleHex attackingHex; //hex from which the stack would perform attack with current cursor std::vector occupyableHexes; //hexes available for active stack std::array stackCountOutsideHexes; // hexes that when in front of a unit cause it's amount box to move back std::vector> bfield; //11 lines, 17 hexes on each void showHighlightedHex(std::shared_ptr to, BattleHex hex, bool darkBorder); std::set getHighlightedHexesStackRange(); std::set getHighlightedHexesSpellRange(); public: CBattleFieldController(CBattleInterface * owner); void showBackgroundImage(std::shared_ptr canvas); void showBackgroundImageWithHexes(std::shared_ptr canvas); void redrawBackgroundWithHexes(); void showHighlightedHexes(std::shared_ptr canvas); Rect hexPositionLocal(BattleHex hex) const; Rect hexPosition(BattleHex hex) const; bool isPixelInHex(Point const & position); BattleHex getHoveredHex(); void setBattleCursor(BattleHex myNumber); BattleHex fromWhichHexAttack(BattleHex myNumber); bool isTileAttackable(const BattleHex & number) const; bool stackCountOutsideHex(const BattleHex & number) const; };