BWAPI
|
00001 #pragma once 00002 #include <BWAPI.h> 00003 #include <windows.h> 00004 #include "Common.h" 00005 #include "InformationManager.h" 00006 #include "CombatAgent.h" 00007 00008 typedef std::set<CombatAgent*> CombatUnitSet; 00009 typedef std::map<BWAPI::Unit*, CombatAgent*> UnitToCombatAgentMap; 00010 00011 class SquadAgent 00012 { 00013 public: 00014 enum Order 00015 { 00016 Idle, 00017 GetPosition, 00018 Fight, 00019 MergeSquads 00020 }; 00021 enum Formation 00022 { 00023 Normal, 00024 Cohesion 00025 }; 00026 00027 SquadAgent(); 00028 ~SquadAgent(); 00029 std::string getState(); 00030 void addUnit(BWAPI::Unit* unit); 00031 void addUnits(UnitSet units); 00032 void onFrame(); 00033 void orderGetPosition(BWAPI::Position positionTarget); 00034 void checkFormation(); 00035 void checkSpread(); 00036 bool needWait(); 00037 void inCombat(); 00038 void onUnitDestroy(BWAPI::Unit* unit); 00039 int getAgents(); 00040 void inMerge(); 00041 void inMerge(SquadAgent* squadToMerge, BWAPI::Position toMerge = BWAPI::Positions::None); 00042 bool hasUnitOfType(const BWAPI::UnitType &type); 00043 void insertEnemyThreat(BWAPI::Unit* unit); 00044 void removeEnemyThreat(BWAPI::Unit* unit); 00045 CombatAgent* getClosestUnitTo(BWAPI::Position toPosition, BWAPI::UnitType type = BWAPI::UnitTypes::None, bool ignoreFlyers = false); 00046 bool isSquadBio(); 00047 00048 CombatUnitSet _squadUnits; 00049 UnitToCombatAgentMap _unitToCombatAgentMap; 00050 UnitSet _enemies; 00051 UnitToTypeMap _enemiesType; 00052 BWAPI::Position _center; 00053 double _spread; // Average distance to center. 00054 Order _state; 00055 BWAPI::Position _positionTarget; 00056 SquadAgent* _squadToMerge; 00057 bool _waitingNewUnits; 00058 BWAPI::Position _positionToMerge; 00059 00060 // Enemy Force 00061 double _enemyAirDPS; 00062 double _enemyGroundDPS; 00063 double _enemyAirHP; 00064 double _enemyGroundHP; 00065 00066 // Squad Force 00067 double _squadAirDPS; 00068 double _squadGroundDPS; 00069 double _squadAirHP; 00070 double _squadGroundHP; 00071 00072 private: 00073 void squadArea(); 00074 bool canWin(); 00075 void insertSquadThreat(BWAPI::Unit* unit); 00076 void removeSquadThreat(BWAPI::Unit* unit); 00077 00078 //int _maxSpread; 00079 //bool _compacting; 00080 Formation _movement; 00081 int _squadMaxSpread; 00082 };