#ifndef _RIVE_BONE_HPP_
#define _RIVE_BONE_HPP_
#include "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