BWAPI
|
00001 #pragma once 00002 #include "CompositeLocation.h" 00003 #include "BaseLocation.h" 00004 #include "RegionLocation.h" 00005 #include <set> 00006 00007 class Map; 00008 class Chokepoint; 00009 00010 class Region : public virtual CompositeLocation 00011 { 00012 public: 00013 template <class LocationTypes> 00014 Region(LocationTypes*, BWTA::Region* region, Map* parent) 00015 : CompositeLocation(parent) 00016 , StaticLocation(parent) 00017 , m_region(region) 00018 , m_regionLocation(LocationTypes::instantiateRegionLocation(this)) 00019 { 00020 for(std::set<BWTA::BaseLocation*>::const_iterator it = region->getBaseLocations().begin(); it != region->getBaseLocations().end(); ++it) 00021 { 00022 BaseLocation* baseLocation = LocationTypes::instantiateBaseLocation(*it, this); 00023 m_baseLocations.insert(baseLocation); 00024 addSubLocation(baseLocation); 00025 } 00026 00027 addSubLocation(m_regionLocation); 00028 } 00029 00030 ~Region() 00031 { 00032 for (std::set<BaseLocation*>::iterator it = m_baseLocations.begin(); it != m_baseLocations.end(); ++it) 00033 { 00034 delete *it; 00035 } 00036 delete m_regionLocation; 00037 } 00038 00039 Map* getParent(); 00040 const Map* getParent() const; 00041 00042 virtual BWAPI::Position getCurrentCenter() const 00043 { 00044 return m_region->getCenter(); 00045 } 00046 00047 virtual bool isInLocation(BWAPI::Position position) const 00048 { 00049 return BWTA::getRegion(BWAPI::TilePosition(position)) == m_region; 00050 } 00051 00052 const std::set<std::pair<Chokepoint*, Region*>>& getChokepoints() const 00053 { 00054 return m_chokepoints; 00055 } 00056 00057 const std::set<std::pair<Region*, Chokepoint*>>& getAdjacentRegions() const 00058 { 00059 return m_adjacentRegions; 00060 } 00061 00062 const std::set<BaseLocation*>& getBaseLocations() const 00063 { 00064 return m_baseLocations; 00065 } 00066 00067 const BWTA::Region* getBWTARegion() const 00068 { 00069 return m_region; 00070 } 00071 00072 RegionLocation* getRegionLocation() 00073 { 00074 return m_regionLocation; 00075 } 00076 00077 protected: 00078 friend class Map; 00079 00080 void addChokepoint(Chokepoint* chokepoint); 00081 00082 virtual void output(std::ostream& out) const 00083 { 00084 out << "Region " << m_region->getCenter(); 00085 } 00086 00087 BWTA::Region* m_region; 00088 std::set<std::pair<Chokepoint*, Region*>> m_chokepoints; 00089 std::set<std::pair<Region*, Chokepoint*>> m_adjacentRegions; 00090 00091 // 00092 // Composing locations 00093 // 00094 std::set<BaseLocation*> m_baseLocations; 00095 00096 // Default primitive location regrouping the buildings in this region which are not 00097 // part of the mining locations (possibly no mining locations) 00098 RegionLocation* const m_regionLocation; 00099 };