BWAPI
SPAR/AIModule/SparAIModule/DecisionMaking/Layer2Actions/Managers/NewBuildingPlacer.h
Go to the documentation of this file.
00001 #pragma once
00002 #include <BWAPI.h>
00003 #include "../../../PerceptualState/Locations/Static/StaticLocation.h"
00004 #include "../../../PerceptualState/Locations/Static/BaseLocation.h"
00005 
00006 class NewBuildingPlacer
00007 {
00008 public:
00009   static void onStart()
00010   {
00011     s_newBuildingPlacer = new NewBuildingPlacer();
00012   }
00013   static void onEnd()
00014   {
00015     delete s_newBuildingPlacer;
00016   }
00017   static NewBuildingPlacer* getInstance()
00018   {
00019     return s_newBuildingPlacer;
00020   }
00021   void setBuildingDistance(int dist);
00022 
00023   bool needsAdditionalPylons();
00024   void setPylonFalse();
00025 
00026   //Should need only base in the future
00027   BWAPI::TilePosition getBuildingLocation(BWAPI::Unit* builder, BWAPI::UnitType toBuild,StaticLocation* location);
00028   bool reservePosition(BWAPI::TilePosition tp,BWAPI::UnitType toBuild);
00029   bool unreservePosition(BWAPI::TilePosition tp,BWAPI::UnitType toBuild);
00030   void addNewNexus(BWAPI::Unit* nexus);
00031   
00032   //Should not be here
00033   bool isUsed(BWAPI::Unit*);
00034   void useWorker(BWAPI::Unit*);
00035   void releaseWorker(BWAPI::Unit*);
00036 private:
00037   NewBuildingPlacer();
00038   ~NewBuildingPlacer();
00039   bool overReservedPosition(BWAPI::TilePosition tp,BWAPI::UnitType toBuild);
00040   bool canBuildHere(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type);
00041   bool canBuildHereWithSpace(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type, int buildDist);
00042   bool buildable(BWAPI::Unit* builder, int x, int y);
00043   bool tileHasBuilding(BWAPI::TilePosition position);
00044   bool tileIsWalkable(BWAPI::TilePosition position);
00045   bool canWalkAround(BWAPI::TilePosition position, BWAPI::UnitType type);
00046   BWAPI::TilePosition getBuildLocationNear(BWAPI::Unit* builder, BWAPI::TilePosition position, BWAPI::UnitType type, int buildDist, int maxDistance);
00047   
00048   static NewBuildingPlacer* s_newBuildingPlacer;
00049 
00050   int m_distance;
00051   bool** reservedEmplacements;
00052   std::list<BWAPI::Unit*> usedWorker;
00053   bool needPylon;
00054   std::set<BWAPI::Unit*> nexusWithoutPylon;
00055 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines