|  | #ifndef _RIVE_DISTANCE_CONSTRAINT_BASE_HPP_ | 
|  | #define _RIVE_DISTANCE_CONSTRAINT_BASE_HPP_ | 
|  | #include "rive/constraints/targeted_constraint.hpp" | 
|  | #include "rive/core/field_types/core_double_type.hpp" | 
|  | #include "rive/core/field_types/core_uint_type.hpp" | 
|  | namespace rive | 
|  | { | 
|  | class DistanceConstraintBase : public TargetedConstraint | 
|  | { | 
|  | protected: | 
|  | typedef TargetedConstraint Super; | 
|  |  | 
|  | public: | 
|  | static const uint16_t typeKey = 82; | 
|  |  | 
|  | /// Helper to quickly determine if a core object extends another without | 
|  | /// RTTI at runtime. | 
|  | bool isTypeOf(uint16_t typeKey) const override | 
|  | { | 
|  | switch (typeKey) | 
|  | { | 
|  | case DistanceConstraintBase::typeKey: | 
|  | case TargetedConstraintBase::typeKey: | 
|  | case ConstraintBase::typeKey: | 
|  | case ComponentBase::typeKey: | 
|  | return true; | 
|  | default: | 
|  | return false; | 
|  | } | 
|  | } | 
|  |  | 
|  | uint16_t coreType() const override { return typeKey; } | 
|  |  | 
|  | static const uint16_t distancePropertyKey = 177; | 
|  | static const uint16_t modeValuePropertyKey = 178; | 
|  |  | 
|  | private: | 
|  | float m_Distance = 100.0f; | 
|  | int m_ModeValue = 0; | 
|  |  | 
|  | public: | 
|  | inline float distance() const { return m_Distance; } | 
|  | void distance(float value) | 
|  | { | 
|  | if (m_Distance == value) | 
|  | { | 
|  | return; | 
|  | } | 
|  | m_Distance = value; | 
|  | distanceChanged(); | 
|  | } | 
|  |  | 
|  | inline int modeValue() const { return m_ModeValue; } | 
|  | void modeValue(int value) | 
|  | { | 
|  | if (m_ModeValue == value) | 
|  | { | 
|  | return; | 
|  | } | 
|  | m_ModeValue = value; | 
|  | modeValueChanged(); | 
|  | } | 
|  |  | 
|  | Core* clone() const override; | 
|  | void copy(const DistanceConstraintBase& object) | 
|  | { | 
|  | m_Distance = object.m_Distance; | 
|  | m_ModeValue = object.m_ModeValue; | 
|  | TargetedConstraint::copy(object); | 
|  | } | 
|  |  | 
|  | bool deserialize(uint16_t propertyKey, BinaryReader& reader) override | 
|  | { | 
|  | switch (propertyKey) | 
|  | { | 
|  | case distancePropertyKey: | 
|  | m_Distance = CoreDoubleType::deserialize(reader); | 
|  | return true; | 
|  | case modeValuePropertyKey: | 
|  | m_ModeValue = CoreUintType::deserialize(reader); | 
|  | return true; | 
|  | } | 
|  | return TargetedConstraint::deserialize(propertyKey, reader); | 
|  | } | 
|  |  | 
|  | protected: | 
|  | virtual void distanceChanged() {} | 
|  | virtual void modeValueChanged() {} | 
|  | }; | 
|  | } // namespace rive | 
|  |  | 
|  | #endif |