#include "rive/shapes/points_path.hpp"
#include "rive/bones/skin.hpp"

using namespace rive;

Mat2D identity;
void PointsPath::buildDependencies()
{
    Super::buildDependencies();
    if (skin() != nullptr)
    {
        skin()->addDependent(this);
    }
}

const Mat2D& PointsPath::pathTransform() const
{
    if (skin() != nullptr)
    {
        return identity;
    }
    return worldTransform();
}

void PointsPath::update(ComponentDirt value)
{
    if (hasDirt(value, ComponentDirt::Path) && skin() != nullptr)
    {
        skin()->deform(m_Vertices);
    }
    Super::update(value);
}

void PointsPath::markPathDirty()
{
    if (skin() != nullptr)
    {
        skin()->addDirt(ComponentDirt::Path);
    }
    Super::markPathDirty();
}

void PointsPath::markSkinDirty() { markPathDirty(); }