|  | #ifndef _RIVE_SKIN_HPP_ | 
|  | #define _RIVE_SKIN_HPP_ | 
|  | #include "rive/generated/bones/skin_base.hpp" | 
|  | #include "rive/math/mat2d.hpp" | 
|  | #include <stdio.h> | 
|  | #include <vector> | 
|  |  | 
|  | namespace rive { | 
|  | class Tendon; | 
|  | class PathVertex; | 
|  | class Skinnable; | 
|  |  | 
|  | class Skin : public SkinBase { | 
|  | friend class Tendon; | 
|  |  | 
|  | public: | 
|  | ~Skin(); | 
|  |  | 
|  | private: | 
|  | Mat2D m_WorldTransform; | 
|  | std::vector<Tendon*> m_Tendons; | 
|  | float* m_BoneTransforms = nullptr; | 
|  | Skinnable* m_Skinnable; | 
|  |  | 
|  | protected: | 
|  | void addTendon(Tendon* tendon); | 
|  |  | 
|  | public: | 
|  | StatusCode onAddedClean(CoreContext* context) override; | 
|  | void buildDependencies() override; | 
|  | void deform(std::vector<PathVertex*>& vertices); | 
|  | void onDirty(ComponentDirt dirt) override; | 
|  | void update(ComponentDirt value) override; | 
|  |  | 
|  | #ifdef TESTING | 
|  | std::vector<Tendon*>& tendons() { return m_Tendons; } | 
|  | #endif | 
|  | }; | 
|  | } // namespace rive | 
|  |  | 
|  | #endif |