123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #include "StdInc.h"
- #include "CObstacleInstance.h"
- #include "CHeroHandler.h"
- #include "VCMI_Lib.h"
- #include "CSpellHandler.h"
- CObstacleInstance::CObstacleInstance()
- {
- obstacleType = USUAL;
- }
- CObstacleInstance::~CObstacleInstance()
- {
- }
- const CObstacleInfo & CObstacleInstance::getInfo() const
- {
- switch(obstacleType)
- {
- case ABSOLUTE_OBSTACLE:
- return VLC->heroh->absoluteObstacles[ID];
- case USUAL:
- return VLC->heroh->obstacles[ID];
- case MOAT:
- assert(0);
- default:
- assert(0);
- }
- }
- std::vector<BattleHex> CObstacleInstance::getBlockedTiles() const
- {
- if(blocksTiles())
- return getAffectedTiles();
- return std::vector<BattleHex>();
- }
- std::vector<BattleHex> CObstacleInstance::getStoppingTile() const
- {
- if(stopsMovement())
- return getAffectedTiles();
- return std::vector<BattleHex>();
- }
- std::vector<BattleHex> CObstacleInstance::getAffectedTiles() const
- {
- switch(obstacleType)
- {
- case ABSOLUTE_OBSTACLE:
- case USUAL:
- return getInfo().getBlocked(pos);
- default:
- assert(0);
- }
- }
- // bool CObstacleInstance::spellGenerated() const
- // {
- // if(obstacleType == USUAL || obstacleType == ABSOLUTE_OBSTACLE)
- // return false;
- //
- // return true;
- // }
- bool CObstacleInstance::visibleForSide(ui8 side, bool hasNativeStack) const
- {
- //by default obstacle is visible for everyone
- return true;
- }
- bool CObstacleInstance::stopsMovement() const
- {
- return obstacleType == QUICKSAND || obstacleType == MOAT;
- }
- bool CObstacleInstance::blocksTiles() const
- {
- return obstacleType == USUAL || obstacleType == ABSOLUTE_OBSTACLE || obstacleType == FORCE_FIELD;
- }
- SpellCreatedObstacle::SpellCreatedObstacle()
- {
- casterSide = -1;
- spellLevel = -1;
- casterSpellPower = -1;
- turnsRemaining = -1;
- visibleForAnotherSide = -1;
- }
- bool SpellCreatedObstacle::visibleForSide(ui8 side, bool hasNativeStack) const
- {
- switch(obstacleType)
- {
- case FIRE_WALL:
- case FORCE_FIELD:
- //these are always visible
- return true;
- case QUICKSAND:
- case LAND_MINE:
- //we hide mines and not discovered quicksands
- //quicksands are visible to the caster or if owned unit stepped into that particular patch
- //additionally if side has a native unit, mines/quicksands will be visible
- return casterSide == side || visibleForAnotherSide || hasNativeStack;
- default:
- assert(0);
- }
- }
- std::vector<BattleHex> SpellCreatedObstacle::getAffectedTiles() const
- {
- switch(obstacleType)
- {
- case QUICKSAND:
- case LAND_MINE:
- case FIRE_WALL:
- return std::vector<BattleHex>(1, pos);
- case FORCE_FIELD:
- return VLC->spellh->spells[Spells::FORCE_FIELD]->rangeInHexes(pos, spellLevel, casterSide);
- //TODO Fire Wall
- default:
- assert(0);
- }
- }
- void SpellCreatedObstacle::battleTurnPassed()
- {
- if(turnsRemaining > 0)
- turnsRemaining--;
- }
- std::vector<BattleHex> MoatObstacle::getAffectedTiles() const
- {
- //rrr... need initializer lists
- static const BattleHex moatHexes[] = {11, 28, 44, 61, 77, 111, 129, 146, 164, 181};
- return std::vector<BattleHex>(moatHexes, moatHexes + ARRAY_COUNT(moatHexes));
- }
|