BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer2Actions/Managers/ActionsImplementation/L2Collect.h
Go to the documentation of this file.
00001 #pragma once
00002 #include "../../../Layer1Reactive/FSM/Behaviors/GatherMinerals.h"
00003 #include "../../../Layer1Reactive/FSM/Behaviors/Move.h"
00004 #include "../../Interface/Actions/Collect.h"
00005 #include "L2GroupTacticalAction.h"
00006 
00007 class L2Collect : public virtual layer2::Collect, public L2GroupTacticalAction
00008 {
00009 public:
00010   L2Collect(unsigned int priority, const PersistentUnitGroup* initialGroup, BaseLocation* baseLocation)
00011     : Collect(priority, initialGroup, baseLocation)
00012     , L2GroupTacticalAction(priority, initialGroup)
00013     , GroupTacticalAction(priority, initialGroup)
00014     , TacticalAction(priority)
00015     , Process(Spar)
00016   {
00017   }
00018 
00019 };
00020 
00021 class L2CollectMinerals : public virtual layer2::CollectMinerals, public L2Collect
00022 {
00023 public:
00024   L2CollectMinerals(unsigned int priority, const PersistentUnitGroup* initialGroup, BaseLocation* baseLocation)
00025     : CollectMinerals(priority, initialGroup, baseLocation)
00026     , L2Collect(priority, initialGroup, baseLocation)
00027     , Collect(priority, initialGroup, baseLocation)
00028     , GroupTacticalAction(priority, initialGroup)
00029     , TacticalAction(priority)
00030     , Process(Spar)
00031     , m_baseLocation(baseLocation)
00032     , m_gatherBehavior(this, priority, m_gatheringGroup, baseLocation)
00033     , m_gatherBehaviorTerminatedEventHandler(*this)
00034     , m_moveBehavior(NULL)
00035     , m_unitAtDestinationEventHandler(*this)
00036     , m_moveBehaviorTerminatedEventHandler(*this)
00037     , m_movingGroup(new PersistentUnitGroup("Collect Mineral, Moving group"), *this)
00038     , m_gatheringGroup(new PersistentUnitGroup("Collect Mineral, Gathering group"), *this)
00039   {
00040   }
00041 
00042 private:
00043   // Groups must be declared before their behaviors !
00044   AutoPtr<PersistentUnitGroup> m_movingGroup;
00045   AutoPtr<PersistentUnitGroup> m_gatheringGroup;
00046 
00047   GatherMinerals m_gatherBehavior;
00048   EVENT_HANDLER(L2CollectMinerals, onGatherBehaviorTerminated) m_gatherBehaviorTerminatedEventHandler;
00049   Event<boost::tuples::tuple<>>::SubscriberID m_gatherBehaviorTerminatedSubscriberId;
00050 
00051   Move* m_moveBehavior;
00052   EVENT_HANDLER1(L2CollectMinerals, onUnitAtDestination, BWAPI::Unit*) m_unitAtDestinationEventHandler;
00053   Event<boost::tuples::tuple<BWAPI::Unit*>>::SubscriberID m_unitAtDestinationSubscriberId;
00054   EVENT_HANDLER(L2CollectMinerals, onMoveBehaviorTerminated) m_moveBehaviorTerminatedEventHandler;
00055   Event<boost::tuples::tuple<>>::SubscriberID m_moveBehaviorTerminatedSubscriberId;
00056 
00057 protected:
00058   // must be smaller than the probe sight range (256)
00059   static const size_t MINERAL_PROXIMITY = 128;
00060 
00061   virtual void executeSpecificImpl();
00062   virtual void cancelSpecificImpl();
00063   virtual void terminateSpecificImpl();
00064 
00065   virtual void onUnitAddedToGroup(void*, BWAPI::Unit* unit);
00066   virtual void onUnitRemovedFromGroup(void*, BWAPI::Unit* unit);
00067   
00068   void startMoveBehavior();
00069 
00070   void onUnitAtDestination(void* data, BWAPI::Unit* unit);
00071   void onMoveBehaviorTerminated(void* data);
00072   void onGatherBehaviorTerminated(void* data);
00073 
00074   BaseLocation* m_baseLocation;
00075 };
00076 
00077 class L2CollectGas : public virtual layer2::CollectGas, public L2Collect
00078 {
00079 public:
00080   L2CollectGas(unsigned int priority, const PersistentUnitGroup* initialGroup, BaseLocation* baseLocation)
00081     : CollectGas(priority, initialGroup, baseLocation)
00082     , L2Collect(priority, initialGroup, baseLocation)
00083     , Collect(priority, initialGroup, baseLocation)
00084     , GroupTacticalAction(priority, initialGroup)
00085     , TacticalAction(priority)
00086     , Process(Spar)
00087   {
00088   }
00089 
00090 protected:
00091   virtual void executeSpecificImpl();
00092   virtual void cancelSpecificImpl();
00093   virtual void terminateSpecificImpl();
00094 
00095   virtual void onUnitAddedToGroup(void*, BWAPI::Unit* unit);
00096   virtual void onUnitRemovedFromGroup(void*, BWAPI::Unit* unit);
00097 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines