| #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 = worldTransform() * Vec2D(length(), 0); } |
| |
| void Bone::addPeerConstraint(Constraint* peer) { |
| assert(std::find(m_PeerConstraints.begin(), m_PeerConstraints.end(), peer) == |
| m_PeerConstraints.end()); |
| m_PeerConstraints.push_back(peer); |
| } |