#include "rive/shapes/cubic_detached_vertex.hpp"
#include "rive/math/vec2d.hpp"
#include <cmath>

using namespace rive;

static Vec2D get_point(const CubicDetachedVertex& v)
{
    return Vec2D(v.x(), v.y());
}

static Vec2D in_vector(const CubicDetachedVertex& v)
{
    return Vec2D(std::cos(v.inRotation()) * v.inDistance(),
                 std::sin(v.inRotation()) * v.inDistance());
}

static Vec2D out_vector(const CubicDetachedVertex& v)
{
    return Vec2D(std::cos(v.outRotation()) * v.outDistance(),
                 std::sin(v.outRotation()) * v.outDistance());
}

void CubicDetachedVertex::computeIn()
{
    m_InPoint = get_point(*this) + in_vector(*this);
}

void CubicDetachedVertex::computeOut()
{
    m_OutPoint = get_point(*this) + out_vector(*this);
}

void CubicDetachedVertex::inRotationChanged()
{
    m_InValid = false;
    markGeometryDirty();
}
void CubicDetachedVertex::inDistanceChanged()
{
    m_InValid = false;
    markGeometryDirty();
}
void CubicDetachedVertex::outRotationChanged()
{
    m_OutValid = false;
    markGeometryDirty();
}
void CubicDetachedVertex::outDistanceChanged()
{
    m_OutValid = false;
    markGeometryDirty();
}
