2007-08-01 14:06:04 +00:00
# ifndef CGAMEINTERFACE_H
# define CGAMEINTERFACE_H
2007-11-18 22:58:28 +00:00
# include "global.h"
2008-04-07 17:51:46 +00:00
//#include "CCallback.h"
# include <vector>
2007-08-03 21:47:34 +00:00
BOOST_TRIBOOL_THIRD_STATE ( outOfRange )
2007-09-18 13:30:26 +00:00
2007-08-03 21:47:34 +00:00
using namespace boost : : logic ;
2007-09-14 13:11:10 +00:00
class CCallback ;
2008-04-07 17:51:46 +00:00
class ICallback ;
2007-11-18 22:58:28 +00:00
class CGlobalAI ;
2007-10-27 19:38:48 +00:00
class CGHeroInstance ;
2007-12-27 00:11:46 +00:00
class CSelectableComponent ;
2008-04-07 17:51:46 +00:00
struct HeroMoveDetails ;
class CGHeroInstance ;
class CGTownInstance ;
class CGObjectInstance ;
class CCreatureSet ;
2008-02-24 23:06:27 +00:00
class CObstacle
{
int ID ;
int position ;
//TODO: add some kind of the blockmap
} ;
2008-03-29 10:59:18 +00:00
struct BattleAction
2008-02-24 23:06:27 +00:00
{
bool side ; //who made this action: false - left, true - right player
int stackNumber ; //stack ID, -1 left hero, -2 right hero,
2008-03-29 10:59:18 +00:00
int actionType ; // 0 = Cancel BattleAction 1 = Hero cast a spell 2 = Walk 3 = Defend 4 = Retreat from the battle 5 = Surrender 6 = Walk and Attack 7 = Shoot 8 = Wait 9 = Catapult 10 = Monster casts a spell (i.e. Faerie Dragons)
2008-02-24 23:06:27 +00:00
int destinationTile ;
int additionalInfo ; // e.g. spell number if type is 1 || 10
} ;
2007-08-03 21:47:34 +00:00
class CGameInterface
{
2007-08-04 19:01:22 +00:00
public :
bool human ;
2007-08-06 04:03:34 +00:00
int playerID , serialID ;
2007-08-04 19:01:22 +00:00
2007-12-06 18:32:06 +00:00
virtual void init ( ICallback * CB ) = 0 { } ;
2007-08-04 19:01:22 +00:00
virtual void yourTurn ( ) = 0 { } ;
2007-10-27 19:38:48 +00:00
virtual void heroKilled ( const CGHeroInstance * ) = 0 { } ;
virtual void heroCreated ( const CGHeroInstance * ) = 0 { } ;
2007-11-18 22:58:28 +00:00
virtual void heroPrimarySkillChanged ( const CGHeroInstance * hero , int which , int val ) = 0 { } ;
2007-11-29 18:45:47 +00:00
virtual void heroMoved ( const HeroMoveDetails & details ) = 0 { } ;
2008-01-28 14:01:09 +00:00
virtual void heroVisitsTown ( const CGHeroInstance * hero , const CGTownInstance * town ) { } ;
virtual void tileRevealed ( int3 pos ) { } ;
virtual void tileHidden ( int3 pos ) { } ;
2007-11-25 13:16:45 +00:00
virtual void receivedResource ( int type , int val ) { } ;
2007-12-27 00:11:46 +00:00
virtual void showSelDialog ( std : : string text , std : : vector < CSelectableComponent * > & components , int askID ) = 0 { } ;
2008-01-28 14:01:09 +00:00
virtual void garrisonChanged ( const CGObjectInstance * obj ) { } ;
2008-03-23 01:01:17 +00:00
virtual void buildChanged ( const CGTownInstance * town , int buildingID , int what ) { } ; //what: 1 - built, 2 - demolished
2008-02-24 23:06:27 +00:00
//battle call-ins
virtual void battleStart ( CCreatureSet * army1 , CCreatureSet * army2 , int3 tile , CGHeroInstance * hero1 , CGHeroInstance * hero2 , bool side ) { } ; //called by engine when battle starts; side=0 - left, side=1 - right
virtual void battlefieldPrepared ( int battlefieldType , std : : vector < CObstacle * > obstacles ) { } ; //called when battlefield is prepared, prior the battle beginning
virtual void battleNewRound ( int round ) { } ; //called at the beggining of each turn, round=-1 is the tactic phase, round=0 is the first "normal" turn
2008-03-29 10:59:18 +00:00
virtual void actionStarted ( BattleAction action ) { } ; //occurs BEFORE every action taken by any stack or by the hero
virtual void actionFinished ( BattleAction action ) { } ; //occurs AFTER every action taken by any stack or by the hero
2008-02-24 23:06:27 +00:00
virtual void activeStack ( int stackID ) { } ; //called when it's turn of that stack
virtual void battleEnd ( CCreatureSet * army1 , CCreatureSet * army2 , CGHeroInstance * hero1 , CGHeroInstance * hero2 , std : : vector < int > capturedArtifacts , int expForWinner , bool winner ) { } ;
2008-03-23 17:25:38 +00:00
virtual void battleStackMoved ( int ID , int dest ) = 0 ;
2008-02-24 23:06:27 +00:00
//
2007-08-03 21:47:34 +00:00
} ;
2007-10-21 16:45:13 +00:00
class CAIHandler
{
public :
static CGlobalAI * getNewAI ( CCallback * cb , std : : string dllname ) ;
} ;
2007-08-25 04:56:25 +00:00
class CGlobalAI : public CGameInterface // AI class (to derivate)
2007-08-03 21:47:34 +00:00
{
2007-08-04 19:01:22 +00:00
public :
2007-10-21 16:45:13 +00:00
//CGlobalAI();
2007-08-04 19:01:22 +00:00
virtual void yourTurn ( ) { } ;
2007-10-27 19:38:48 +00:00
virtual void heroKilled ( const CGHeroInstance * ) { } ;
virtual void heroCreated ( const CGHeroInstance * ) { } ;
2008-03-23 17:25:38 +00:00
virtual void battleStackMoved ( int ID , int dest ) { } ;
2007-07-28 09:44:10 +00:00
} ;
2007-08-01 14:06:04 +00:00
# endif //CGAMEINTERFACE_H