BWAPI
|
00001 #pragma once 00002 00003 #include "Interface.h" 00004 00005 #include "Singleton.h" 00006 #include "BaseTracker.h" 00007 #include "ReservedLocation.h" 00008 #include "TypeSafeEnum.h" 00009 00010 struct ExpandTypeDef 00011 { 00012 enum type 00013 { 00014 expNone, 00015 expFurthestFromEnemy, 00016 expCloseToMe 00017 }; 00018 }; 00019 typedef SafeEnum<ExpandTypeDef> ExpandType; 00020 00021 class BuildingPlacerClass 00022 { 00023 public: 00024 BuildingPlacerClass(); 00025 00026 void reserveResourceSpace(const UnitGroup &resources, Base base); 00027 00028 void calculateReservations(); 00029 void finaliseReservations(); 00030 void update(); 00031 void onDestroy(Unit unit); 00032 00033 ReservedLocation getLandingReservation(Unit unit); 00034 ReservedLocation getBuildingReservation(BuildingLocation position, BWAPI::UnitType type); 00035 00036 bool isReserved(TilePosition position) const; 00037 bool isReserved(int x, int y) const; 00038 00039 bool isResourceReserved(TilePosition position) const; 00040 bool isResourceReserved(int x, int y) const; 00041 00042 std::vector<Base> baseToBuildAtOrder(BWAPI::UnitType type) const; 00043 std::vector<Base> baseToBuildAtOrder() const; 00044 00045 std::pair<TilePosition, Base> buildingLocationToTile(BuildingLocation position, BWAPI::UnitType type) const; 00046 00047 std::pair<TilePosition, Base> getExpandLocation(bool gas = false) const; 00048 std::pair<TilePosition, Base> getRefineryLocation() const; 00049 std::pair<TilePosition, Base> getlandingLocation(Unit unit) const; 00050 00051 TilePosition getBuildLocation(Base base, BWAPI::UnitType type) const; 00052 00053 bool isLocationNonBlocking(TilePosition position, BWAPI::UnitType type, bool ignoreReservations = false) const; 00054 bool isLocationBuildable(TilePosition position, BWAPI::UnitType type, bool ignoreReservations = false) const; 00055 bool isTileBlocked(TilePosition tile, BWAPI::UnitType type, bool ignoreReservations = false) const; 00056 bool isTileBuildable(TilePosition tile, BWAPI::UnitType type, bool ignoreReservations = false) const; 00057 bool isTileWalkable(TilePosition tile, bool ignoreReservations = false) const; 00058 bool isAddonBuildable(TilePosition position) const; 00059 00060 std::set<TilePosition> getSurroundingTiles(TilePosition position, BWAPI::UnitType type, bool ignoreReservations = false) const; 00061 00062 bool isAddonBuilder(int x, int y) const; 00063 00064 void reserve(ReservedLocation location); 00065 void free(ReservedLocation location); 00066 00067 private: 00068 void rememberBestExpandLocation(Base base, Base& bestBase, int& closestDistance, int& furthestDistance, ExpandType& type, bool gas, std::set<Base> enemyBases) const; 00069 00070 std::map<TilePosition, BWAPI::UnitType> mPermanentReserved; 00071 std::map<TilePosition, int> mResourceReserved; 00072 std::map<Unit, std::set<TilePosition>> mResources; 00073 00074 std::set<ReservedLocation> mReservedLocations; 00075 std::map<TilePosition, ReservedLocation> mReservedTiles; 00076 }; 00077 00078 typedef Singleton<BuildingPlacerClass> BuildingPlacer;