BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer2Actions/Interface/Actions/Recruit.h
Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines