| #include "rive/animation/animation_reset.hpp" |
| #include "rive/core/vector_binary_writer.hpp" |
| #include "rive/generated/core_registry.hpp" |
| |
| using namespace rive; |
| |
| AnimationReset::AnimationReset() : m_binaryWriter(&m_WriteBuffer), m_binaryReader(nullptr, 0) {} |
| |
| void AnimationReset::writeObjectId(uint32_t objectId) { m_binaryWriter.writeVarUint(objectId); } |
| |
| void AnimationReset::writeTotalProperties(uint32_t value) { m_binaryWriter.writeVarUint(value); } |
| |
| void AnimationReset::writePropertyKey(uint32_t value) { m_binaryWriter.writeVarUint(value); } |
| |
| void AnimationReset::writePropertyValue(float value) { m_binaryWriter.writeFloat(value); } |
| |
| void AnimationReset::clear() { m_binaryWriter.clear(); } |
| |
| void AnimationReset::complete() |
| { |
| m_binaryReader.complete(&m_WriteBuffer.front(), m_binaryWriter.size()); |
| } |
| |
| void AnimationReset::apply(Artboard* artboard) |
| { |
| m_binaryReader.reset(&m_WriteBuffer.front()); |
| while (!m_binaryReader.isEOF()) |
| { |
| auto objectId = m_binaryReader.readVarUint32(); |
| auto object = artboard->resolve(objectId); |
| auto totalProperties = m_binaryReader.readVarUint32(); |
| uint32_t currentPropertyIndex = 0; |
| while (currentPropertyIndex < totalProperties) |
| { |
| auto propertyKey = m_binaryReader.readVarUint32(); |
| auto propertyValue = m_binaryReader.readFloat32(); |
| switch (CoreRegistry::propertyFieldId(propertyKey)) |
| { |
| case CoreDoubleType::id: |
| CoreRegistry::setDouble(object, propertyKey, propertyValue); |
| break; |
| case CoreColorType::id: |
| CoreRegistry::setColor(object, propertyKey, propertyValue); |
| break; |
| } |
| currentPropertyIndex++; |
| } |
| } |
| } |