BWAPI
|
00001 #pragma once 00002 #include "../../../../Scheduler/SchedulerTask.h" 00003 #include "TacticalAction.h" 00004 #include <vector> 00005 00006 namespace layer2 00007 { 00008 class Recruit : public virtual TacticalAction 00009 { 00010 public: 00011 Recruit(unsigned int priority, StaticLocation* location, const std::map<BWAPI::UnitType, size_t>& unitTypes, bool isInfinite = false) 00012 : TacticalAction(priority) 00013 , Process(Spar) 00014 , m_location(location) 00015 , m_units(unitTypes) 00016 , m_isInfinite(isInfinite) 00017 {} 00018 00019 Recruit(unsigned int priority, StaticLocation* location, BWAPI::UnitType unitType, bool isInfinite = false) 00020 : TacticalAction(priority) 00021 , Process(Spar) 00022 , m_location(location) 00023 , m_units(getUnitTypes(unitType, 1)) 00024 , m_isInfinite(isInfinite) 00025 {} 00026 00027 virtual std::string getName() const 00028 { 00029 return "Recruit"; 00030 } 00031 00032 const StaticLocation* getLocation() const { return m_location; } 00033 StaticLocation* getLocation() { return m_location; } 00034 00035 const std::map<BWAPI::UnitType, size_t>& getUnitsToRecruit() const { return m_units; } 00036 00037 DECLARE_EVENT3(OnUnitRecruited, const Recruit*, BWAPI::Unit*, PrimitiveLocation*); 00038 OnUnitRecruited& getUnitRecruitedEvent() const { return m_unitRecruitedEvent; } 00039 00040 protected: 00041 virtual void output(std::ostream& out) const 00042 { 00043 TacticalAction::output(out); 00044 00045 out << (m_isInfinite?"Infinite-":"") << "Recruit(" << *m_location << ", "; 00046 00047 for (std::map<BWAPI::UnitType, size_t>::const_iterator it = m_units.begin(); 00048 it != m_units.end(); 00049 ++it) 00050 { 00051 const std::pair<BWAPI::UnitType, size_t>& pair = *it; 00052 out << "[" << pair.first << ", " << pair.second << "]"; 00053 } 00054 out << ")"; 00055 } 00056 00057 static std::map<BWAPI::UnitType, size_t> getUnitTypes(BWAPI::UnitType unitType, size_t nb) 00058 { 00059 std::map<BWAPI::UnitType, size_t> unitTypes; 00060 unitTypes.insert(std::make_pair(unitType, nb)); 00061 return unitTypes; 00062 } 00063 00064 StaticLocation* const m_location; 00065 const std::map<BWAPI::UnitType, size_t> m_units; 00066 const bool m_isInfinite; 00067 00068 EVENT(OnUnitRecruited) m_unitRecruitedEvent; 00069 }; 00070 }