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