BWAPI
Skynet/Skynet/PathFinder.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 #include "Interface.h"
00004 
00005 #include "Singleton.h"
00006 #include "BuildTilePath.h"
00007 #include "PositionPath.h"
00008 #include "RegionPath.h"
00009 #include "WalkPositionPath.h"
00010 #include "UnitGroup.h"
00011 #include "BuildingPlacer.h"
00012 
00013 class DefaultGValue
00014 {
00015 public:
00016         int operator()(TilePosition currentTile, TilePosition previousTile, int gTotal)
00017         {
00018                 gTotal += 10;
00019                 if (currentTile.x() != previousTile.x() && currentTile.y() != previousTile.y())
00020                         gTotal += 4;
00021 
00022                 return gTotal;
00023         }
00024 };
00025 
00026 class DefaultWalkGValue
00027 {
00028 public:
00029         int operator()(WalkPosition currentTile, WalkPosition previousTile, int gTotal)
00030         {
00031                 gTotal += 10;
00032                 if (currentTile.x != previousTile.x && currentTile.y != previousTile.y)
00033                         gTotal += 4;
00034 
00035                 return gTotal;
00036         }
00037 };
00038 
00039 class DefaultHValue
00040 {
00041 public:
00042         int operator()(TilePosition position, TilePosition target)
00043         {
00044                 int dx = abs(position.x() - target.x());
00045                 int dy = abs(position.x() - target.y());
00046                 return abs(dx - dy) * 10 + std::min(dx, dy) * 14;
00047         }
00048 };
00049 
00050 class DefaultWalkHValue
00051 {
00052 public:
00053         int operator()(WalkPosition position, WalkPosition target)
00054         {
00055                 int dx = abs(position.x - target.x);
00056                 int dy = abs(position.x - target.y);
00057                 return abs(dx - dy) * 10 + std::min(dx, dy) * 14;
00058         }
00059 };
00060 
00061 class DefaultTileTest
00062 {
00063 public:
00064         bool operator()(TilePosition position)
00065         {
00066                 return BuildingPlacer::Instance().isTileWalkable(position);
00067         }
00068 };
00069 
00070 class DefaultWalkTest
00071 {
00072 public:
00073         bool operator()(WalkPosition position)
00074         {
00075                 return BWAPI::Broodwar->isWalkable(position.x, position.y);
00076         }
00077 };
00078 
00079 class PathFinderClass
00080 {
00081 public:
00082         BuildTilePath CreateTilePath(TilePosition start, TilePosition target, std::tr1::function<bool (TilePosition)> tileTest = DefaultTileTest(), std::tr1::function<int (TilePosition, TilePosition, int)> gFunction = DefaultGValue(), std::tr1::function<int (TilePosition, TilePosition)> hFunction = DefaultHValue(), int maxGValue = 0, bool diaganol = false);
00083         BuildTilePath CreateAdvancedFleePath(TilePosition start, const UnitGroup &enemies, bool stickToRegion = false);
00084 
00085         RegionPath CreateRegionPath(Region start, Region target);
00086 
00087         PositionPath CreateCheapWalkPath(Position start, Position target);
00088 
00089         WalkPositionPath CreateWalkPath(WalkPosition start, WalkPosition target, std::tr1::function<bool (WalkPosition)> tileTest = DefaultWalkTest(), std::tr1::function<int (WalkPosition, WalkPosition, int)> gFunction = DefaultWalkGValue(), std::tr1::function<int (WalkPosition, WalkPosition)> hFunction = DefaultWalkHValue(), int maxGValue = 0, bool diaganol = false);
00090 };
00091 
00092 typedef Singleton<PathFinderClass> PathFinder;
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines