#ifndef _RIVE_ROTATION_CONSTRAINT_BASE_HPP_
#define _RIVE_ROTATION_CONSTRAINT_BASE_HPP_
#include "rive/constraints/transform_component_constraint.hpp"
namespace rive {
    class RotationConstraintBase : public TransformComponentConstraint {
    protected:
        typedef TransformComponentConstraint Super;

    public:
        static const uint16_t typeKey = 89;

        /// Helper to quickly determine if a core object extends another without RTTI
        /// at runtime.
        bool isTypeOf(uint16_t typeKey) const override {
            switch (typeKey) {
                case RotationConstraintBase::typeKey:
                case TransformComponentConstraintBase::typeKey:
                case TransformSpaceConstraintBase::typeKey:
                case TargetedConstraintBase::typeKey:
                case ConstraintBase::typeKey:
                case ComponentBase::typeKey:
                    return true;
                default:
                    return false;
            }
        }

        uint16_t coreType() const override { return typeKey; }

        Core* clone() const override;

    protected:
    };
} // namespace rive

#endif