diff --git a/Source/engine.h b/Source/engine.h index e33a4030a..80749c25b 100644 --- a/Source/engine.h +++ b/Source/engine.h @@ -67,24 +67,24 @@ struct Point { int x; int y; - bool operator==(const Point &other) const + constexpr bool operator==(const Point &other) const { return x == other.x && y == other.y; } - bool operator!=(const Point &other) const + constexpr bool operator!=(const Point &other) const { return !(*this == other); } - Point &operator+=(const Point &other) + constexpr Point &operator+=(const Point &other) { x += other.x; y += other.y; return *this; } - Point &operator+=(Direction direction) + constexpr Point &operator+=(Direction direction) { constexpr auto toPoint = [](Direction direction) -> Point { switch (direction) { @@ -112,60 +112,57 @@ struct Point { return (*this) += toPoint(direction); } - Point &operator-=(const Point &other) + constexpr Point &operator-=(const Point &other) { x -= other.x; y -= other.y; return *this; } - Point &operator*=(const float factor) + constexpr Point &operator*=(const float factor) { x *= factor; y *= factor; return *this; } - Point &operator*=(const int factor) + constexpr Point &operator*=(const int factor) { x *= factor; y *= factor; return *this; } - friend Point operator+(Point a, const Point &b) + constexpr friend Point operator+(Point a, const Point &b) { a += b; return a; } - friend Point operator+(Point a, Direction direction) + constexpr friend Point operator+(Point a, Direction direction) { a += direction; return a; } - friend Point operator-(Point a, const Point &b) + constexpr friend Point operator-(Point a, const Point &b) { a -= b; return a; } - friend Point operator-(const Point &a) + constexpr friend Point operator-(const Point &a) { - Point b; - b.x = -a.x; - b.y = -a.y; - return b; + return { -a.x, -a.y }; } - friend Point operator*(Point a, const float factor) + constexpr friend Point operator*(Point a, const float factor) { a *= factor; return a; } - friend Point operator*(Point a, const int factor) + constexpr friend Point operator*(Point a, const int factor) { a *= factor; return a; @@ -177,12 +174,12 @@ struct Point { * @return Magnitude of vector this -> other */ - int ApproxDistance(Point other) const + constexpr int ApproxDistance(Point other) const { - int min; - int max; - - std::tie(min, max) = std::minmax(std::abs(other.x - x), std::abs(other.y - y)); + Point offset = abs(other - *this); + auto minMax = std::minmax(offset.x, offset.y); + int min = minMax.first; + int max = minMax.second; int approx = max * 1007 + min * 441; if (max < (min * 16)) @@ -196,14 +193,14 @@ struct Point { return { std::abs(a.x), std::abs(a.y) }; } - int ManhattanDistance(Point other) const + constexpr int ManhattanDistance(Point other) const { Point offset = abs(*this - other); return offset.x + offset.y; } - int WalkingDistance(Point other) const + constexpr int WalkingDistance(Point other) const { Point offset = abs(*this - other);