2011-12-14 00:35:28 +03:00
/*
2011-12-22 16:05:19 +03:00
* BattleHex . h , part of VCMI engine
2011-12-14 00:35:28 +03: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
*
*/
2017-01-29 17:38:13 +02:00
# pragma once
# include "GameConstants.h"
2011-12-14 00:35:28 +03:00
// for battle stacks' positions
2017-03-15 23:58:25 +02:00
struct DLL_LINKAGE BattleHex //TODO: decide if this should be changed to class for better code design
2011-12-14 00:35:28 +03:00
{
2017-01-29 17:38:13 +02:00
si16 hex ;
2011-12-14 00:35:28 +03:00
static const si16 INVALID = - 1 ;
2017-05-29 09:33:34 +02:00
enum EDir { TOP_LEFT , TOP_RIGHT , RIGHT , BOTTOM_RIGHT , BOTTOM_LEFT , LEFT } ;
2011-12-14 00:35:28 +03:00
2017-01-29 17:38:13 +02:00
BattleHex ( ) ;
BattleHex ( si16 _hex ) ;
BattleHex ( si16 x , si16 y ) ;
BattleHex ( std : : pair < si16 , si16 > xy ) ;
operator si16 ( ) const ;
bool isValid ( ) const ;
bool isAvailable ( ) const ; //valid position not in first or last column
void setX ( si16 x ) ;
void setY ( si16 y ) ;
void setXY ( si16 x , si16 y , bool hasToBeValid = true ) ;
void setXY ( std : : pair < si16 , si16 > xy ) ;
si16 getX ( ) const ;
si16 getY ( ) const ;
std : : pair < si16 , si16 > getXY ( ) const ;
2017-05-29 09:33:34 +02:00
BattleHex & moveInDirection ( EDir dir , bool hasToBeValid = true ) ;
BattleHex & operator + = ( EDir dir ) ;
BattleHex cloneInDirection ( EDir dir , bool hasToBeValid = true ) const ;
2017-01-29 17:38:13 +02:00
BattleHex operator + ( EDir dir ) const ;
2011-12-22 16:05:19 +03:00
std : : vector < BattleHex > neighbouringTiles ( ) const ;
static signed char mutualPosition ( BattleHex hex1 , BattleHex hex2 ) ;
static char getDistance ( BattleHex hex1 , BattleHex hex2 ) ;
2017-01-29 17:38:13 +02:00
static void checkAndPush ( BattleHex tile , std : : vector < BattleHex > & ret ) ;
static BattleHex getClosestTile ( bool attackerOwned , BattleHex initialPos , std : : set < BattleHex > & possibilities ) ; //TODO: vector or set? copying one to another is bad
2011-12-14 00:35:28 +03:00
2017-01-29 17:38:13 +02:00
template < typename Handler >
void serialize ( Handler & h , const int version )
2011-12-14 00:35:28 +03:00
{
h & hex ;
}
2013-11-09 19:25:20 +03:00
} ;
2013-11-10 00:29:46 +03:00
DLL_EXPORT std : : ostream & operator < < ( std : : ostream & os , const BattleHex & hex ) ;