File: AAIAttack.h

package info (click to toggle)
spring 106.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 55,260 kB
  • sloc: cpp: 543,946; ansic: 44,800; python: 12,575; java: 12,201; awk: 5,889; sh: 1,796; asm: 1,546; xml: 655; perl: 405; php: 211; objc: 194; makefile: 76; sed: 2
file content (78 lines) | stat: -rw-r--r-- 2,577 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// -------------------------------------------------------------------------
// AAI
//
// A skirmish AI for the Spring engine.
// Copyright Alexander Seizinger
//
// Released under GPL license: see LICENSE.html for more information.
// -------------------------------------------------------------------------

#ifndef AAI_ATTACK_H
#define AAI_ATTACK_H

#include <set>
#include "AAITypes.h"

class AAI;
class AAISector;
class AAIGroup;

class AAIAttack
{
public:
	AAIAttack(AAI *ai, const AAISector* targetSector);
	~AAIAttack(void);

	//! @brief Adds all groups in the list of specified target type
	void AddGroupsOfTargetType(const std::list<AAIGroup*>& groupList, const AAITargetType& targetType);

	//! @brief Removes group from the attack (e.g. if group is deleted)
	void RemoveGroup(AAIGroup *group);

	//! @brief Returns true if attack is considered to have failed
	bool CheckIfFailed();

	//! @brief Returns true if attack has cleared the current target
	bool HasTargetBeenCleared();

	//! @brief Returns a sector to proceed with attack (nullptr if none found)
	const AAISector* DetermineSectorToContinueAttack();

	//! @brief Orders units to attack the given position
	void AttackPosition(const float3& position);

	//! @brief Orders all units involved to retreat
	void StopAttack();

	//! tick when last attack order has been given (to prevent overflow when unit gets stuck and sends "unit idel" all the time)
	int m_lastAttackOrderInFrame;

	//! combat unit groups that are part of this attack
	std::set<AAIGroup*> m_combatUnitGroups;

private:
	//! @brief Checks if units have sufficient combat power against mobile enemy units assumed to be at destination
	bool SufficientCombatPowerAt(const AAISector *sector, float aggressiveness) const;

	//! @brief Checks if units in given combat unit groups have sufficient attack power against enemy stationary defences
	bool SufficientCombatPowerToAttackSector(const AAISector *sector, float aggressiveness) const;

	//! @brief Returns the movement types of the units participating in this attack
	AAIMovementType GetMovementTypeOfAssignedUnits() const;

	//! @brief Determines how many units of which target type participate in attack
	void DetermineTargetTypeOfInvolvedUnits(MobileTargetTypeValues& targetTypesOfUnits) const;

	//! @brief Adds group to the attack, returns whether it has been successful
	bool AddGroup(AAIGroup *group);

	//! anti air unit groups that are part of this attack
	std::set<AAIGroup*> m_antiAirUnitGroups;

	//! The target sector
	const AAISector* m_attackDestination;
	
	AAI *ai;
};

#endif