BWAPI
SPAR/AIModule/SparAIModule/PerceptualState/Locations/Static/Region.h
Go to the documentation of this file.
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 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines