BWAPI
|
00001 #include "BorderPosition.h" 00002 00003 BorderPosition::BorderPosition() 00004 : mType(PositionType::None) 00005 , mChoke() 00006 , mPosition(BWAPI::Positions::None) 00007 , mPositionSize(0) 00008 , mBase() 00009 , mRegion() 00010 { 00011 } 00012 00013 BorderPosition::BorderPosition(PositionType type, Chokepoint choke) 00014 : mType(type) 00015 , mChoke(choke) 00016 , mPosition(BWAPI::Positions::None) 00017 , mPositionSize(0) 00018 , mBase() 00019 , mRegion() 00020 { 00021 } 00022 00023 BorderPosition::BorderPosition(Position position, int size) 00024 : mType(PositionType::Position) 00025 , mChoke() 00026 , mPosition(position) 00027 , mPositionSize(size) 00028 , mBase() 00029 , mRegion() 00030 { 00031 } 00032 00033 BorderPosition::BorderPosition(Base base) 00034 : mType(PositionType::HoldBase) 00035 , mChoke() 00036 , mPosition(BWAPI::Positions::None) 00037 , mPositionSize(0) 00038 , mBase(base) 00039 , mRegion() 00040 { 00041 } 00042 00043 BorderPosition::BorderPosition(PositionType type, Region region) 00044 : mType(type) 00045 , mChoke() 00046 , mPosition(BWAPI::Positions::None) 00047 , mPositionSize(0) 00048 , mBase() 00049 , mRegion(region) 00050 { 00051 } 00052 00053 bool BorderPosition::operator==(const BorderPosition& other) const 00054 { 00055 if(mType == other.mType) 00056 { 00057 switch(mType.underlying()) 00058 { 00059 case PositionType::None: 00060 return true; 00061 case PositionType::ContainChokepoint: 00062 case PositionType::ForwardChokepoint: 00063 case PositionType::EnemyChokepoint: 00064 case PositionType::DefenseChokepoint: 00065 case PositionType::SharedChokepoint: 00066 return mChoke == other.mChoke; 00067 case PositionType::Position: 00068 return mPosition == other.mPosition; 00069 case PositionType::HoldBase: 00070 return mBase == other.mBase; 00071 case PositionType::EnemyControlRegion: 00072 case PositionType::BotControlRegion: 00073 return mRegion == other.mRegion; 00074 default: 00075 return true; 00076 } 00077 } 00078 else 00079 return false; 00080 } 00081 00082 bool BorderPosition::operator<(const BorderPosition& other) const 00083 { 00084 if(mType == other.mType) 00085 { 00086 switch(mType.underlying()) 00087 { 00088 case PositionType::None: 00089 return false; 00090 case PositionType::ContainChokepoint: 00091 case PositionType::ForwardChokepoint: 00092 case PositionType::EnemyChokepoint: 00093 case PositionType::DefenseChokepoint: 00094 case PositionType::SharedChokepoint: 00095 return mChoke < other.mChoke; 00096 case PositionType::Position: 00097 return mPosition < other.mPosition; 00098 case PositionType::HoldBase: 00099 return mBase < other.mBase; 00100 case PositionType::EnemyControlRegion: 00101 case PositionType::BotControlRegion: 00102 return mRegion < other.mRegion; 00103 default: 00104 return false; 00105 } 00106 } 00107 else 00108 return mType < other.mType; 00109 }