BWAPI
Skynet/Skynet/BuildingPlacer.h
Go to the documentation of this file.
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;
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines