| #include "rive/bones/tendon.hpp" |
| #include "rive/bones/bone.hpp" |
| #include "rive/bones/skin.hpp" |
| #include "rive/core_context.hpp" |
| |
| using namespace rive; |
| |
| StatusCode Tendon::onAddedDirty(CoreContext* context) |
| { |
| Mat2D bind; |
| bind[0] = xx(); |
| bind[1] = xy(); |
| bind[2] = yx(); |
| bind[3] = yy(); |
| bind[4] = tx(); |
| bind[5] = ty(); |
| |
| if (!bind.invert(&m_InverseBind)) |
| { |
| return StatusCode::FailedInversion; |
| } |
| |
| StatusCode code = Super::onAddedDirty(context); |
| if (code != StatusCode::Ok) |
| { |
| return code; |
| } |
| auto coreObject = context->resolve(boneId()); |
| if (coreObject == nullptr || !coreObject->is<Bone>()) |
| { |
| return StatusCode::MissingObject; |
| } |
| |
| m_Bone = reinterpret_cast<Bone*>(coreObject); |
| |
| return StatusCode::Ok; |
| } |
| |
| StatusCode Tendon::onAddedClean(CoreContext* context) |
| { |
| if (!parent()->is<Skin>()) |
| { |
| return StatusCode::MissingObject; |
| } |
| |
| parent()->as<Skin>()->addTendon(this); |
| |
| return StatusCode::Ok; |
| } |