blob: e33b2a1ae9c9538b00fa5839a5ef0a083dc16c5f [file] [log] [blame]
#ifndef _RIVE_CUBIC_WEIGHT_BASE_HPP_
#define _RIVE_CUBIC_WEIGHT_BASE_HPP_
#include "rive/bones/weight.hpp"
#include "rive/core/field_types/core_uint_type.hpp"
namespace rive {
class CubicWeightBase : public Weight {
protected:
typedef Weight Super;
public:
static const uint16_t typeKey = 46;
/// Helper to quickly determine if a core object extends another without RTTI
/// at runtime.
bool isTypeOf(uint16_t typeKey) const override {
switch (typeKey) {
case CubicWeightBase::typeKey:
case WeightBase::typeKey:
case ComponentBase::typeKey:
return true;
default:
return false;
}
}
uint16_t coreType() const override { return typeKey; }
static const uint16_t inValuesPropertyKey = 110;
static const uint16_t inIndicesPropertyKey = 111;
static const uint16_t outValuesPropertyKey = 112;
static const uint16_t outIndicesPropertyKey = 113;
private:
uint32_t m_InValues = 255;
uint32_t m_InIndices = 1;
uint32_t m_OutValues = 255;
uint32_t m_OutIndices = 1;
public:
inline uint32_t inValues() const { return m_InValues; }
void inValues(uint32_t value) {
if (m_InValues == value) {
return;
}
m_InValues = value;
inValuesChanged();
}
inline uint32_t inIndices() const { return m_InIndices; }
void inIndices(uint32_t value) {
if (m_InIndices == value) {
return;
}
m_InIndices = value;
inIndicesChanged();
}
inline uint32_t outValues() const { return m_OutValues; }
void outValues(uint32_t value) {
if (m_OutValues == value) {
return;
}
m_OutValues = value;
outValuesChanged();
}
inline uint32_t outIndices() const { return m_OutIndices; }
void outIndices(uint32_t value) {
if (m_OutIndices == value) {
return;
}
m_OutIndices = value;
outIndicesChanged();
}
Core* clone() const override;
void copy(const CubicWeightBase& object) {
m_InValues = object.m_InValues;
m_InIndices = object.m_InIndices;
m_OutValues = object.m_OutValues;
m_OutIndices = object.m_OutIndices;
Weight::copy(object);
}
bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
switch (propertyKey) {
case inValuesPropertyKey:
m_InValues = CoreUintType::deserialize(reader);
return true;
case inIndicesPropertyKey:
m_InIndices = CoreUintType::deserialize(reader);
return true;
case outValuesPropertyKey:
m_OutValues = CoreUintType::deserialize(reader);
return true;
case outIndicesPropertyKey:
m_OutIndices = CoreUintType::deserialize(reader);
return true;
}
return Weight::deserialize(propertyKey, reader);
}
protected:
virtual void inValuesChanged() {}
virtual void inIndicesChanged() {}
virtual void outValuesChanged() {}
virtual void outIndicesChanged() {}
};
} // namespace rive
#endif