2012-12-19 17:54:10 +03:00
/*
* IGameEventsReceiver . 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
*
*/
2011-05-10 01:30:37 +03:00
# pragma once
2011-12-14 00:23:17 +03:00
2023-03-06 01:30:21 +02:00
# include "NetPacksBase.h"
2017-06-24 16:42:05 +02:00
# include "battle/BattleHex.h"
2017-07-01 10:34:00 +02:00
# include "GameConstants.h"
2011-12-14 00:23:17 +03:00
# include "int3.h"
2011-05-10 01:30:37 +03:00
2022-07-26 15:07:42 +02:00
class CCallback ;
VCMI_LIB_NAMESPACE_BEGIN
2011-05-10 01:30:37 +03:00
class CGTownInstance ;
class CCreature ;
class CArmedInstance ;
struct StackLocation ;
struct TryMoveHero ;
struct ArtifactLocation ;
class CGHeroInstance ;
class IShipyard ;
class CGDwelling ;
struct Component ;
class CStackInstance ;
class CGBlackMarket ;
class CGObjectInstance ;
struct Bonus ;
class IMarket ;
struct SetObjectProperty ;
struct PackageApplied ;
2017-07-20 06:08:49 +02:00
class BattleAction ;
2011-05-10 01:30:37 +03:00
struct BattleStackAttacked ;
struct BattleResult ;
struct BattleSpellCast ;
struct CatapultAttack ;
class CStack ;
class CCreatureSet ;
struct BattleAttack ;
struct SetStackEffect ;
2011-10-08 16:02:58 +03:00
struct BattleTriggerEffect ;
2012-05-05 00:16:39 +03:00
struct CObstacleInstance ;
2012-07-15 18:34:00 +03:00
struct CPackForServer ;
2013-11-17 20:57:04 +03:00
class EVictoryLossCheckResult ;
2023-06-17 22:52:42 +02:00
class MetaString ;
2017-07-20 06:08:49 +02:00
class ObstacleChanges ;
class UnitChanges ;
2011-05-10 01:30:37 +03:00
2011-12-14 00:23:17 +03:00
class DLL_LINKAGE IBattleEventsReceiver
2011-05-10 01:30:37 +03:00
{
public :
2013-05-09 14:09:23 +03:00
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
2011-05-10 01:30:37 +03:00
virtual void battleAttack ( const BattleAttack * ba ) { } ; //called when stack is performing attack
2022-12-09 13:10:35 +02:00
virtual void battleStacksAttacked ( const std : : vector < BattleStackAttacked > & bsa , bool ranged ) { } ; //called when stack receives damage (after battleAttack())
2023-04-06 17:34:07 +02:00
virtual void battleEnd ( const BattleResult * br , QueryID queryID ) { } ;
2011-05-10 01:30:37 +03:00
virtual void battleNewRoundFirst ( int round ) { } ; //called at the beginning of each turn before changes are applied;
virtual void battleNewRound ( int round ) { } ; //called at the beginning of each turn, round=-1 is the tactic phase, round=0 is the first "normal" turn
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
virtual void battleLogMessage ( const std : : vector < MetaString > & lines ) { } ;
2022-12-18 18:26:43 +02:00
virtual void battleStackMoved ( const CStack * stack , std : : vector < BattleHex > dest , int distance , bool teleport ) { } ;
2011-05-10 01:30:37 +03:00
virtual void battleSpellCast ( const BattleSpellCast * sc ) { } ;
virtual void battleStacksEffectsSet ( const SetStackEffect & sse ) { } ; //called when a specific effect is set to stacks
2011-10-08 16:02:58 +03:00
virtual void battleTriggerEffect ( const BattleTriggerEffect & bte ) { } ; //called for various one-shot effects
2013-09-14 22:09:35 +03:00
virtual void battleStartBefore ( const CCreatureSet * army1 , const CCreatureSet * army2 , int3 tile , const CGHeroInstance * hero1 , const CGHeroInstance * hero2 ) { } ; //called just before battle start
2023-07-27 17:40:47 +02:00
virtual void battleStart ( const CCreatureSet * army1 , const CCreatureSet * army2 , int3 tile , const CGHeroInstance * hero1 , const CGHeroInstance * hero2 , bool side , bool replayAllowed ) { } ; //called by engine when battle starts; side=0 - left, side=1 - right
2022-12-17 17:35:15 +02:00
virtual void battleUnitsChanged ( const std : : vector < UnitChanges > & units ) { } ;
2017-07-20 06:08:49 +02:00
virtual void battleObstaclesChanged ( const std : : vector < ObstacleChanges > & obstacles ) { } ;
2011-05-10 01:30:37 +03:00
virtual void battleCatapultAttacked ( const CatapultAttack & ca ) { } ; //called when catapult makes an attack
2016-02-13 16:40:31 +02:00
virtual void battleGateStateChanged ( const EGateState state ) { } ;
2011-05-10 01:30:37 +03:00
} ;
2011-12-14 00:23:17 +03:00
class DLL_LINKAGE IGameEventsReceiver
2011-05-10 01:30:37 +03:00
{
public :
2013-02-11 22:11:34 +03:00
virtual void buildChanged ( const CGTownInstance * town , BuildingID buildingID , int what ) { } ; //what: 1 - built, 2 - demolished
2011-05-10 01:30:37 +03:00
virtual void battleResultsApplied ( ) { } ; //called when all effects of last battle are applied
2018-03-10 23:19:36 +02:00
virtual void garrisonsChanged ( ObjectInstanceID id1 , ObjectInstanceID id2 ) { } ;
2011-05-10 01:30:37 +03:00
//artifacts operations
virtual void artifactPut ( const ArtifactLocation & al ) { } ;
virtual void artifactRemoved ( const ArtifactLocation & al ) { } ;
virtual void artifactAssembled ( const ArtifactLocation & al ) { } ;
virtual void artifactDisassembled ( const ArtifactLocation & al ) { } ;
virtual void artifactMoved ( const ArtifactLocation & src , const ArtifactLocation & dst ) { } ;
2023-02-13 21:10:53 +02:00
virtual void bulkArtMovementStart ( size_t numOfArts ) { } ;
virtual void askToAssembleArtifact ( const ArtifactLocation & dst ) { } ;
2011-05-10 01:30:37 +03:00
virtual void heroVisit ( const CGHeroInstance * visitor , const CGObjectInstance * visitedObj , bool start ) { } ;
virtual void heroCreated ( const CGHeroInstance * ) { } ;
virtual void heroInGarrisonChange ( const CGTownInstance * town ) { } ;
2022-01-25 13:19:48 +02:00
virtual void heroMoved ( const TryMoveHero & details , bool verbose = true ) { } ;
2023-08-19 20:43:50 +02:00
virtual void heroPrimarySkillChanged ( const CGHeroInstance * hero , PrimarySkill which , si64 val ) { } ;
2011-05-10 01:30:37 +03:00
virtual void heroSecondarySkillChanged ( const CGHeroInstance * hero , int which , int val ) { } ;
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 ) { } ;
2016-11-26 14:14:43 +02:00
virtual void receivedResource ( ) { } ;
2023-03-06 01:30:21 +02:00
virtual void showInfoDialog ( EInfoWindowMode type , const std : : string & text , const std : : vector < Component > & components , int soundID ) { } ;
2011-05-10 01:30:37 +03:00
virtual void showRecruitmentDialog ( const CGDwelling * dwelling , const CArmedInstance * dst , int level ) { }
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
virtual void showPuzzleMap ( ) { } ;
2015-01-13 21:57:41 +02:00
virtual void viewWorldMap ( ) { } ;
2011-05-10 01:30:37 +03:00
virtual void showMarketWindow ( const IMarket * market , const CGHeroInstance * visitor ) { } ;
virtual void showUniversityWindow ( const IMarket * market , const CGHeroInstance * visitor ) { } ;
virtual void showHillFortWindow ( const CGObjectInstance * object , const CGHeroInstance * visitor ) { } ;
virtual void showTavernWindow ( const CGObjectInstance * townOrTavern ) { } ;
2012-03-07 17:05:54 +03:00
virtual void showThievesGuildWindow ( const CGObjectInstance * obj ) { } ;
2012-07-06 22:12:04 +03:00
virtual void showQuestLog ( ) { } ;
2011-05-10 01:30:37 +03:00
virtual void advmapSpellCast ( const CGHeroInstance * caster , int spellID ) { } ; //called when a hero casts a spell
2023-04-16 00:48:49 +02:00
virtual void tileHidden ( const std : : unordered_set < int3 > & pos ) { } ;
virtual void tileRevealed ( const std : : unordered_set < int3 > & pos ) { } ;
2011-05-10 01:30:37 +03:00
virtual void newObject ( const CGObjectInstance * obj ) { } ; //eg. ship built in shipyard
2013-06-26 14:18:27 +03:00
virtual void availableArtifactsChanged ( const CGBlackMarket * bm = nullptr ) { } ; //bm may be nullptr, then artifacts are changed in the global pool (used by merchants in towns)
2011-05-10 01:30:37 +03:00
virtual void centerView ( int3 pos , int focusTime ) { } ;
virtual void availableCreaturesChanged ( const CGDwelling * town ) { } ;
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
2012-07-15 18:34:00 +03:00
virtual void requestSent ( const CPackForServer * pack , int requestID ) { } ;
2011-05-10 01:30:37 +03:00
virtual void requestRealized ( PackageApplied * pa ) { } ;
2023-07-04 19:02:41 +02:00
virtual void beforeObjectPropertyChanged ( const SetObjectProperty * sop ) { } ; //eg. mine has been flagged
2011-05-10 01:30:37 +03:00
virtual void objectPropertyChanged ( const SetObjectProperty * sop ) { } ; //eg. mine has been flagged
virtual void objectRemoved ( const CGObjectInstance * obj ) { } ; //eg. collected resource, picked artifact, beaten hero
2023-02-12 13:02:06 +02:00
virtual void objectRemovedAfter ( ) { } ; //eg. collected resource, picked artifact, beaten hero
2013-09-28 02:46:58 +03:00
virtual void playerBlocked ( int reason , bool start ) { } ; //reason: 0 - upcoming battle
2013-11-17 20:57:04 +03:00
virtual void gameOver ( PlayerColor player , const EVictoryLossCheckResult & victoryLossCheckResult ) { } ; //player lost or won the game
2013-03-03 20:06:03 +03:00
virtual void playerStartsTurn ( PlayerColor player ) { } ;
2013-05-27 13:53:28 +03:00
2014-03-23 15:59:03 +03:00
//TODO shouldn't be moved down the tree?
2013-05-27 13:53:28 +03:00
virtual void heroExchangeStarted ( ObjectInstanceID hero1 , ObjectInstanceID hero2 , QueryID queryID ) { } ;
2013-06-29 16:05:48 +03:00
} ;
2022-07-26 15:07:42 +02:00
VCMI_LIB_NAMESPACE_END