ProtoBot
Loading...
Searching...
No Matches
AttackingState Class Reference

The AttackingState has all units in the attacking squad move towards the assigned attack position. More...

#include <SquadStateTypes.h>

Inheritance diagram for AttackingState:
SquadState

Public Member Functions

void Enter (Squad *squad)
 Squad is added to AttackingSquads vector in CombatManager.
void Update (Squad *squad)
 Every frame, loops through all units in the squad.
For each unit, finds closest chokepoint position (for avoiding traffic jams).
void Exit (Squad *squad)
 Squad is removed from AttackingSquads vector in CombatManager.

Static Public Member Functions

static SquadStategetInstance ()

Public Attributes

set< BWAPI::Position > chokepointPositions

Private Member Functions

 AttackingState (const AttackingState &)
AttackingStateoperator= (const AttackingState &)

Detailed Description

The AttackingState has all units in the attacking squad move towards the assigned attack position.

In the AttackingState, squads will attack the position. During this movement, three scenarios can occur
- If no enemy is near squad: Continue moving towards attack position
- If an enemy is near squad: Attack enemy and move away towards base while weapons are on cooldown (Kiting)
- If squad is near chokepoint: Ignore kiting behavior and move towards attack position even if weapons are on cooldown (This behavior stops squads from cluttering too much at chokepoints and causing traffic jams)

Definition at line 26 of file SquadStateTypes.h.

Constructor & Destructor Documentation

◆ AttackingState()

AttackingState::AttackingState ( )
inlineprivate

Definition at line 51 of file SquadStateTypes.h.

51{};

Member Function Documentation

◆ Enter()

void AttackingState::Enter ( Squad * squad)
virtual

Squad is added to AttackingSquads vector in CombatManager.

Parameters
squad

Implements SquadState.

Definition at line 3 of file SquadStateTypes.cpp.

3 {
4 CombatManager::AttackingSquads.push_back(squad);
5 const vector<BWEM::Area>& areas = bwemMap.Areas();
6
7 // Grabbing all chokepoints for use in kiting through chokepoints
8 for (int i = 0; i < areas.size(); i++) {
9 const BWEM::Area* area = bwemMap.GetArea(BWAPI::WalkPosition(areas.at(i).Top()));
10 for (const BWEM::ChokePoint* cp : area->ChokePoints()) {
11 chokepointPositions.insert(BWAPI::Position(cp->Center()));
12 }
13 }
14
15#ifdef DEBUG_STATES
16 cout << "(" << squad->info.squadId << ")" << "Entered ATTACKING state" << endl;
17#endif
18}

◆ Exit()

void AttackingState::Exit ( Squad * squad)
virtual

Squad is removed from AttackingSquads vector in CombatManager.

Parameters
squad

Implements SquadState.

Definition at line 55 of file SquadStateTypes.cpp.

55 {
56 CombatManager::AttackingSquads.erase(remove(CombatManager::AttackingSquads.begin(), CombatManager::AttackingSquads.end(), squad), CombatManager::AttackingSquads.end());
57
58#ifdef DEBUG_STATES
59 cout << "(" << squad->info.squadId << ")" << "Exited ATTACKING state" << endl;
60#endif
61}

◆ getInstance()

SquadState & AttackingState::getInstance ( )
static

Definition at line 63 of file SquadStateTypes.cpp.

64{
65 static AttackingState singleton;
66 return singleton;
67}

◆ operator=()

AttackingState & AttackingState::operator= ( const AttackingState & )
inlineprivate

Definition at line 53 of file SquadStateTypes.h.

53{};

◆ Update()

void AttackingState::Update ( Squad * squad)
virtual

Every frame, loops through all units in the squad.
For each unit, finds closest chokepoint position (for avoiding traffic jams).



If unit is melee, applies kitingMelee() method from KitingBehaviors class.
If unit is ranged, applies kitingRanged() method from KitingBehaviors class.

Parameters
squad

Implements SquadState.

Definition at line 20 of file SquadStateTypes.cpp.

20 {
21
22 if (!squad->info.commandPos.isValid()) {
23 return;
24 }
25
26 if (squad->info.currentAttackPosition != squad->info.commandPos) {
27 squad->info.currentAttackPosition = squad->info.commandPos;
28 }
29
30 if (BWAPI::Broodwar->getFrameCount() % KITING_FRAME_DELAY != 0) {
31 return;
32 }
33
34 for (BWAPI::Unit& unit : squad->info.units)
35 {
36 BWAPI::Position closestCPPosition = BWAPI::Positions::Invalid;
37 int closestDist = INT_MAX;
38 for (BWAPI::Position cpCenter : chokepointPositions) {
39 const int dist = unit->getPosition().getApproxDistance(cpCenter);
40 if (dist < closestDist) {
41 closestDist = dist;
42 closestCPPosition = cpCenter;
43 }
44 }
45
46 if (unit->getType() == BWAPI::UnitTypes::Protoss_Zealot) {
47 KitingBehaviors::kitingMelee(unit, squad->info.currentAttackPosition);
48 }
49 else if (unit->getType() == BWAPI::UnitTypes::Protoss_Dragoon) {
50 KitingBehaviors::kitingRanged(unit, squad->info.currentAttackPosition, closestCPPosition);
51 }
52 }
53}
BWAPI::Position commandPos
Initial position sent by StrategyManager. Used to compared against the current attacking,...
Definition Squad.h:25

Member Data Documentation

◆ chokepointPositions

set<BWAPI::Position> AttackingState::chokepointPositions

Definition at line 49 of file SquadStateTypes.h.


The documentation for this class was generated from the following files: