2017-07-13 10:26:03 +02:00
/*
* StupidAI . 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
*
*/
2010-12-22 22:14:40 +02:00
# pragma once
2017-06-24 16:42:05 +02:00
# include "../../lib/battle/BattleHex.h"
2020-11-23 08:40:36 +02:00
# include "../../lib/battle/ReachabilityInfo.h"
class EnemyInfo ;
2011-12-14 00:23:17 +03:00
2010-12-22 22:14:40 +02:00
class CStupidAI : public CBattleGameInterface
{
2010-12-25 03:43:40 +02:00
int side ;
2015-12-29 04:43:33 +02:00
std : : shared_ptr < CBattleCallback > cb ;
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
std : : shared_ptr < Environment > env ;
2010-12-25 03:43:40 +02:00
void print ( const std : : string & text ) const ;
2010-12-22 22:14:40 +02:00
public :
2018-01-13 10:43:26 +02:00
CStupidAI ( ) ;
~ CStupidAI ( ) ;
2010-12-22 22:14:40 +02:00
2022-12-07 21:50:45 +02:00
void initBattleInterface ( std : : shared_ptr < Environment > ENV , std : : shared_ptr < CBattleCallback > CB ) override ;
2013-06-26 14:18:27 +03:00
void actionFinished ( const BattleAction & action ) override ; //occurs AFTER every action taken by any stack or by the hero
void actionStarted ( const BattleAction & action ) override ; //occurs BEFORE every action taken by any stack or by the hero
BattleAction activeStack ( const CStack * stack ) override ; //called when it's turn of that stack
void battleAttack ( const BattleAttack * ba ) override ; //called when stack is performing attack
2022-12-09 13:10:35 +02:00
void battleStacksAttacked ( const std : : vector < BattleStackAttacked > & bsa , bool ranged ) override ; //called when stack receives damage (after battleAttack())
2013-06-26 14:18:27 +03:00
void battleEnd ( const BattleResult * br ) override ;
//void battleResultsApplied() override; //called when all effects of last battle are applied
void battleNewRoundFirst ( int round ) override ; //called at the beginning of each turn before changes are applied;
2014-03-23 15:59:03 +03:00
void battleNewRound ( int round ) override ; //called at the beginning of each turn, round=-1 is the tactic phase, round=0 is the first "normal" turn
2022-12-18 18:26:43 +02:00
void battleStackMoved ( const CStack * stack , std : : vector < BattleHex > dest , int distance , bool teleport ) override ;
2013-06-26 14:18:27 +03:00
void battleSpellCast ( const BattleSpellCast * sc ) override ;
void battleStacksEffectsSet ( const SetStackEffect & sse ) override ; //called when a specific effect is set to stacks
//void battleTriggerEffect(const BattleTriggerEffect & bte) override;
void battleStart ( const CCreatureSet * army1 , const CCreatureSet * army2 , int3 tile , const CGHeroInstance * hero1 , const CGHeroInstance * hero2 , bool side ) override ; //called by engine when battle starts; side=0 - left, side=1 - right
void battleCatapultAttacked ( const CatapultAttack & ca ) override ; //called when catapult makes an attack
2010-12-25 03:43:40 +02:00
2020-11-23 08:40:36 +02:00
private :
2020-12-15 20:38:01 +02:00
BattleAction goTowards ( const CStack * stack , std : : vector < BattleHex > hexes ) const ;
2010-12-22 22:14:40 +02:00
} ;