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

using namespace rive;

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

static Vec2D in_vector(const CubicAsymmetricVertex& v) {
    return Vec2D(cos(v.rotation()) * v.inDistance(), sin(v.rotation()) * v.inDistance());
}

static Vec2D out_vector(const CubicAsymmetricVertex& v) {
    return Vec2D(cos(v.rotation()) * v.outDistance(), sin(v.rotation()) * v.outDistance());
}

void CubicAsymmetricVertex::computeIn() { m_InPoint = get_point(*this) - in_vector(*this); }

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

void CubicAsymmetricVertex::rotationChanged() {
    m_InValid = false;
    m_OutValid = false;
    markGeometryDirty();
}
void CubicAsymmetricVertex::inDistanceChanged() {
    m_InValid = false;
    markGeometryDirty();
}
void CubicAsymmetricVertex::outDistanceChanged() {
    m_OutValid = false;
    markGeometryDirty();
}
