blob: 6e8d2049c2bf8273d803c2f7db94ea5e99648de2 [file] [log] [blame]
#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;
}