2017-07-20 06:08:49 +02:00
/*
* Obstacle . 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
*
*/
# pragma once
# include "LocationEffect.h"
2023-03-19 02:16:02 +02:00
# include "../../GameConstants.h"
2017-07-20 06:08:49 +02:00
# include "../../battle/BattleHex.h"
# include "../../battle/CObstacleInstance.h"
2022-07-26 15:07:42 +02:00
VCMI_LIB_NAMESPACE_BEGIN
2017-07-20 06:08:49 +02:00
namespace spells
{
namespace effects
{
class ObstacleSideOptions
{
public :
using RelativeShape = std : : vector < std : : vector < BattleHex : : EDir > > ;
RelativeShape shape ; //shape of single obstacle relative to obstacle position
RelativeShape range ; //position of obstacles relative to effect destination
2023-09-04 12:03:15 +02:00
AudioPath appearSound ;
2023-08-23 14:07:50 +02:00
AnimationPath appearAnimation ;
AnimationPath animation ;
2017-07-20 06:08:49 +02:00
2023-02-07 00:40:01 +02:00
int offsetY = 0 ;
2017-07-20 06:08:49 +02:00
void serializeJson ( JsonSerializeFormat & handler ) ;
} ;
class Obstacle : public LocationEffect
{
public :
void adjustAffectedHexes ( std : : set < BattleHex > & hexes , const Mechanics * m , const Target & spellTarget ) const override ;
bool applicable ( Problem & problem , const Mechanics * m ) const override ;
bool applicable ( Problem & problem , const Mechanics * m , const EffectTarget & target ) const override ;
EffectTarget transformTarget ( const Mechanics * m , const Target & aimPoint , const Target & spellTarget ) const 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
void apply ( ServerCallback * server , const Mechanics * m , const EffectTarget & target ) const override ;
2017-07-20 06:08:49 +02:00
protected :
void serializeJsonEffect ( JsonSerializeFormat & handler ) override ;
2023-03-16 00:49:40 +02:00
virtual void placeObstacles ( ServerCallback * server , const Mechanics * m , const EffectTarget & target ) const ;
2017-07-20 06:08:49 +02:00
2023-02-07 00:40:01 +02:00
bool hidden = false ;
bool trigger = false ;
bool trap = false ;
bool removeOnTrigger = false ;
2023-03-16 00:49:40 +02:00
bool hideNative = false ;
2023-03-19 02:16:02 +02:00
SpellID triggerAbility ;
2023-03-16 00:49:40 +02:00
private :
int32_t patchCount = 0 ; //random patches to place, for massive spells should be >= 1, for non-massive ones if >= 1, then place only this number inside a target (like H5 landMine)
2023-03-20 10:59:43 +02:00
bool passable = false ;
2023-02-07 00:40:01 +02:00
int32_t turnsRemaining = - 1 ;
2017-07-20 06:08:49 +02:00
2024-08-11 22:22:35 +02:00
BattleSideArray < ObstacleSideOptions > sideOptions ;
2017-07-20 06:08:49 +02:00
static bool isHexAvailable ( const CBattleInfoCallback * cb , const BattleHex & hex , const bool mustBeClear ) ;
static bool noRoomToPlace ( Problem & problem , const Mechanics * m ) ;
} ;
}
}
2022-07-26 15:07:42 +02:00
VCMI_LIB_NAMESPACE_END