2011-12-13 21:23:17 +00:00
# include "StdInc.h"
2007-08-27 14:15:03 +00:00
# include "CCallback.h"
2011-12-13 21:23:17 +00:00
2010-12-20 21:22:53 +00:00
# include "lib/CCreatureHandler.h"
2009-05-20 10:08:56 +00:00
# include "client/CGameInfo.h"
# include "lib/CGameState.h"
2010-12-25 19:23:30 +00:00
# include "lib/BattleState.h"
2009-05-20 10:08:56 +00:00
# include "client/CPlayerInterface.h"
2008-08-29 21:41:32 +00:00
# include "client/Client.h"
2013-04-07 10:48:07 +00:00
# include "lib/mapping/CMap.h"
2010-12-20 21:22:53 +00:00
# include "lib/CBuildingHandler.h"
2014-06-05 14:19:47 +03:00
# include "lib/mapObjects/CObjectClassesHandler.h"
2010-12-20 21:22:53 +00:00
# include "lib/CGeneralTextHandler.h"
# include "lib/CHeroHandler.h"
2008-07-27 17:07:37 +00:00
# include "lib/Connection.h"
2008-07-28 12:44:08 +00:00
# include "lib/NetPacks.h"
2010-04-06 08:59:24 +00:00
# include "client/mapHandler.h"
2010-12-20 21:22:53 +00:00
# include "lib/CSpellHandler.h"
# include "lib/CArtHandler.h"
2011-12-13 21:23:17 +00:00
# include "lib/GameConstants.h"
2008-08-04 15:56:36 +00:00
# ifdef min
# undef min
# endif
# ifdef max
# undef max
# endif
2012-02-19 21:03:43 +00:00
# include "lib/UnlockGuard.h"
2008-03-14 18:24:37 +00:00
2009-04-15 14:03:31 +00:00
/*
* CCallback . cpp , 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-03-06 22:11:17 +00:00
template < ui16 N > bool isType ( CPack * pack )
{
return pack - > getType ( ) = = N ;
}
2010-06-30 19:27:35 +00:00
bool CCallback : : teleportHero ( const CGHeroInstance * who , const CGTownInstance * where )
{
CastleTeleportHero pack ( who - > id , where - > id , 1 ) ;
sendRequest ( & pack ) ;
return true ;
}
2009-08-03 23:53:18 +00:00
bool CCallback : : moveHero ( const CGHeroInstance * h , int3 dst )
2009-03-12 18:50:36 +00:00
{
2009-03-20 18:51:48 +00:00
MoveHero pack ( dst , h - > id ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2007-08-30 10:11:53 +00:00
return true ;
2007-08-29 12:18:31 +00:00
}
2012-07-15 15:34:00 +00:00
2013-05-27 10:53:28 +00:00
int CCallback : : selectionMade ( int selection , QueryID queryID )
2007-12-25 16:25:53 +00:00
{
2013-02-11 14:42:09 +00:00
ASSERT_IF_CALLED_WITH_PLAYER
2013-05-27 10:53:28 +00:00
if ( queryID = = QueryID ( - 1 ) )
2012-07-15 15:34:00 +00:00
{
2013-04-09 14:31:36 +00:00
logGlobal - > errorStream ( ) < < " Cannot answer the query -1! " ;
2012-07-15 15:34:00 +00:00
return false ;
}
QueryReply pack ( queryID , selection ) ;
2013-02-11 14:42:09 +00:00
pack . player = * player ;
2012-07-15 15:34:00 +00:00
return sendRequest ( & pack ) ;
2007-12-25 16:25:53 +00:00
}
2012-07-15 15:34:00 +00:00
2013-02-10 23:24:57 +00:00
void CCallback : : recruitCreatures ( const CGObjectInstance * obj , CreatureID ID , ui32 amount , si32 level /*=-1*/ )
2008-04-11 17:41:02 +00:00
{
2012-09-23 18:01:04 +00:00
if ( player ! = obj - > tempOwner & & obj - > ID ! = Obj : : WAR_MACHINE_FACTORY )
2010-05-15 08:33:32 +00:00
return ;
2009-03-20 18:51:48 +00:00
2010-07-10 16:50:23 +00:00
RecruitCreatures pack ( obj - > id , ID , amount , level ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-04-11 17:41:02 +00:00
}
2007-09-14 13:11:10 +00:00
2013-02-16 14:03:47 +00:00
bool CCallback : : dismissCreature ( const CArmedInstance * obj , SlotID stackPos )
2008-05-23 19:50:11 +00:00
{
2010-05-02 18:20:26 +00:00
if ( ( ( player > = 0 ) & & obj - > tempOwner ! = player ) | | ( obj - > stacksCount ( ) < 2 & & obj - > needsLastStack ( ) ) )
2008-05-31 20:37:54 +00:00
return false ;
2009-03-20 18:51:48 +00:00
DisbandCreature pack ( stackPos , obj - > id ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-05-31 20:37:54 +00:00
return true ;
2008-05-23 19:50:11 +00:00
}
2011-05-03 03:14:18 +00:00
2013-02-16 14:03:47 +00:00
bool CCallback : : upgradeCreature ( const CArmedInstance * obj , SlotID stackPos , CreatureID newID )
2008-05-23 19:50:11 +00:00
{
2009-03-20 18:51:48 +00:00
UpgradeCreature pack ( stackPos , obj - > id , newID ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-05-23 19:50:11 +00:00
return false ;
}
2011-05-03 03:14:18 +00:00
2008-07-27 17:07:37 +00:00
void CCallback : : endTurn ( )
{
2013-04-09 14:31:36 +00:00
logGlobal - > traceStream ( ) < < " Player " < < * player < < " ended his turn. " ;
2009-03-20 18:51:48 +00:00
EndTurn pack ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ; //report that we ended turn
2008-07-27 17:07:37 +00:00
}
2013-02-16 14:03:47 +00:00
int CCallback : : swapCreatures ( const CArmedInstance * s1 , const CArmedInstance * s2 , SlotID p1 , SlotID p2 )
2008-01-26 19:36:31 +00:00
{
2009-03-20 18:51:48 +00:00
ArrangeStacks pack ( 1 , p1 , p2 , s1 - > id , s2 - > id , 0 ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-04-13 11:05:39 +00:00
return 0 ;
2008-01-26 19:36:31 +00:00
}
2008-01-27 16:07:27 +00:00
2013-02-16 14:03:47 +00:00
int CCallback : : mergeStacks ( const CArmedInstance * s1 , const CArmedInstance * s2 , SlotID p1 , SlotID p2 )
2009-04-12 00:58:41 +00:00
{
2009-03-20 18:51:48 +00:00
ArrangeStacks pack ( 2 , p1 , p2 , s1 - > id , s2 - > id , 0 ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-04-13 11:05:39 +00:00
return 0 ;
2008-01-29 22:47:43 +00:00
}
2013-02-16 14:03:47 +00:00
int CCallback : : splitStack ( const CArmedInstance * s1 , const CArmedInstance * s2 , SlotID p1 , SlotID p2 , int val )
2008-01-29 22:47:43 +00:00
{
2009-03-20 18:51:48 +00:00
ArrangeStacks pack ( 3 , p1 , p2 , s1 - > id , s2 - > id , val ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-04-19 16:15:04 +00:00
return 0 ;
2008-01-29 22:47:43 +00:00
}
2008-01-27 16:07:27 +00:00
bool CCallback : : dismissHero ( const CGHeroInstance * hero )
{
2008-08-01 21:41:38 +00:00
if ( player ! = hero - > tempOwner ) return false ;
2009-03-20 18:51:48 +00:00
DismissHero pack ( hero - > id ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-08-01 21:41:38 +00:00
return true ;
2008-01-27 16:07:27 +00:00
}
2010-08-03 11:36:52 +00:00
// int CCallback::getMySerial() const
2013-02-12 15:46:43 +00:00
// {
2010-08-03 11:36:52 +00:00
// boost::shared_lock<boost::shared_mutex> lock(*gs->mx);
// return gs->players[player].serial;
// }
2007-11-18 22:58:28 +00:00
2012-04-14 02:20:22 +00:00
bool CCallback : : swapArtifacts ( const ArtifactLocation & l1 , const ArtifactLocation & l2 )
2008-01-30 10:55:43 +00:00
{
2012-04-14 02:20:22 +00:00
ExchangeArtifacts ea ;
ea . src = l1 ;
ea . dst = l2 ;
sendRequest ( & ea ) ;
return true ;
2008-01-30 10:55:43 +00:00
}
2007-11-18 22:58:28 +00:00
2010-02-16 14:39:56 +00:00
/**
* Assembles or disassembles a combination artifact .
* @ param hero Hero holding the artifact ( s ) .
* @ param artifactSlot The worn slot ID of the combination - or constituent artifact .
* @ param assemble True for assembly operation , false for disassembly .
* @ param assembleTo If assemble is true , this represents the artifact ID of the combination
* artifact to assemble to . Otherwise it ' s not used .
*/
2013-02-16 14:03:47 +00:00
bool CCallback : : assembleArtifacts ( const CGHeroInstance * hero , ArtifactPosition artifactSlot , bool assemble , ArtifactID assembleTo )
2010-02-16 14:39:56 +00:00
{
if ( player ! = hero - > tempOwner )
return false ;
AssembleArtifacts aa ( hero - > id , artifactSlot , assemble , assembleTo ) ;
sendRequest ( & aa ) ;
return true ;
}
2013-02-11 19:11:34 +00:00
bool CCallback : : buildBuilding ( const CGTownInstance * town , BuildingID buildingID )
2008-03-21 00:03:31 +00:00
{
2008-08-01 11:21:15 +00:00
if ( town - > tempOwner ! = player )
2008-03-23 01:01:17 +00:00
return false ;
2011-07-05 06:14:07 +00:00
if ( ! canBuildStructure ( town , buildingID ) )
return false ;
2008-08-01 11:21:15 +00:00
2009-03-20 18:51:48 +00:00
BuildStructure pack ( town - > id , buildingID ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-03-21 00:03:31 +00:00
return true ;
}
2010-12-22 20:14:40 +00:00
int CBattleCallback : : battleMakeAction ( BattleAction * action )
2008-09-28 21:01:49 +00:00
{
2013-02-03 21:05:44 +00:00
assert ( action - > actionType = = Battle : : HERO_SPELL ) ;
2009-03-20 18:51:48 +00:00
MakeCustomAction mca ( * action ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & mca ) ;
2008-09-28 21:01:49 +00:00
return 0 ;
}
2012-07-15 15:34:00 +00:00
int CBattleCallback : : sendRequest ( const CPack * request )
2010-12-22 20:14:40 +00:00
{
2013-02-11 14:42:09 +00:00
int requestID = cl - > sendRequest ( request , * player ) ;
2010-12-22 20:14:40 +00:00
if ( waitTillRealize )
2011-07-05 19:05:41 +00:00
{
2013-04-09 14:31:36 +00:00
logGlobal - > traceStream ( ) < < boost : : format ( " We'll wait till request %d is answered. \n " ) % requestID ;
2012-04-06 15:02:15 +00:00
auto gsUnlocker = vstd : : makeUnlockSharedGuardIf ( getGsMutex ( ) , unlockGsWhenWaiting ) ;
2012-03-25 22:46:14 +00:00
cl - > waitingRequest . waitWhileContains ( requestID ) ;
2011-07-05 19:05:41 +00:00
}
2012-07-15 15:34:00 +00:00
2014-02-01 21:34:14 +00:00
boost : : this_thread : : interruption_point ( ) ;
2012-07-15 15:34:00 +00:00
return requestID ;
2010-12-22 20:14:40 +00:00
}
2008-08-16 08:47:41 +00:00
void CCallback : : swapGarrisonHero ( const CGTownInstance * town )
{
2013-02-23 12:22:23 +00:00
if ( town - > tempOwner = = * player
| | ( town - > garrisonHero & & town - > garrisonHero - > tempOwner = = * player ) )
{
GarrisonHeroSwap pack ( town - > id ) ;
sendRequest ( & pack ) ;
}
2008-08-25 10:25:16 +00:00
}
2013-02-10 23:24:57 +00:00
void CCallback : : buyArtifact ( const CGHeroInstance * hero , ArtifactID aid )
2008-08-25 10:25:16 +00:00
{
if ( hero - > tempOwner ! = player ) return ;
2009-03-20 18:51:48 +00:00
BuyArtifact pack ( hero - > id , aid ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-08-28 17:36:34 +00:00
}
2013-06-26 11:18:27 +00:00
void CCallback : : trade ( const CGObjectInstance * market , EMarketMode : : EMarketMode mode , int id1 , int id2 , int val1 , const CGHeroInstance * hero /* = nullptr*/ )
2008-09-07 03:38:37 +00:00
{
2010-05-18 07:01:54 +00:00
TradeOnMarketplace pack ;
pack . market = market ;
pack . hero = hero ;
pack . mode = mode ;
pack . r1 = id1 ;
pack . r2 = id2 ;
pack . val = val1 ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-09-18 13:54:54 +00:00
}
2008-09-19 08:16:19 +00:00
void CCallback : : setFormation ( const CGHeroInstance * hero , bool tight )
2008-09-18 13:54:54 +00:00
{
2010-05-02 18:20:26 +00:00
const_cast < CGHeroInstance * > ( hero ) - > formation = tight ;
2009-03-20 18:51:48 +00:00
SetFormation pack ( hero - > id , tight ) ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2008-10-18 23:20:48 +00:00
}
void CCallback : : setSelection ( const CArmedInstance * obj )
{
2014-03-01 12:23:33 +00:00
if ( ! player | | obj - > getOwner ( ) ! = * player )
{
logGlobal - > errorStream ( ) < < boost : : format ( " Cannot set selection to the object that is not owned. Object owner is %s, callback player %s " ) % obj - > getOwner ( ) % player ;
return ;
}
2008-12-27 01:01:59 +00:00
SetSelection ss ;
2013-02-11 14:42:09 +00:00
ss . player = * player ;
2008-12-27 01:01:59 +00:00
ss . id = obj - > id ;
2011-08-25 15:24:37 +00:00
sendRequest ( & ( CPackForClient & ) ss ) ;
2009-09-12 22:17:23 +00:00
2014-03-01 12:23:33 +00:00
if ( obj - > getOwner ( ) ! = * player )
{
// Cf. bug #1679 http://bugs.vcmi.eu/view.php?id=1679
logGlobal - > warnStream ( ) < < " The selection request became invalid because of event that occurred after it was made. Object owner is now " < < obj - > getOwner ( ) ;
throw std : : runtime_error ( " setSelection not allowed " ) ;
}
2012-09-23 18:01:04 +00:00
if ( obj - > ID = = Obj : : HERO )
2009-09-12 22:17:23 +00:00
{
2011-06-25 14:22:19 +00:00
if ( cl - > pathInfo - > hero ! = obj ) //calculate new paths only if we selected a different hero
cl - > calculatePaths ( static_cast < const CGHeroInstance * > ( obj ) ) ;
2009-09-12 22:17:23 +00:00
//nasty workaround. TODO: nice workaround
2013-02-21 02:25:44 +00:00
cl - > gs - > getPlayer ( * player ) - > currentSelection = obj - > id ;
2009-09-12 22:17:23 +00:00
}
2008-10-26 20:58:34 +00:00
}
2010-07-08 23:03:27 +00:00
void CCallback : : recruitHero ( const CGObjectInstance * townOrTavern , const CGHeroInstance * hero )
2008-10-26 20:58:34 +00:00
{
2013-02-09 17:37:38 +00:00
assert ( townOrTavern ) ;
assert ( hero ) ;
2008-10-26 20:58:34 +00:00
ui8 i = 0 ;
2013-02-11 14:42:09 +00:00
for ( ; i < gs - > players [ * player ] . availableHeroes . size ( ) ; i + + )
2009-03-09 10:37:49 +00:00
{
2013-02-11 14:42:09 +00:00
if ( gs - > players [ * player ] . availableHeroes [ i ] = = hero )
2009-03-09 10:37:49 +00:00
{
2013-02-13 23:55:42 +00:00
HireHero pack ( i , townOrTavern - > id ) ;
2013-02-11 14:42:09 +00:00
pack . player = * player ;
2009-08-03 23:53:18 +00:00
sendRequest ( & pack ) ;
2009-03-09 10:37:49 +00:00
return ;
}
}
2008-10-26 20:58:34 +00:00
}
2009-03-28 00:38:48 +00:00
void CCallback : : save ( const std : : string & fname )
{
cl - > save ( fname ) ;
2009-04-04 19:26:41 +00:00
}
2009-04-05 14:37:14 +00:00
void CCallback : : sendMessage ( const std : : string & mess )
{
2013-02-11 14:42:09 +00:00
ASSERT_IF_CALLED_WITH_PLAYER
PlayerMessage pm ( * player , mess ) ;
2011-08-25 15:24:37 +00:00
sendRequest ( & ( CPackForClient & ) pm ) ;
2009-05-12 03:35:51 +00:00
}
2009-07-20 01:47:49 +00:00
2009-07-26 03:33:13 +00:00
void CCallback : : buildBoat ( const IShipyard * obj )
{
BuildBoat bb ;
bb . objid = obj - > o - > id ;
2009-08-03 23:53:18 +00:00
sendRequest ( & bb ) ;
}
2013-03-03 17:06:03 +00:00
CCallback : : CCallback ( CGameState * GS , boost : : optional < PlayerColor > Player , CClient * C )
2010-12-22 20:14:40 +00:00
: CBattleCallback ( GS , Player , C )
2009-08-03 23:53:18 +00:00
{
waitTillRealize = false ;
2012-02-16 21:46:28 +00:00
unlockGsWhenWaiting = false ;
2009-07-26 03:33:13 +00:00
}
2013-02-12 15:46:43 +00:00
CCallback : : ~ CCallback ( )
{
//trivial, but required. Don`t remove.
}
2009-08-30 12:47:40 +00:00
const CGPathNode * CCallback : : getPathInfo ( int3 tile )
{
2012-02-26 18:31:59 +00:00
if ( ! gs - > map - > isInTheMap ( tile ) )
return nullptr ;
validatePaths ( ) ;
2009-08-30 12:47:40 +00:00
return & cl - > pathInfo - > nodes [ tile . x ] [ tile . y ] [ tile . z ] ;
}
2013-12-20 13:07:58 +00:00
int CCallback : : getDistance ( int3 tile )
2013-12-20 09:43:12 +00:00
{
CGPath ret ;
if ( getPath2 ( tile , ret ) )
return ret . nodes . size ( ) ;
else
return 255 ;
}
2014-02-15 19:39:03 +00:00
bool CCallback : : canMoveBetween ( const int3 & a , const int3 & b )
{
//TODO: merge with Pathfinder::canMoveBetween
return gs - > checkForVisitableDir ( a , b ) & & gs - > checkForVisitableDir ( b , a ) ;
}
2009-08-30 12:47:40 +00:00
bool CCallback : : getPath2 ( int3 dest , CGPath & ret )
{
2009-10-23 02:11:45 +00:00
if ( ! gs - > map - > isInTheMap ( dest ) )
return false ;
2012-02-26 18:31:59 +00:00
validatePaths ( ) ;
2011-06-25 14:22:19 +00:00
boost : : unique_lock < boost : : mutex > pathLock ( cl - > pathMx ) ;
2009-08-30 12:47:40 +00:00
return cl - > pathInfo - > getPath ( dest , ret ) ;
}
2014-02-07 08:23:31 +00:00
int CCallback : : getMovementCost ( const CGHeroInstance * hero , int3 dest )
{
2014-03-31 14:26:09 +00:00
return gs - > getMovementCost ( hero , hero - > visitablePos ( ) , dest , hero - > hasBonusOfType ( Bonus : : FLYING_MOVEMENT ) , hero - > movement ) ;
2014-02-07 08:23:31 +00:00
}
2014-04-01 11:53:28 +00:00
int3 CCallback : : getGuardingCreaturePosition ( int3 tile )
{
if ( ! gs - > map - > isInTheMap ( tile ) )
return int3 ( - 1 , - 1 , - 1 ) ;
validatePaths ( ) ;
boost : : unique_lock < boost : : mutex > pathLock ( cl - > pathMx ) ;
return gs - > map - > guardingCreaturePositions [ tile . x ] [ tile . y ] [ tile . z ] ;
}
2009-09-07 02:29:44 +00:00
void CCallback : : recalculatePaths ( )
{
2013-02-11 14:42:09 +00:00
cl - > calculatePaths ( cl - > IGameCallback : : getSelectedHero ( * player ) ) ;
2009-09-07 02:29:44 +00:00
}
void CCallback : : calculatePaths ( const CGHeroInstance * hero , CPathsInfo & out , int3 src /*= int3(-1,-1,-1)*/ , int movement /*= -1*/ )
{
gs - > calculatePaths ( hero , out , src , movement ) ;
}
2010-02-21 15:03:30 +00:00
void CCallback : : dig ( const CGObjectInstance * hero )
{
DigWithHero dwh ;
dwh . id = hero - > id ;
sendRequest ( & dwh ) ;
}
2013-02-10 23:24:57 +00:00
void CCallback : : castSpell ( const CGHeroInstance * hero , SpellID spellID , const int3 & pos )
2010-03-10 23:16:30 +00:00
{
CastAdvSpell cas ;
cas . hid = hero - > id ;
cas . sid = spellID ;
cas . pos = pos ;
sendRequest ( & cas ) ;
}
2011-05-29 23:49:25 +00:00
2013-12-06 19:44:11 +00:00
void CCallback : : unregisterAllInterfaces ( )
2011-05-29 23:49:25 +00:00
{
2013-12-06 19:44:11 +00:00
cl - > playerint . clear ( ) ;
cl - > battleints . clear ( ) ;
2011-05-29 23:49:25 +00:00
}
2012-02-26 18:31:59 +00:00
void CCallback : : validatePaths ( )
{
2013-02-11 14:42:09 +00:00
ASSERT_IF_CALLED_WITH_PLAYER
const CGHeroInstance * h = cl - > IGameCallback : : getSelectedHero ( * player ) ;
2012-02-28 11:26:08 +00:00
if ( h & & ( cl - > pathInfo - > hero ! = h //wrong hero
2013-06-22 21:47:51 +00:00
| | cl - > pathInfo - > hpos ! = h - > getPosition ( false ) //wrong hero position
2012-02-28 11:26:08 +00:00
| | ! cl - > pathInfo - > isValid ) ) //paths invalidated by game event
2013-02-12 15:46:43 +00:00
{
2012-02-26 18:31:59 +00:00
recalculatePaths ( ) ;
}
}
2013-02-16 14:03:47 +00:00
int CCallback : : mergeOrSwapStacks ( const CArmedInstance * s1 , const CArmedInstance * s2 , SlotID p1 , SlotID p2 )
2012-03-11 01:26:11 +00:00
{
if ( s1 - > getCreature ( p1 ) = = s2 - > getCreature ( p2 ) )
return mergeStacks ( s1 , s2 , p1 , p2 ) ;
else
return swapCreatures ( s1 , s2 , p1 , p2 ) ;
}
2013-06-23 16:09:15 +00:00
void CCallback : : registerGameInterface ( shared_ptr < IGameEventsReceiver > gameEvents )
2013-06-22 18:22:44 +00:00
{
2013-06-23 16:09:15 +00:00
cl - > additionalPlayerInts [ * player ] . push_back ( gameEvents ) ;
2013-06-22 18:22:44 +00:00
}
2013-06-23 16:09:15 +00:00
void CCallback : : registerBattleInterface ( shared_ptr < IBattleEventsReceiver > battleEvents )
2013-06-22 18:22:44 +00:00
{
2013-06-23 16:09:15 +00:00
cl - > additionalBattleInts [ * player ] . push_back ( battleEvents ) ;
2013-06-22 18:22:44 +00:00
}
2013-06-23 16:09:15 +00:00
void CCallback : : unregisterGameInterface ( shared_ptr < IGameEventsReceiver > gameEvents )
2013-06-22 18:22:44 +00:00
{
2013-06-23 16:09:15 +00:00
cl - > additionalPlayerInts [ * player ] - = gameEvents ;
2013-06-22 18:22:44 +00:00
}
2013-06-23 16:09:15 +00:00
void CCallback : : unregisterBattleInterface ( shared_ptr < IBattleEventsReceiver > battleEvents )
2013-06-22 18:22:44 +00:00
{
2013-06-23 16:09:15 +00:00
cl - > additionalBattleInts [ * player ] - = battleEvents ;
2013-06-22 18:22:44 +00:00
}
2013-03-03 17:06:03 +00:00
CBattleCallback : : CBattleCallback ( CGameState * GS , boost : : optional < PlayerColor > Player , CClient * C )
2010-12-22 20:14:40 +00:00
{
gs = GS ;
player = Player ;
cl = C ;
2011-01-08 18:33:40 +00:00
}
2011-02-12 16:12:48 +00:00
bool CBattleCallback : : battleMakeTacticAction ( BattleAction * action )
{
2011-08-25 20:02:38 +00:00
assert ( cl - > gs - > curB - > tacticDistance ) ;
2011-02-12 16:12:48 +00:00
MakeAction ma ;
ma . ba = * action ;
sendRequest ( & ma ) ;
return true ;
2013-04-09 14:31:36 +00:00
}