| #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 |