2007-08-27 17:15:03 +03:00
# ifndef CCALLBACK_H
# define CCALLBACK_H
2007-10-16 20:46:01 +03:00
# include "mapHandler.h"
2007-11-19 00:58:28 +02:00
# include "tchar.h"
2007-08-27 17:15:03 +03:00
class CGameState ;
2007-09-14 16:11:10 +03:00
class CHeroInstance ;
2007-09-18 16:30:26 +03:00
class CTownInstance ;
2007-10-05 21:16:22 +03:00
class CPath ;
2007-10-27 22:38:48 +03:00
class CGObjectInstance ;
2007-12-09 14:42:45 +02:00
class SComponent ;
2007-12-25 18:25:53 +02:00
class IChosen ;
2007-12-27 02:11:46 +02:00
class CSelectableComponent ;
2007-11-19 00:58:28 +02:00
typedef struct lua_State lua_State ;
2007-12-06 20:32:06 +02:00
class ICallback
{
public :
virtual bool moveHero ( int ID , CPath * path , int idtype , int pathType = 0 ) = 0 ; //idtype: 0 - position in vector of heroes (of that player); 1 - ID of hero
//pathType: 0 - nodes are manifestation pos, 1 - nodes are object pos
//get info
virtual bool verifyPath ( CPath * path , bool blockSea ) = 0 ;
virtual int getDate ( int mode = 0 ) = 0 ; //mode=0 - total days in game, mode=1 - day of week, mode=2 - current week, mode=3 - current month
virtual PseudoV < PseudoV < PseudoV < unsigned char > > > & getVisibilityMap ( ) = 0 ; //returns visibility map (TODO: make it const)
virtual const CGHeroInstance * getHeroInfo ( int player , int val , bool mode ) = 0 ; //mode = 0 -> val = serial; mode = 1 -> val = ID
virtual int getResourceAmount ( int type ) = 0 ;
virtual int howManyHeroes ( ) = 0 ;
virtual const CGTownInstance * getTownInfo ( int val , bool mode ) = 0 ; //mode = 0 -> val = serial; mode = 1 -> val = ID
virtual int howManyTowns ( ) = 0 ;
virtual std : : vector < std : : string > getObjDescriptions ( int3 pos ) = 0 ; //returns descriptions of objects at pos in order from the lowest to the highest
2007-12-06 21:06:07 +02:00
virtual std : : vector < const CGHeroInstance * > getHeroesInfo ( bool onlyOur = true ) = 0 ;
2007-12-06 20:32:06 +02:00
virtual bool isVisible ( int3 pos ) = 0 ;
virtual int getMyColor ( ) = 0 ;
virtual int getMySerial ( ) = 0 ;
2007-12-06 21:06:07 +02:00
virtual int getHeroSerial ( const CGHeroInstance * hero ) = 0 ;
2008-01-26 21:36:31 +02:00
virtual int swapCreatures ( const CCreatureSet * s1 , const CCreatureSet * s2 , int p1 , int p2 ) = 0 ; //swaps creatures between two posiibly different garrisons // TODO: AI-unsafe code - fix it!
2007-12-06 20:32:06 +02:00
} ;
2007-08-29 13:05:50 +03:00
struct HeroMoveDetails
{
int3 src , dst ; //source and destination points
2007-10-27 22:38:48 +03:00
CGHeroInstance * ho ; //object instance of this hero
2007-08-29 13:05:50 +03:00
int owner ;
2007-11-25 15:16:45 +02:00
bool successful ;
2007-08-29 13:05:50 +03:00
} ;
2007-10-16 20:46:01 +03:00
2007-12-06 20:32:06 +02:00
class CCallback : public ICallback
2007-08-27 17:15:03 +03:00
{
2007-09-14 16:11:10 +03:00
private :
void newTurn ( ) ;
2007-09-30 19:16:00 +03:00
CCallback ( CGameState * GS , int Player ) : gs ( GS ) , player ( Player ) { } ;
2007-10-03 21:53:49 +03:00
CGameState * gs ;
2007-10-27 22:38:48 +03:00
int lowestSpeed ( CGHeroInstance * chi ) ; //speed of the slowest stack
int valMovePoints ( CGHeroInstance * chi ) ;
2007-10-20 00:12:37 +03:00
bool isVisible ( int3 pos , int Player ) ;
2007-09-14 16:11:10 +03:00
2007-08-27 17:15:03 +03:00
protected :
2007-10-03 21:53:49 +03:00
int player ;
2007-08-29 13:05:50 +03:00
2007-08-27 17:15:03 +03:00
public :
2007-10-20 00:12:37 +03:00
//commands
2007-10-05 21:16:22 +03:00
bool moveHero ( int ID , CPath * path , int idtype , int pathType = 0 ) ; //idtype: 0 - position in vector of heroes (of that player); 1 - ID of hero
//pathType: 0 - nodes are manifestation pos, 1 - nodes are object pos
2007-12-25 18:25:53 +02:00
void selectionMade ( int selection , int asker ) ;
2007-09-18 16:30:26 +03:00
2007-10-20 00:12:37 +03:00
//get info
bool verifyPath ( CPath * path , bool blockSea ) ;
int getDate ( int mode = 0 ) ; //mode=0 - total days in game, mode=1 - day of week, mode=2 - current week, mode=3 - current month
PseudoV < PseudoV < PseudoV < unsigned char > > > & getVisibilityMap ( ) ; //returns visibility map (TODO: make it const)
2007-10-27 22:38:48 +03:00
const CGHeroInstance * getHeroInfo ( int player , int val , bool mode ) ; //mode = 0 -> val = serial; mode = 1 -> val = ID
2007-09-16 20:21:23 +03:00
int getResourceAmount ( int type ) ;
2007-10-20 00:12:37 +03:00
int howManyHeroes ( ) ;
2007-10-27 22:38:48 +03:00
const CGTownInstance * getTownInfo ( int val , bool mode ) ; //mode = 0 -> val = serial; mode = 1 -> val = ID
2007-10-20 00:12:37 +03:00
int howManyTowns ( ) ;
std : : vector < std : : string > getObjDescriptions ( int3 pos ) ; //returns descriptions of objects at pos in order from the lowest to the highest
2007-12-06 20:55:58 +02:00
std : : vector < const CGHeroInstance * > getHeroesInfo ( bool onlyOur = true ) ;
2007-10-20 00:12:37 +03:00
bool isVisible ( int3 pos ) ;
2007-12-01 14:50:33 +02:00
int getMyColor ( ) ;
2007-12-06 21:06:07 +02:00
int getHeroSerial ( const CGHeroInstance * hero ) ;
2007-12-01 14:50:33 +02:00
int getMySerial ( ) ;
2008-01-26 21:36:31 +02:00
int swapCreatures ( const CCreatureSet * s1 , const CCreatureSet * s2 , int p1 , int p2 ) ;
2007-10-20 00:12:37 +03:00
//friends
2007-09-30 19:16:00 +03:00
friend int _tmain ( int argc , _TCHAR * argv [ ] ) ;
2007-08-27 17:15:03 +03:00
} ;
2007-11-19 00:58:28 +02:00
class CScriptCallback
{
public :
CGameState * gs ;
2007-08-27 17:15:03 +03:00
2007-11-25 15:16:45 +02:00
//get info
2007-11-19 00:58:28 +02:00
static int3 getPos ( CGObjectInstance * ob ) ;
int getHeroOwner ( int heroID ) ;
int getSelectedHero ( ) ;
2007-11-24 00:33:55 +02:00
int getDate ( int mode = 0 ) ;
2007-11-25 15:16:45 +02:00
//do sth
static void changePrimSkill ( int ID , int which , int val ) ;
2007-12-28 02:00:57 +02:00
void showInfoDialog ( int player , std : : string text , std : : vector < SComponent * > * components ) ; //TODO: obslugiwac nulle
2007-12-27 02:11:46 +02:00
void showSelDialog ( int player , std : : string text , std : : vector < CSelectableComponent * > * components , IChosen * asker ) ;
2007-11-24 00:33:55 +02:00
void giveResource ( int player , int which , int val ) ;
2007-12-22 16:40:27 +02:00
void showCompInfo ( int player , SComponent * comp ) ;
2007-11-25 15:16:45 +02:00
//friends
2007-11-19 00:58:28 +02:00
friend void initGameState ( CGameInfo * cgi ) ;
} ;
class CLuaCallback : public CScriptCallback
2007-10-27 22:38:48 +03:00
{
2007-11-19 00:58:28 +02:00
private :
static void registerFuncs ( lua_State * L ) ;
static int getPos ( lua_State * L ) ; //(CGObjectInstance * object);
static int changePrimSkill ( lua_State * L ) ; //(int ID, int which, int val);
static int getGnrlText ( lua_State * L ) ; //(int ID, int which, int val);
static int getSelectedHero ( lua_State * L ) ; //()
friend void initGameState ( CGameInfo * cgi ) ;
2007-10-27 22:38:48 +03:00
} ;
2007-08-27 17:15:03 +03:00
# endif //CCALLBACK_H