00001 #include "Direction.h" 00002 00003 Direction Direction::N(-1, -1, Direction::S, true); 00004 Direction Direction::NE(-1, 0, Direction::SW, false); 00005 Direction Direction::E(-1, 1, Direction::W, true); 00006 Direction Direction::SE(0, 1, Direction::NW, false); 00007 Direction Direction::S(1, 1, Direction::N, true); 00008 Direction Direction::SW(1, 0, Direction::NE, false); 00009 Direction Direction::W(1, -1, Direction::E, true); 00010 Direction Direction::NW(0, -1, Direction::SE, false); 00011 00012 Direction::Direction(int x, int y, Direction& opposite, bool cardinal) : 00013 _offset(x, y), 00014 _opposite(&opposite), 00015 _cardinal(cardinal) 00016 { 00017 00018 } 00019 00020 00021 Direction::~Direction() 00022 { 00023 } 00024 00025 vector<const Direction*> Direction::getAllDirections() 00026 { 00027 static vector<const Direction*> directions; 00028 if (directions.empty()) 00029 { 00030 directions.push_back(&N); 00031 directions.push_back(&NE); 00032 directions.push_back(&E); 00033 directions.push_back(&SE); 00034 directions.push_back(&S); 00035 directions.push_back(&SW); 00036 directions.push_back(&W); 00037 directions.push_back(&NW); 00038 } 00039 00040 return directions; 00041 } 00042 00043 const Point& Direction::offset() const 00044 { 00045 return _offset; 00046 } 00047 00048 const Direction& Direction::opposite() const 00049 { 00050 return *_opposite; 00051 } 00052 00053 bool Direction::isCardinal() const 00054 { 00055 return _cardinal; 00056 } 00057 00058 bool Direction::operator < (const Direction& dir) const 00059 { 00060 if (offset().x < dir.offset().x) 00061 { 00062 return true; 00063 } 00064 else if (offset().x > dir.offset().x) 00065 { 00066 return false; 00067 } 00068 else 00069 { 00070 return (offset().y < dir.offset().y); 00071 } 00072 } 00073 00074 bool Direction::operator == (const Direction& dir) const 00075 { 00076 return (_offset == dir._offset); 00077 }