#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;
    }
};

}