#pragma once

namespace kku
{

struct Point
{
    float x;
    float y;

    constexpr inline explicit Point() noexcept : x(0.), y(0.) {}

    constexpr inline explicit Point(int x, int y) noexcept : x(x), y(y) {}

    constexpr inline explicit Point(float x, float y) noexcept : x(x), y(y) {}

    constexpr inline Point operator+(const Point &right) const noexcept
    {
        return Point{right.x + x, right.y + y};
    }

    constexpr inline Point operator-(const Point &right) const noexcept
    {
        return Point{right.x - x, right.y - y};
    }

    inline void moveBy(float x, float y) noexcept
    {
        this->x += x;
        this->y += y;
    }

    inline void scaleBy(float factor) noexcept
    {
        x *= factor;
        y *= factor;
    }
};

} // namespace kku