BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer2Actions/Managers/ActionsImplementation/L2AttackMove.h
Go to the documentation of this file.
00001 #pragma once
00002 #include "../../Interface/Actions/AttackMove.h"
00003 #include "../../../Layer1Reactive/FSM/Behaviors/EngageEnemies/GroupAttack.h"
00004 #include "L2GroupTacticalAction.h"
00005 
00006 class L2AttackMove : public virtual layer2::AttackMove, public L2GroupTacticalAction
00007 {
00008 public:
00009   L2AttackMove(unsigned int priority, const PersistentUnitGroup* initialGroup, Location* location)
00010     : AttackMove(priority, initialGroup, location)
00011     , L2GroupTacticalAction(priority, initialGroup)
00012     , GroupTacticalAction(priority, initialGroup)
00013     , TacticalAction(priority)
00014     , Process(Spar)
00015     , m_event(*this,priority,0,30)
00016     , m_groupAttackFSM(*this)
00017   {
00018     if(static_cast<StaticLocation*>(location))
00019     {
00020       StaticLocation* sl = static_cast<StaticLocation*>(location);
00021       std::pair<StaticLocation::enemy_building_const_iterator,StaticLocation::enemy_building_const_iterator> eBuildings = sl->getEnemyBuildings();
00022       if(eBuildings.first == eBuildings.second)
00023       {
00024         m_target =  sl->getCurrentCenter();
00025       }
00026       else
00027       {
00028         m_target = (*eBuildings.first)->getPosition();
00029       }
00030     }
00031     else
00032     {
00033       m_target = location->getCurrentCenter();
00034     }
00035     newUnit = 0;
00036   }
00037 
00038   Location* getTargetLocation()
00039   {
00040     return m_location;
00041   }
00042 
00043   void onTimeout();
00044 
00045 protected:
00046   BWAPI::Position m_target;
00047   int newUnit;
00048 
00049   virtual void executeSpecificImpl();
00050   virtual void cancelSpecificImpl();
00051   virtual void terminateSpecificImpl();
00052 
00053   virtual void onUnitAddedToGroup(void*, BWAPI::Unit* unit);
00054   virtual void onUnitRemovedFromGroup(void*, BWAPI::Unit* unit);
00055 
00056   SCHEDULER_EVENT(L2AttackMove,onTimeout) m_event;
00057 
00058 private:
00059   ProcessContainer<GroupAttack> m_groupAttackFSM;
00060 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines