Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / rive-cpp / src / bones / bone.cpp
1 #include "rive/bones/bone.hpp"
2 #include "rive/math/vec2d.hpp"
3 #include <algorithm>
4
5 using namespace rive;
6
7 void Bone::addChildBone(Bone* bone) { m_ChildBones.push_back(bone); }
8
9 StatusCode Bone::onAddedClean(CoreContext* context) {
10     Super::onAddedClean(context);
11     if (!parent()->is<Bone>()) {
12         return StatusCode::MissingObject;
13     }
14     parent()->as<Bone>()->addChildBone(this);
15     return StatusCode::Ok;
16 }
17
18 void Bone::lengthChanged() {
19     for (auto bone : m_ChildBones) {
20         bone->markTransformDirty();
21     }
22 }
23
24 float Bone::x() const { return parent()->as<Bone>()->length(); }
25
26 float Bone::y() const { return 0.0f; }
27
28 Vec2D Bone::tipWorldTranslation() const {
29     return worldTransform() * Vec2D(length(), 0);
30 }
31
32 void Bone::addPeerConstraint(Constraint* peer) {
33     assert(std::find(m_PeerConstraints.begin(), m_PeerConstraints.end(), peer) ==
34            m_PeerConstraints.end());
35     m_PeerConstraints.push_back(peer);
36 }