BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer2Actions/Managers/ActionsImplementation/L2Research.h
Go to the documentation of this file.
00001 #pragma once
00002 #include "../../Interface/Actions/Research.h"
00003 #include "L2TacticalAction.h"
00004 
00005 class L2Research : public virtual layer2::Research, public L2TacticalAction
00006 {
00007 public:
00008   L2Research(unsigned int priority)
00009     : Research(priority)
00010     , L2TacticalAction(priority)
00011     , TacticalAction(priority)
00012     , Process(Spar)
00013     , m_researchTerminateEventHandler(*this)
00014     , m_resourceAllocatedEventHandler(*this)
00015     , m_resourcesRequestID(m_resourceAllocatedEventHandler)
00016     , m_researchProcess(NULL)
00017     , m_currentState(UNINITIALIZED)
00018     , m_building(NULL)
00019   {
00020   }
00021 
00022 protected:
00023   virtual void executeSpecificImpl();
00024   virtual void cancelSpecificImpl();
00025   virtual void terminateSpecificImpl();
00026   virtual void onResourcesAllocated(void* data, BWAPI::Unit* b) = 0;
00027 
00028   void onResearchProcessTerminate(void* data);  
00029   
00030   enum ResearchState
00031   {
00032     UNINITIALIZED,
00033     WAITING_FOR_RESOURCES,
00034     ACTION_SENT,
00035     WAITING_TO_FINISH,
00036     TERMINATED
00037   };
00038 
00039   ResearchState m_currentState;
00040   BWAPI::Unit* m_building;
00041   Layer2ManagersBase::ResourcesRequestID m_resourcesRequestID;
00042   PerceptualState::ResearchInProgress* m_researchProcess;
00043 
00044   EVENT_HANDLER1(L2Research, onResourcesAllocated, BWAPI::Unit*) m_resourceAllocatedEventHandler;
00045 
00046   PerceptualState::ResearchInProgress::OnTerminate::SubscriberID m_researchTerminateSubscriberID;
00047   EVENT_HANDLER(L2Research, onResearchProcessTerminate) m_researchTerminateEventHandler;
00048 };
00049 
00050 class L2UpgradeResearch : public virtual layer2::UpgradeResearch, public L2Research
00051 {
00052 public:
00053   L2UpgradeResearch(unsigned int priority, UpgradeTypeTech* upgrade)
00054     : UpgradeResearch(priority, upgrade)
00055     , L2Research(priority)
00056     , Research(priority)
00057     , TacticalAction(priority)
00058     , Process(Spar)
00059     , m_upgrade(upgrade)
00060   {    
00061   }
00062 
00063 protected:
00064   UpgradeTypeTech* m_upgrade;
00065 
00066   virtual void executeSpecificImpl();
00067   virtual void onResourcesAllocated(void* data, BWAPI::Unit* b);
00068 };
00069 
00070 class L2TechResearch : public virtual layer2::TechResearch, public L2Research
00071 {
00072 public:
00073   L2TechResearch(unsigned int priority, TechTypeTech* tech)
00074     : TechResearch(priority, tech)
00075     , L2Research(priority)
00076     , Research(priority)
00077     , TacticalAction(priority)
00078     , Process(Spar)
00079     , m_tech(tech)
00080   {
00081   }
00082 
00083 protected:
00084   TechTypeTech* m_tech;
00085 
00086   virtual void executeSpecificImpl();
00087   virtual void onResourcesAllocated(void* data, BWAPI::Unit* b);
00088 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines