BWAPI
|
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 };