| #ifndef _RIVE_I_KCONSTRAINT_HPP_ | |
| #define _RIVE_I_KCONSTRAINT_HPP_ | |
| #include "rive/generated/constraints/ik_constraint_base.hpp" | |
| #include "rive/math/mat2d.hpp" | |
| #include "rive/math/transform_components.hpp" | |
| #include <vector> | |
| namespace rive | |
| { | |
| class Bone; | |
| class IKConstraint : public IKConstraintBase | |
| { | |
| private: | |
| struct BoneChainLink | |
| { | |
| int index; | |
| Bone* bone; | |
| float angle; | |
| TransformComponents transformComponents; | |
| Mat2D parentWorldInverse; | |
| }; | |
| std::vector<BoneChainLink> m_FkChain; | |
| void solve1(BoneChainLink* fk1, const Vec2D& worldTargetTranslation); | |
| void solve2(BoneChainLink* fk1, BoneChainLink* fk2, const Vec2D& worldTargetTranslation); | |
| void constrainRotation(BoneChainLink& fk, float rotation); | |
| public: | |
| void markConstraintDirty() override; | |
| StatusCode onAddedClean(CoreContext* context) override; | |
| void constrain(TransformComponent* component) override; | |
| void buildDependencies() override; | |
| }; | |
| } // namespace rive | |
| #endif |