12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- * ReachabilityInfo.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 "BattleHexArray.h"
- #include "CBattleInfoEssentials.h"
- #include "AccessibilityInfo.h"
- VCMI_LIB_NAMESPACE_BEGIN
- class BattleHexArray;
- // Reachability info is result of BFS calculation. It's dependent on stack (it's owner, whether it's flying),
- // startPosition and perspective.
- struct DLL_LINKAGE ReachabilityInfo
- {
- using TDistances = std::array<uint32_t, GameConstants::BFIELD_SIZE>;
- using TPredecessors = std::array<BattleHex, GameConstants::BFIELD_SIZE>;
- enum { INFINITE_DIST = 1000000 };
- struct DLL_LINKAGE Parameters
- {
- BattleSide side = BattleSide::NONE;
- bool doubleWide = false;
- bool flying = false;
- bool ignoreKnownAccessible = false; //Ignore obstacles if it is in accessible hexes
- bool bypassEnemyStacks = false; // in case of true will count amount of turns needed to kill enemy and thus move forward
- const BattleHexArray * knownAccessible; //hexes that will be treated as accessible, even if they're occupied by stack (by default - tiles occupied by stack we do reachability for, so it doesn't block itself)
- TBattlefieldTurnsArray destructibleEnemyTurns; // how many turns it is needed to kill enemy on specific hex (index <=> hex)
- BattleHex startPosition; //assumed position of stack
- BattleSide perspective = BattleSide::ALL_KNOWING; //some obstacles (eg. quicksands) may be invisible for some side
- Parameters()
- {
- destructibleEnemyTurns.fill(-1);
- }
- Parameters(const battle::Unit * Stack, const BattleHex & StartPosition);
- };
- Parameters params;
- AccessibilityInfo accessibility;
- TDistances distances;
- TPredecessors predecessors;
- ReachabilityInfo();
- bool isReachable(const BattleHex & hex) const;
- uint32_t distToNearestNeighbour(
- const BattleHexArray & targetHexes,
- BattleHex * chosenHex = nullptr) const;
- uint32_t distToNearestNeighbour(
- const battle::Unit * attacker,
- const battle::Unit * defender,
- BattleHex * chosenHex = nullptr) const;
- };
- VCMI_LIB_NAMESPACE_END
|