2008-02-25 01:06:27 +02:00
# pragma once
# include "global.h"
# include "CPlayerInterface.h"
2008-02-26 20:01:26 +02:00
2008-02-25 01:06:27 +02:00
class CCreatureSet ;
class CGHeroInstance ;
2008-03-03 21:41:10 +02:00
class CDefHandler ;
2008-03-04 19:25:58 +02:00
class CStack ;
2008-03-10 22:19:41 +02:00
class CCallback ;
2008-05-18 20:33:39 +03:00
class AdventureMapButton ;
2008-02-26 20:01:26 +02:00
2008-03-03 21:41:10 +02:00
class CBattleHero : public IShowable , public CIntObject
{
public :
2008-03-04 19:25:58 +02:00
bool flip ; //false if it's attacking hero, true otherwise
CDefHandler * dh , * flag ; //animation and flag
int phase ; //stage of animation
int image ; //frame of animation
unsigned char flagAnim , flagAnimCount ; //for flag animation
void show ( SDL_Surface * to ) ; //prints next frame of animation to to
CBattleHero ( std : : string defName , int phaseG , int imageG , bool filpG , unsigned char player ) ; //c-tor
2008-03-03 21:41:10 +02:00
~ CBattleHero ( ) ; //d-tor
} ;
2008-03-24 21:04:30 +02:00
class CBattleInterface ;
2008-05-27 16:16:35 +03:00
class CBattleHex : public Hoverable , public MotionInterested , public ClickableL , public ClickableR
2008-03-04 19:25:58 +02:00
{
2008-06-10 14:34:20 +03:00
private :
bool setAlterText ; //if true, this hex has set alternative text in console and will clean it
2008-03-10 22:19:41 +02:00
public :
2008-03-04 19:25:58 +02:00
unsigned int myNumber ;
bool accesible ;
2008-03-10 22:19:41 +02:00
//CStack * ourStack;
2008-03-15 19:48:05 +02:00
bool hovered , strictHovered ;
2008-03-24 21:04:30 +02:00
CBattleInterface * myInterface ; //interface that owns me
2008-04-14 21:24:46 +03:00
static std : : pair < int , int > getXYUnitAnim ( int hexNum , bool attacker , CCreature * creature ) ; //returns (x, y) of left top corner of animation
2008-06-11 13:27:30 +03:00
static signed char mutualPosition ( int hex1 , int hex2 ) ; //returns info about mutual position of given hexes (-1 - they're distant, 0 - left top, 1 - right top, 2 - right, 3 - right bottom, 4 - left bottom, 5 - left)
2008-03-10 22:19:41 +02:00
//for user interactions
void hover ( bool on ) ;
void activate ( ) ;
void deactivate ( ) ;
2008-03-15 19:48:05 +02:00
void mouseMoved ( SDL_MouseMotionEvent & sEvent ) ;
2008-03-24 15:25:11 +02:00
void clickLeft ( boost : : logic : : tribool down ) ;
2008-05-27 16:16:35 +03:00
void clickRight ( boost : : logic : : tribool down ) ;
2008-03-10 22:19:41 +02:00
CBattleHex ( ) ;
2008-03-04 19:25:58 +02:00
} ;
class CBattleObstacle
{
std : : vector < int > lockedHexes ;
} ;
2008-04-16 20:21:02 +03:00
class CBattleConsole : public IShowable , public CIntObject
{
private :
std : : vector < std : : string > texts ; //a place where texts are stored
2008-06-10 14:34:20 +03:00
int lastShown ; //last shown line of text
2008-04-16 20:21:02 +03:00
public :
2008-06-10 14:34:20 +03:00
std : : string alterTxt ; //if it's not empty, this text is displayed
2008-04-16 20:21:02 +03:00
CBattleConsole ( ) ; //c-tor
~ CBattleConsole ( ) ; //d-tor
void show ( SDL_Surface * to = 0 ) ;
bool addText ( std : : string text ) ; //adds text at the last position; returns false if failed (e.g. text longer than 70 characters)
void eraseText ( unsigned int pos ) ; //erases added text at position pos
void changeTextAt ( std : : string text , unsigned int pos ) ; //if we have more than pos texts, pos-th is changed to given one
void scrollUp ( unsigned int by = 1 ) ; //scrolls console up by 'by' positions
void scrollDown ( unsigned int by = 1 ) ; //scrolls console up by 'by' positions
} ;
2008-02-26 20:01:26 +02:00
class CBattleInterface : public IActivable , public IShowable
2008-02-25 01:06:27 +02:00
{
2008-02-26 20:01:26 +02:00
private :
2008-04-14 21:24:46 +03:00
SDL_Surface * background , * menu , * amountBasic , * amountNormal ;
2008-05-18 20:33:39 +03:00
AdventureMapButton * bOptions , * bSurrender , * bFlee , * bAutofight , * bSpell ,
2008-02-26 20:01:26 +02:00
* bWait , * bDefence , * bConsoleUp , * bConsoleDown ;
2008-04-16 20:21:02 +03:00
CBattleConsole * console ;
2008-03-03 21:41:10 +02:00
CBattleHero * attackingHero , * defendingHero ;
2008-03-05 19:01:41 +02:00
CCreatureSet * army1 , * army2 ; //fighting armies
2008-03-10 22:19:41 +02:00
CGHeroInstance * attackingHeroInstance , * defendingHeroInstance ;
2008-03-29 12:59:18 +02:00
std : : map < int , CCreatureAnimation * > creAnims ; //animations of creatures from fighting armies (order by BattleInfo's stacks' ID)
2008-04-14 21:24:46 +03:00
std : : map < int , bool > creDir ; // <creatureID, if false reverse creature's animation>
2008-03-15 19:48:05 +02:00
unsigned char animCount ;
2008-03-23 19:25:38 +02:00
int activeStack ; //number of active stack; -1 - no one
2008-03-29 12:59:18 +02:00
void showRange ( SDL_Surface * to , int ID ) ; //show helper funtion ot mark range of a unit
2008-03-10 22:19:41 +02:00
2008-06-06 16:53:33 +03:00
class CAttHelper
{
public :
int ID ; //attacking stack
int dest ; //atacked hex
int frame , maxframe ; //frame of animation, number of frames of animation
bool reversing ;
} * attackingInfo ;
void attackingShowHelper ( ) ;
2008-06-10 14:34:20 +03:00
void printConsoleAttacked ( int ID , int dmg , int killed , int IDby ) ;
2008-06-06 16:53:33 +03:00
2008-02-25 01:06:27 +02:00
public :
2008-03-14 20:24:37 +02:00
CBattleInterface ( CCreatureSet * army1 , CCreatureSet * army2 , CGHeroInstance * hero1 , CGHeroInstance * hero2 ) ; //c-tor
2008-03-04 19:25:58 +02:00
~ CBattleInterface ( ) ; //d-tor
2008-02-26 20:01:26 +02:00
2008-03-03 21:41:10 +02:00
//std::vector<TimeInterested*> timeinterested; //animation handling
2008-03-04 19:25:58 +02:00
bool printCellBorders ; //if true, cell borders will be printed
CBattleHex bfield [ 187 ] ; //11 lines, 17 hexes on each
std : : vector < CBattleObstacle * > obstacles ; //vector of obstacles on the battlefield
2008-03-14 20:24:37 +02:00
static SDL_Surface * cellBorder , * cellShade ;
2008-04-15 19:52:31 +03:00
BattleAction * givenCommand ; //true if we have i.e. moved current unit
2008-03-03 21:41:10 +02:00
2008-02-26 20:01:26 +02:00
//button handle funcs:
void bOptionsf ( ) ;
void bSurrenderf ( ) ;
void bFleef ( ) ;
void bAutofightf ( ) ;
void bSpellf ( ) ;
void bWaitf ( ) ;
void bDefencef ( ) ;
void bConsoleUpf ( ) ;
void bConsoleDownf ( ) ;
//end of button handle funcs
2008-02-25 01:06:27 +02:00
//napisz tu klase odpowiadajaca za wyswietlanie bitwy i obsluge uzytkownika, polecenia ma przekazywac callbackiem
void activate ( ) ;
void deactivate ( ) ;
2008-04-07 20:51:46 +03:00
void show ( SDL_Surface * to = NULL ) ;
2008-05-03 18:18:48 +03:00
bool reverseCreature ( int number , int hex , bool wideTrick = false ) ; //reverses animation of given creature playing animation of reversing
2008-03-14 20:24:37 +02:00
//call-ins
2008-03-23 19:25:38 +02:00
void newStack ( CStack stack ) ; //new stack appeared on battlefield
void stackRemoved ( CStack stack ) ; //stack disappeared from batlefiled
2008-06-10 14:34:20 +03:00
void stackKilled ( int ID , int dmg , int killed , int IDby ) ; //stack has been killed (but corpses remain)
2008-03-23 19:25:38 +02:00
void stackActivated ( int number ) ; //active stack has been changed
2008-04-14 21:24:46 +03:00
void stackMoved ( int number , int destHex , bool startMoving , bool endMoving ) ; //stack with id number moved to destHex
2008-06-10 14:34:20 +03:00
void stackIsAttacked ( int ID , int dmg , int killed , int IDby ) ; //called when stack id attacked by stack with id IDby
2008-04-07 20:51:46 +03:00
void stackAttacking ( int ID , int dest ) ; //called when stack with id ID is attacking something on hex dest
2008-04-19 20:10:57 +03:00
void newRound ( int number ) ; //caled when round is ended; number is the number of round
2008-03-24 21:04:30 +02:00
void hexLclicked ( int whichOne ) ; //hex only call-in
2008-05-27 16:16:35 +03:00
friend CBattleHex ;
2008-03-04 19:25:58 +02:00
} ;