mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
be10694b73
- the AI will now consider attacking multiple units - the preferred strategy now is to minimize collateral damage rather than to maximize damage to enemy units alone - attacks that block enemy shooters will be prioritized over other attacks in cases when shooters have weaker melee attacks
42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
/*
|
|
* AttackPossibility.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 "../../lib/battle/CUnitState.h"
|
|
#include "../../CCallback.h"
|
|
#include "common.h"
|
|
#include "StackWithBonuses.h"
|
|
|
|
class AttackPossibility
|
|
{
|
|
public:
|
|
BattleHex from; //tile from which we attack
|
|
BattleHex dest; //tile which we attack
|
|
BattleAttackInfo attack;
|
|
|
|
std::shared_ptr<battle::CUnitState> attackerState;
|
|
|
|
std::vector<std::shared_ptr<battle::CUnitState>> affectedUnits;
|
|
|
|
int64_t damageDealt = 0;
|
|
int64_t damageReceived = 0; //usually by counter-attack
|
|
int64_t collateralDamage = 0; // friendly fire (usually by two-hex attacks)
|
|
int64_t shootersBlockedDmg = 0;
|
|
|
|
AttackPossibility(BattleHex from, BattleHex dest, const BattleAttackInfo & attack_);
|
|
|
|
int64_t damageDiff() const;
|
|
int64_t attackValue() const;
|
|
|
|
static AttackPossibility evaluate(const BattleAttackInfo & attackInfo, BattleHex hex, const HypotheticBattle * state);
|
|
|
|
private:
|
|
static int64_t evaluateBlockedShootersDmg(const BattleAttackInfo & attackInfo, BattleHex hex, const HypotheticBattle * state);
|
|
};
|