blob: 2faf0d506da22317292a036de470fad1f323f1c0 [file] [log] [blame]
#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++;
}
}
}