| #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() | |
| { | |
| if (!m_WriteBuffer.empty()) | |
| { | |
| m_binaryReader.complete(&m_WriteBuffer.front(), m_binaryWriter.size()); | |
| } | |
| } | |
| void AnimationReset::apply(Artboard* artboard) | |
| { | |
| if (m_WriteBuffer.empty()) | |
| { | |
| return; | |
| } | |
| 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++; | |
| } | |
| } | |
| } |