#ifndef _RIVE_BONE_HPP_
#define _RIVE_BONE_HPP_
#include "rive/generated/bones/bone_base.hpp"
#include <stdio.h>
#include <vector>

namespace rive
{
    class Constraint;
    class Bone : public BoneBase
    {

    private:
        std::vector<Bone*> m_ChildBones;
        std::vector<Constraint*> m_PeerConstraints;

    public:
        StatusCode onAddedClean(CoreContext* context) override;
        float x() const override;
        float y() const override;

        inline const std::vector<Bone*> childBones() { return m_ChildBones; }

        void addChildBone(Bone* bone);
        void tipWorldTranslation(Vec2D& result);
        void addPeerConstraint(Constraint* peer);
        const std::vector<Constraint*>& peerConstraints() const
        {
            return m_PeerConstraints;
        }

    private:
        void lengthChanged() override;
    };
} // namespace rive

#endif