BWAPI
ExampleAIModule/Source/SquadAgent.h
Go to the documentation of this file.
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 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines