BWAPI
|
00001 #pragma once 00002 #include "GroupTacticalAction.h" 00003 #include <vector> 00004 00005 namespace layer2 00006 { 00007 // Could restrict the choice of builder probes among some probes 00008 00009 class Build : public virtual GroupTacticalAction 00010 { 00011 public: 00012 Build(unsigned int priority, StaticLocation* location, BWAPI::UnitType buildingType) 00013 : GroupTacticalAction(priority) 00014 , TacticalAction(priority) 00015 , Process(Spar) 00016 , m_location(location) 00017 , m_buildingType(buildingType) 00018 { 00019 } 00020 00021 virtual std::string getName() const 00022 { 00023 return "Build"; 00024 } 00025 00026 static const TerminationMode TerminatedNoSpace; 00027 static const TerminationMode TerminatedNoWorker; 00028 static const TerminationMode TerminatedBuildingDestroyed; 00029 00030 DECLARE_EVENT3(OnBuildingConstructed, const Build*, BWAPI::Unit*, PrimitiveLocation*); 00031 //DECLARE_EVENT3(OnBuildingCancelled, const Build*, BWAPI::Unit*, PrimitiveLocation*); 00032 //DECLARE_EVENT3(OnBuildingCancelledNoSpace, const Build*, BWAPI::UnitType, PrimitiveLocation*); 00033 OnBuildingConstructed& getBuildingConstructedEvent() const { return m_buildingConstructedEvent; } 00034 //OnBuildingCancelled& getBuildingCancelledEvent() const { return m_buildingCancelledEvent; } 00035 //OnBuildingCancelledNoSpace& getBuildingCancelledNoSpaceEvent() const { return m_buildingCancelledNoSpaceEvent; } 00036 00037 protected: 00038 virtual void output(std::ostream& out) const 00039 { 00040 GroupTacticalAction::output(out); 00041 00042 out << "Build(" << *m_location << ", " << m_buildingType << ")"; 00043 } 00044 00045 StaticLocation* const m_location; 00046 const BWAPI::UnitType m_buildingType; 00047 00048 // TODO: move to layer 2 implementation? 00049 enum BuildingProgress 00050 { 00051 reserved, 00052 building, 00053 finished 00054 }; 00055 std::map<BWAPI::TilePosition,BuildingProgress> m_buildingProgress; 00056 00057 EVENT(OnBuildingConstructed) m_buildingConstructedEvent; 00058 }; 00059 }