#include "rive/bones/bone.hpp"
#include "rive/math/vec2d.hpp"
#include <algorithm>

using namespace rive;

void Bone::addChildBone(Bone* bone) { m_ChildBones.push_back(bone); }

StatusCode Bone::onAddedClean(CoreContext* context)
{
	Super::onAddedClean(context);
	if (!parent()->is<Bone>())
	{
		return StatusCode::MissingObject;
	}
	parent()->as<Bone>()->addChildBone(this);
	return StatusCode::Ok;
}

void Bone::lengthChanged()
{
	for (auto bone : m_ChildBones)
	{
		bone->markTransformDirty();
	}
}

float Bone::x() const { return parent()->as<Bone>()->length(); }

float Bone::y() const { return 0.0f; }

void Bone::tipWorldTranslation(Vec2D& result)
{
	result[0] = length();
	result[1] = 0.0f;
	Vec2D::transform(result, result, worldTransform());
}

void Bone::addPeerConstraint(Constraint* peer)
{
	assert(std::find(m_PeerConstraints.begin(),
	                 m_PeerConstraints.end(),
	                 peer) == m_PeerConstraints.end());
	m_PeerConstraints.push_back(peer);
}