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

Squad moves towards nearby friendly squads being attacked. Once no nearby squads are being attacked or the squad moves too far away from its defensive position (MAX_REINFORCE_DIST defined in SquadStateTypes.h), the squad returns to its defensive state and position. More...

#include <SquadStateTypes.h>

Inheritance diagram for ReinforcingState:
SquadState

Public Member Functions

void Enter (Squad *squad)
 Adds squad to ReinforcingSquads vector in CombatManager.
void Update (Squad *squad)
 Every frame, checks if the reinforce position sent to it by StrategyManager is within range (distance < MAX_REINFORCE_DIST)
If enemies in range, moves towards reinforce position while attacking nearby enemies.
If no longer close enough or no enemies remain, returns to DefendingState.
void Exit (Squad *squad)
 Removes squad from ReinforcingSquads vector in CombatManager and resets currentReinforcePosition to invalid.

Static Public Member Functions

static SquadStategetInstance ()

Private Member Functions

 ReinforcingState (const ReinforcingState &)
ReinforcingStateoperator= (const ReinforcingState &)

Detailed Description

Squad moves towards nearby friendly squads being attacked. Once no nearby squads are being attacked or the squad moves too far away from its defensive position (MAX_REINFORCE_DIST defined in SquadStateTypes.h), the squad returns to its defensive state and position.

Checks if nearby squads are being attacked with a distance < MAX_REINFORCE_DIST.
If so, the squad moves towards the nearby squad while attacking any enemies along the way. If no nearby squads are being attacked or the squad moves too far away from its defensive position, the squad returns to its defensive state and position.

Definition at line 92 of file SquadStateTypes.h.

Constructor & Destructor Documentation

◆ ReinforcingState()

ReinforcingState::ReinforcingState ( )
inlineprivate

Definition at line 116 of file SquadStateTypes.h.

116{};

Member Function Documentation

◆ Enter()

void ReinforcingState::Enter ( Squad * squad)
virtual

Adds squad to ReinforcingSquads vector in CombatManager.

Parameters
squad

Implements SquadState.

Definition at line 104 of file SquadStateTypes.cpp.

104 {
105 CombatManager::ReinforcingSquads.push_back(squad);
106
107#ifdef DEBUG_STATES
108 cout << "(" << squad->info.squadId << ")" << "Entered REINFORCING state" << endl;
109#endif
110}

◆ Exit()

void ReinforcingState::Exit ( Squad * squad)
virtual

Removes squad from ReinforcingSquads vector in CombatManager and resets currentReinforcePosition to invalid.

Parameters
squad

Implements SquadState.

Definition at line 146 of file SquadStateTypes.cpp.

146 {
147 squad->info.currentReinforcePosition = BWAPI::Positions::Invalid;
148 CombatManager::ReinforcingSquads.erase(remove(CombatManager::ReinforcingSquads.begin(), CombatManager::ReinforcingSquads.end(), squad), CombatManager::ReinforcingSquads.end());
149
150#ifdef DEBUG_STATES
151 cout << "(" << squad->info.squadId << ")" << "Exited REINFORCING state" << endl;
152#endif
153}

◆ getInstance()

SquadState & ReinforcingState::getInstance ( )
static

Definition at line 155 of file SquadStateTypes.cpp.

156{
157 static ReinforcingState singleton;
158 return singleton;
159}

◆ operator=()

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

Definition at line 118 of file SquadStateTypes.h.

118{};

◆ Update()

void ReinforcingState::Update ( Squad * squad)
virtual

Every frame, checks if the reinforce position sent to it by StrategyManager is within range (distance < MAX_REINFORCE_DIST)
If enemies in range, moves towards reinforce position while attacking nearby enemies.
If no longer close enough or no enemies remain, returns to DefendingState.



While in ReinforcingState, the squad handles combat similar to AttackingState.
Units use the kiting methods kitingMelee() and kitingRanged() from KitingBehaviors class to attack enemies while moving back towards the base or forward towards the reinforce position.

Parameters
squad

Implements SquadState.

Definition at line 112 of file SquadStateTypes.cpp.

112 {
113 // Every frame, check if squad is out of range
114 if (squad->info.currentDefensivePosition != BWAPI::Positions::Invalid
115 && squad->info.currentDefensivePosition.getApproxDistance(squad->info.commandPos) > MAX_REINFORCE_DIST) {
116 squad->setState(DefendingState::getInstance());
117 return;
118 }
119
120 if (squad->info.currentReinforcePosition != squad->info.commandPos) {
121 squad->info.currentReinforcePosition = squad->info.commandPos;
122 }
123
124 // If no enemies are left but still in range, return to defending state
125 int searchRadius = 100;
126 BWAPI::Unitset enemies = BWAPI::Broodwar->getUnitsInRadius(squad->info.currentReinforcePosition, searchRadius, BWAPI::Filter::IsEnemy);
127
128 if (enemies.empty()) {
129 squad->setState(DefendingState::getInstance());
130 return;
131 }
132
133 for (BWAPI::Unit& unit : squad->info.units)
134 {
135 if (unit->getType() == BWAPI::UnitTypes::Protoss_Zealot) {
136 KitingBehaviors::kitingMelee(unit, squad->info.currentReinforcePosition);
137 }
138 else if (unit->getType() == BWAPI::UnitTypes::Protoss_Dragoon) {
139 KitingBehaviors::kitingRanged(unit, squad->info.currentReinforcePosition);
140 }
141 }
142
143 // TODO: Integrate logic to kite while reinforcing
144}
BWAPI::Position commandPos
Initial position sent by StrategyManager. Used to compared against the current attacking,...
Definition Squad.h:25

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