2D Integer Scalar
// 2D integer scalar.
class RVAPI S2i
{
public:
// X coordinate.
int x;
// Y coordinate.
int y;
// Check if all coordinates are zero.
bool operator ! () const { return !x && !y; }
// Get scalar with negated coordnates.
S2i operator - () const { return S2i(-x, -y); }
// Get sum of scalars.
S2i operator + (const S2i &scalar) const { return S2i(x + scalar.x, y + scalar.y); }
// Get difference of scalars.
S2i operator - (const S2i &scalar) const { return S2i(x - scalar.x, y - scalar.y); }
// Get product of scalars.
S2i operator * (const S2i &scalar) const { return S2i(x * scalar.x, y * scalar.y); }
// Get division of scalars.
S2i operator / (const S2i &scalar) const { return S2i(x / scalar.x, y / scalar.y); }
// Get modulo of scalars.
S2i operator % (const S2i &scalar) const { return S2i(x % scalar.x, y % scalar.y); }
// Add [scalar] to this scalar.
S2i &operator += (const S2i &scalar) { return *this = *this + scalar; }
// Subtract [scalar] from this scalar.
S2i &operator -= (const S2i &scalar) { return *this = *this - scalar; }
// Multiply [scalar] and this scalar.
S2i &operator *= (const S2i &scalar) { return *this = *this * scalar; }
// Divide [scalar] into this scalar.
S2i &operator /= (const S2i &scalar) { return *this = *this / scalar; }
// Modulo [scalar] into this scalar.
S2i &operator %= (const S2i &scalar) { return *this = *this % scalar; }
// Get minimim of scalars.
S2i Min(const S2i &scalar) const { return S2i(scalar.x < x ? scalar.x : x, scalar.y < y ? scalar.y : y); }
// Get maximum of scalars.
S2i Max(const S2i &scalar) const { return S2i(scalar.x > x ? scalar.x : x, scalar.y > y ? scalar.y : y); }
// Construct scalar from coordinates.
S2i(int x, int y) : x(x), y(y) {}
// Construct scalar from single value.
S2i(int n = 0) : x(n), y(n) {}
// Construct scalar from S2f scalar.
S2i(const S2f &scalar);
// Destructor.
~S2i() {}
};