2017-07-20 06:08:49 +02:00
/*
2018-07-29 21:07:40 +02:00
* mock_IGameCallback . h , part of VCMI engine
2017-07-20 06:08:49 +02:00
*
* 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
*
*/
# pragma once
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
# include <vcmi/ServerCallback.h>
2017-07-20 06:08:49 +02:00
# include "../../lib/IGameCallback.h"
# include "../../lib/int3.h"
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
2017-07-20 06:08:49 +02:00
class GameCallbackMock : public IGameCallback
{
public :
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
using UpperCallback = : : ServerCallback ;
2017-07-20 06:08:49 +02:00
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
GameCallbackMock ( UpperCallback * upperCallback_ ) ;
2017-07-20 06:08:49 +02:00
virtual ~ GameCallbackMock ( ) ;
void setGameState ( CGameState * gameState ) ;
///STUBS, to be removed as long as same methods moved from GameHandler
//all calls to such methods should be replaced with other object calls or actual netpacks
//currently they are declared in callbacks, overridden in GameHandler and stubbed in client
//TODO: fail all stub calls
2023-11-06 21:20:44 +02:00
void setObjPropertyValue ( ObjectInstanceID objid , ObjProperty prop , int32_t value = 0 ) override { }
void setObjPropertyID ( ObjectInstanceID objid , ObjProperty prop , ObjPropertyID identifier ) override { }
2024-07-14 09:56:02 +02:00
void setBankObjectConfiguration ( ObjectInstanceID objid , const BankConfig & configuration ) override { }
void setRewardableObjectConfiguration ( ObjectInstanceID mapObjectID , const Rewardable : : Configuration & configuration ) override { }
void setRewardableObjectConfiguration ( ObjectInstanceID townInstanceID , BuildingID buildingID , const Rewardable : : Configuration & configuration ) override { }
2022-06-11 17:45:34 +02:00
void showInfoDialog ( InfoWindow * iw ) override { }
void changeSpells ( const CGHeroInstance * hero , bool give , const std : : set < SpellID > & spells ) override { }
2023-09-19 19:09:18 +02:00
bool removeObject ( const CGObjectInstance * obj , const PlayerColor & initiator ) override { return false ; }
2024-07-14 09:56:02 +02:00
void createBoat ( const int3 & visitablePosition , BoatId type , PlayerColor initiator ) override { }
2022-06-11 17:45:34 +02:00
void setOwner ( const CGObjectInstance * objid , PlayerColor owner ) override { }
2024-01-05 00:33:31 +02:00
void giveExperience ( const CGHeroInstance * hero , TExpType val ) override { }
2023-08-19 20:43:50 +02:00
void changePrimSkill ( const CGHeroInstance * hero , PrimarySkill which , si64 val , bool abs = false ) override { }
2022-06-11 17:45:34 +02:00
void changeSecSkill ( const CGHeroInstance * hero , SecondarySkill which , int val , bool abs = false ) override { }
void showBlockingDialog ( BlockingDialog * iw ) override { }
void showGarrisonDialog ( ObjectInstanceID upobj , ObjectInstanceID hid , bool removableUnits ) override { } //cb will be called when player closes garrison window
void showTeleportDialog ( TeleportDialog * iw ) override { }
2023-09-28 11:16:42 +02:00
void showObjectWindow ( const CGObjectInstance * object , EOpenWindowMode window , const CGHeroInstance * visitor , bool addQuery ) override { } ;
2023-04-25 11:02:31 +02:00
void giveResource ( PlayerColor player , GameResID which , int val ) override { }
2022-06-11 17:45:34 +02:00
void giveResources ( PlayerColor player , TResources resources ) override { }
void giveCreatures ( const CArmedInstance * objid , const CGHeroInstance * h , const CCreatureSet & creatures , bool remove ) override { }
void takeCreatures ( ObjectInstanceID objid , const std : : vector < CStackBasicDescriptor > & creatures ) override { }
bool changeStackCount ( const StackLocation & sl , TQuantity count , bool absoluteValue = false ) override { return false ; }
bool changeStackType ( const StackLocation & sl , const CCreature * c ) override { return false ; }
bool insertNewStack ( const StackLocation & sl , const CCreature * c , TQuantity count = - 1 ) override { return false ; } //count -1 => moves whole stack
bool eraseStack ( const StackLocation & sl , bool forceRemoval = false ) override { return false ; }
bool swapStacks ( const StackLocation & sl1 , const StackLocation & sl2 ) override { return false ; }
bool addToSlot ( const StackLocation & sl , const CCreature * c , TQuantity count ) override { return false ; } //makes new stack or increases count of already existing
void tryJoiningArmy ( const CArmedInstance * src , const CArmedInstance * dst , bool removeObjWhenFinished , bool allowMerging ) override { } //merges army from src do dst or opens a garrison window
bool moveStack ( const StackLocation & src , const StackLocation & dst , TQuantity count ) override { return false ; }
void removeAfterVisit ( const CGObjectInstance * object ) override { } //object will be destroyed when interaction is over. Do not call when interaction is not ongoing!
2024-09-04 19:39:13 +02:00
bool giveHeroNewArtifact ( const CGHeroInstance * h , const ArtifactID & artId , const ArtifactPosition & pos ) override { return false ; }
bool giveHeroNewScroll ( const CGHeroInstance * h , const SpellID & spellId , const ArtifactPosition & pos ) override { return false ; }
2023-11-09 12:38:50 +02:00
bool putArtifact ( const ArtifactLocation & al , const CArtifactInstance * art , std : : optional < bool > askAssemble ) override { return false ; }
2022-06-11 17:45:34 +02:00
void removeArtifact ( const ArtifactLocation & al ) override { }
2024-03-07 16:52:50 +02:00
bool moveArtifact ( const PlayerColor & player , const ArtifactLocation & al1 , const ArtifactLocation & al2 ) override { return false ; }
2022-06-11 17:45:34 +02:00
void heroVisitCastle ( const CGTownInstance * obj , const CGHeroInstance * hero ) override { }
void stopHeroVisitCastle ( const CGTownInstance * obj , const CGHeroInstance * hero ) override { }
void visitCastleObjects ( const CGTownInstance * obj , const CGHeroInstance * hero ) override { }
void startBattlePrimary ( const CArmedInstance * army1 , const CArmedInstance * army2 , int3 tile , const CGHeroInstance * hero1 , const CGHeroInstance * hero2 , bool creatureBank = false , const CGTownInstance * town = nullptr ) override { } //use hero=nullptr for no hero
void startBattleI ( const CArmedInstance * army1 , const CArmedInstance * army2 , int3 tile , bool creatureBank = false ) override { } //if any of armies is hero, hero will be used
void startBattleI ( const CArmedInstance * army1 , const CArmedInstance * army2 , bool creatureBank = false ) override { } //if any of armies is hero, hero will be used, visitable tile of second obj is place of battle
2024-05-07 22:05:23 +02:00
bool moveHero ( ObjectInstanceID hid , int3 dst , EMovementMode movementMode , bool transit = false , PlayerColor asker = PlayerColor : : NEUTRAL ) override { return false ; }
2022-06-11 17:45:34 +02:00
bool swapGarrisonOnSiege ( ObjectInstanceID tid ) override { return false ; }
void giveHeroBonus ( GiveBonus * bonus ) override { }
void setMovePoints ( SetMovePoints * smp ) override { }
2024-01-16 00:26:20 +02:00
void setMovePoints ( ObjectInstanceID hid , int val , bool absolute ) override { } ;
2022-06-11 17:45:34 +02:00
void setManaPoints ( ObjectInstanceID hid , int val ) override { }
2023-06-08 10:32:38 +02:00
void giveHero ( ObjectInstanceID id , PlayerColor player , ObjectInstanceID boatId = ObjectInstanceID ( ) ) override { }
2023-09-19 19:09:18 +02:00
void changeObjPos ( ObjectInstanceID objid , int3 newPos , const PlayerColor & initiator ) override { }
2022-06-11 17:45:34 +02:00
void heroExchange ( ObjectInstanceID hero1 , ObjectInstanceID hero2 ) override { } //when two heroes meet on adventure map
2023-10-04 15:49:17 +02:00
void changeFogOfWar ( int3 center , ui32 radius , PlayerColor player , ETileVisibility mode ) override { }
2024-08-26 15:49:50 +02:00
void changeFogOfWar ( const std : : unordered_set < int3 > & tiles , PlayerColor player , ETileVisibility mode ) override { }
2023-04-25 11:02:31 +02:00
void castSpell ( const spells : : Caster * caster , SpellID spellID , const int3 & pos ) override { }
2017-07-20 06:08:49 +02:00
///useful callback methods
2018-02-25 18:16:15 +02:00
void sendAndApply ( CPackForClient * pack ) override ;
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
2024-06-01 18:09:14 +02:00
vstd : : RNG & getRandomGenerator ( ) override ;
2023-04-25 21:24:10 +02:00
# if SCRIPTING_ENABLED
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
MOCK_CONST_METHOD0 ( getGlobalContextPool , scripting : : Pool * ( ) ) ;
2023-04-25 21:24:10 +02:00
# endif
2017-07-20 06:08:49 +02:00
private :
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
UpperCallback * upperCallback ;
2017-07-20 06:08:49 +02:00
} ;