2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifndef __CGAMEINTERFACE_H__ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define __CGAMEINTERFACE_H__ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "global.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <set> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <vector> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "lib/BattleAction.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "client/FunctionList.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-15 14:03:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  CGameInterface . 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 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								using  namespace  boost : : logic ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CCallback ;  
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  IBattleCallback ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  ICallback ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CGlobalAI ;  
						 
					
						
							
								
									
										
										
										
											2010-02-10 02:56:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  Component ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CSelectableComponent ;  
						 
					
						
							
								
									
										
										
										
											2009-07-03 19:57:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  TryMoveHero ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CGHeroInstance ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CGTownInstance ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CGObjectInstance ;  
						 
					
						
							
								
									
										
										
										
											2010-06-27 16:03:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CGBlackMarket ;  
						 
					
						
							
								
									
										
										
										
											2009-07-06 19:41:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CGDwelling ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CCreatureSet ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CArmedInstance ;  
						 
					
						
							
								
									
										
										
										
											2009-07-26 03:33:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  IShipyard ;  
						 
					
						
							
								
									
										
										
										
											2010-05-18 07:01:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  IMarket ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  BattleResult ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  BattleAttack ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  BattleStackAttacked ;  
						 
					
						
							
								
									
										
										
										
											2010-05-16 13:42:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  BattleSpellCast ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  SetStackEffect ;  
						 
					
						
							
								
									
										
										
										
											2010-05-02 18:20:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  Bonus ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  PackageApplied ;  
						 
					
						
							
								
									
										
										
										
											2009-07-30 12:49:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  SetObjectProperty ;  
						 
					
						
							
								
									
										
										
										
											2009-09-01 13:54:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  CatapultAttack ;  
						 
					
						
							
								
									
										
										
										
											2009-09-05 14:10:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  BattleStacksRemoved ;  
						 
					
						
							
								
									
										
										
										
											2010-12-14 21:55:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  StackLocation ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CStackInstance ;  
						 
					
						
							
								
									
										
										
										
											2010-12-23 20:18:10 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CStack ;  
						 
					
						
							
								
									
										
										
										
											2010-12-14 21:55:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CCreature ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CLoadFile ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CSaveFile ;  
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								typedef  si32  TQuantity ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								template  < typename  Serializer >  class  CISer ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								template  < typename  Serializer >  class  COSer ;  
						 
					
						
							
								
									
										
										
										
											2011-01-06 20:00:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  ArtifactLocation ;  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CBattleGameInterface  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  human ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-03 11:36:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									int  playerID ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : string  dllName ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  ~ CBattleGameInterface ( )  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  init ( IBattleCallback  *  CB ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									//battle call-ins
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  actionFinished ( const  BattleAction  * action ) { } ; //occurs AFTER every action taken by any stack or by the hero
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  actionStarted ( const  BattleAction  * action ) { } ; //occurs BEFORE every action taken by any stack or by the hero
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-23 20:18:10 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  BattleAction  activeStack ( const  CStack  *  stack ) = 0 ;  //called when it's turn of that stack
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  battleAttack ( const  BattleAttack  * ba ) { } ;  //called when stack is performing attack
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleStacksAttacked ( const  std : : vector < BattleStackAttacked >  &  bsa ) { } ;  //called when stack receives damage (after battleAttack())
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleEnd ( const  BattleResult  * br ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleResultsApplied ( ) { } ;  //called when all effects of last battle are applied
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleNewRoundFirst ( int  round ) { } ;  //called at the beginning of each turn before changes are applied;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-24 21:44:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  battleStackMoved ( const  CStack  *  stack ,  THex  dest ,  int  distance ,  bool  end ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  battleSpellCast ( const  BattleSpellCast  * sc ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleStacksEffectsSet ( const  SetStackEffect  &  sse ) { } ; //called when a specific effect is set to stacks
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleStart ( const  CCreatureSet  * army1 ,  const  CCreatureSet  * army2 ,  int3  tile ,  const  CGHeroInstance  * hero1 ,  const  CGHeroInstance  * hero2 ,  bool  side ) { } ;  //called by engine when battle starts; side=0 - left, side=1 - right
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleStacksHealedRes ( const  std : : vector < std : : pair < ui32 ,  ui32 >  >  &  healedStacks ,  bool  lifeDrain ,  si32  lifeDrainFrom ) { } ;  //called when stacks are healed / resurrected first element of pair - stack id, second - healed hp
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-23 20:18:10 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  battleNewStackAppeared ( const  CStack  *  stack ) { } ;  //not called at the beginning of a battle or by resurrection; called eg. when elemental is summoned
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  battleObstaclesRemoved ( const  std : : set < si32 >  &  removedObstacles ) { } ;  //called when a certain set  of obstacles is removed from batlefield; IDs of them are given
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleCatapultAttacked ( const  CatapultAttack  &  ca ) { } ;  //called when catapult makes an attack
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleStacksRemoved ( const  BattleStacksRemoved  &  bsr ) { } ;  //called when certain stack is completely removed from battlefield
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-02-22 11:52:36 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/// Central class for managing human player / AI interface logic
  
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CGameInterface  :  public  CBattleGameInterface  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  buildChanged ( const  CGTownInstance  * town ,  int  buildingID ,  int  what ) { } ;  //what: 1 - built, 2 - demolished
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-14 21:55:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									//garrison operations
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  stackChagedCount ( const  StackLocation  & location ,  const  TQuantity  & change ,  bool  isAbsolute ) { } ;  //if absolute, change is the new count; otherwise count was modified by adding change
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  stackChangedType ( const  StackLocation  & location ,  const  CCreature  & newType ) { } ;  //used eg. when upgrading creatures
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  stacksErased ( const  StackLocation  & location ) { } ;  //stack removed from previously filled slot
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  stacksSwapped ( const  StackLocation  & loc1 ,  const  StackLocation  & loc2 ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  newStackInserted ( const  StackLocation  & location ,  const  CStackInstance  & stack ) { } ;  //new stack inserted at given (previously empty position)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  stacksRebalanced ( const  StackLocation  & src ,  const  StackLocation  & dst ,  TQuantity  count ) { } ;  //moves creatures from src stack to dst slot, may be used for merging/splittint/moving stacks
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									//virtual void garrisonChanged(const CGObjectInstance * obj){};
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									//artifacts operations
 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-06 20:00:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  artifactPut ( const  ArtifactLocation  & al ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  artifactRemoved ( const  ArtifactLocation  & al ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-22 03:43:20 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  artifactAssembled ( const  ArtifactLocation  & al ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  artifactDisassembled ( const  ArtifactLocation  & al ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-06 20:00:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  artifactMoved ( const  ArtifactLocation  & src ,  const  ArtifactLocation  & dst ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-14 21:55:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  heroCreated ( const  CGHeroInstance * ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  heroGotLevel ( const  CGHeroInstance  * hero ,  int  pskill ,  std : : vector < ui16 >  & skills ,  boost : : function < void ( ui32 ) >  & callback ) = 0 ;  //pskill is gained primary skill, interface has to choose one of given skills and call callback with selection id
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  heroInGarrisonChange ( const  CGTownInstance  * town ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-13 01:03:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									//virtual void heroKilled(const CGHeroInstance*){};
 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-03 19:57:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  heroMoved ( const  TryMoveHero  &  details ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-16 15:39:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  heroPrimarySkillChanged ( const  CGHeroInstance  *  hero ,  int  which ,  si64  val ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-20 14:08:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  heroSecondarySkillChanged ( const  CGHeroInstance  *  hero ,  int  which ,  int  val ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  heroManaPointsChanged ( const  CGHeroInstance  *  hero ) { }  //not called at the beginning of turn and after spell casts
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  heroMovePointsChanged ( const  CGHeroInstance  *  hero ) { }  //not called at the beginning of turn and after movement
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  heroVisitsTown ( const  CGHeroInstance *  hero ,  const  CGTownInstance  *  town ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  init ( ICallback  *  CB ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  receivedResource ( int  type ,  int  val ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-30 14:59:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showInfoDialog ( const  std : : string  & text ,  const  std : : vector < Component * >  & components ,  int  soundID ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-26 10:43:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showRecruitmentDialog ( const  CGDwelling  * dwelling ,  const  CArmedInstance  * dst ,  int  level ) { } 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-26 03:33:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showShipyardDialog ( const  IShipyard  * obj ) { }  //obj may be town or shipyard; state: 0 - can buid, 1 - lack of resources, 2 - dest tile is blocked, 3 - no water
 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-30 14:59:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showBlockingDialog ( const  std : : string  & text ,  const  std : : vector < Component >  & components ,  ui32  askID ,  const  int  soundID ,  bool  selection ,  bool  cancel )  =  0 ;  //Show a dialog, player must take decision. If selection then he has to choose between one of given components, if cancel he is allowed to not choose. After making choice, CCallback::selectionMade should be called with number of selected component (1 - n) or 0 for cancel (if allowed) and askID.
 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-09 17:49:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showGarrisonDialog ( const  CArmedInstance  * up ,  const  CGHeroInstance  * down ,  bool  removableUnits ,  boost : : function < void ( ) >  & onEnd )  =  0 ;  //all stacks operations between these objects become allowed, interface has to call onEnd when done
 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-10 02:56:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showPuzzleMap ( ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-18 07:01:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showMarketWindow ( const  IMarket  * market ,  const  CGHeroInstance  * visitor ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-20 14:08:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showUniversityWindow ( const  IMarket  * market ,  const  CGHeroInstance  * visitor ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-22 00:32:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showHillFortWindow ( const  CGObjectInstance  * object ,  const  CGHeroInstance  * visitor ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-08 23:03:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  showTavernWindow ( const  CGObjectInstance  * townOrTavern ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-16 13:42:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  advmapSpellCast ( const  CGHeroInstance  *  caster ,  int  spellID ) { } ;  //called when a hero casts a spell
 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-20 17:25:15 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  tileHidden ( const  boost : : unordered_set < int3 ,  ShashInt3 >  & pos ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  tileRevealed ( const  boost : : unordered_set < int3 ,  ShashInt3 >  & pos ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-26 03:33:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  newObject ( const  CGObjectInstance  *  obj ) { } ;  //eg. ship built in shipyard
 
							 
						 
					
						
							
								
									
										
										
										
											2010-06-27 16:03:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  availableArtifactsChanged ( const  CGBlackMarket  * bm  =  NULL ) { } ;  //bm may be NULL, then artifacts are changed in the global pool (used by merchants in towns)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  yourTurn ( ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-13 01:03:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  centerView  ( int3  pos ,  int  focusTime ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-26 10:43:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  availableCreaturesChanged ( const  CGDwelling  * town ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-02 18:20:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  heroBonusChanged ( const  CGHeroInstance  * hero ,  const  Bonus  & bonus ,  bool  gain ) { } ; //if gain hero received bonus, else he lost it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  playerBonusChanged ( const  Bonus  & bonus ,  bool  gain ) { } ; //if gain hero received bonus, else he lost it
 
							 
						 
					
						
							
								
									
										
										
										
											2009-06-16 11:18:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  requestRealized ( PackageApplied  * pa ) { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  heroExchangeStarted ( si32  hero1 ,  si32  hero2 ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-30 12:49:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  objectPropertyChanged ( const  SetObjectProperty  *  sop ) { } ;  //eg. mine has been flagged
 
							 
						 
					
						
							
								
									
										
										
										
											2009-08-03 23:53:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  objectRemoved ( const  CGObjectInstance  * obj ) { } ;  //eg. collected resource, picked artifact, beaten hero
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  playerBlocked ( int  reason ) { } ;  //reason: 0 - upcoming battle
 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-29 20:52:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  gameOver ( ui8  player ,  bool  victory ) { } ;  //player lost or won the game
 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  serialize ( COSer < CSaveFile >  & h ,  const  int  version ) { } ;  //saving
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  serialize ( CISer < CLoadFile >  & h ,  const  int  version ) { } ;  //loading
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CAIHandler  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
									
										
										
										
											2011-02-23 03:57:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									static  CGlobalAI  *  getNewAI ( std : : string  dllname ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									static  CBattleGameInterface  *  getNewBattleAI ( std : : string  dllname ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CGlobalAI  :  public  CGameInterface  // AI class (to derivate)
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									//CGlobalAI();
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-23 20:18:10 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  yourTurn ( )  OVERRIDE { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  heroKilled ( const  CGHeroInstance * ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-23 20:18:10 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  heroCreated ( const  CGHeroInstance * )  OVERRIDE { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-24 21:44:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  battleStackMoved ( const  CStack  *  stack ,  THex  dest ,  int  distance ,  bool  end )  OVERRIDE { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-23 20:18:10 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  void  battleStackAttacking ( int  ID ,  int  dest )  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  battleStacksAttacked ( const  std : : vector < BattleStackAttacked >  &  bsa )  OVERRIDE { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  BattleAction  activeStack ( const  CStack  *  stack )  OVERRIDE ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 11:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif  // __CGAMEINTERFACE_H__