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

using namespace rive;

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

static Vec2D get_vector(const CubicMirroredVertex& v) {
    return Vec2D(cos(v.rotation()) * v.distance(), sin(v.rotation()) * v.distance());
}

void CubicMirroredVertex::computeIn() { m_InPoint = get_point(*this) - get_vector(*this); }

void CubicMirroredVertex::computeOut() { m_OutPoint = get_point(*this) + get_vector(*this); }

void CubicMirroredVertex::rotationChanged() {
    m_InValid = m_OutValid = false;
    markGeometryDirty();
}
void CubicMirroredVertex::distanceChanged() {
    m_InValid = m_OutValid = false;
    markGeometryDirty();
}
