blob: 494c2191f700b015fe0afd075841a71cf3229b2c [file]
#include "rive/animation/blend_animation_direct.hpp"
#include "rive/animation/state_machine.hpp"
#include "rive/animation/state_machine_number.hpp"
#include "rive/importers/state_machine_importer.hpp"
#include "rive/importers/bindable_property_importer.hpp"
#include "rive/data_bind/bindable_property.hpp"
using namespace rive;
BlendAnimationDirect::~BlendAnimationDirect()
{
if (m_bindableProperty != nullptr)
{
delete m_bindableProperty;
m_bindableProperty = nullptr;
}
}
StatusCode BlendAnimationDirect::onAddedDirty(CoreContext* context)
{
return StatusCode::Ok;
}
StatusCode BlendAnimationDirect::onAddedClean(CoreContext* context)
{
return StatusCode::Ok;
}
StatusCode BlendAnimationDirect::import(ImportStack& importStack)
{
auto stateMachineImporter = importStack.latest<StateMachineImporter>(
StateMachine::typeKey);
if (stateMachineImporter == nullptr)
{
return StatusCode::MissingObject;
}
// Make sure the inputId doesn't overflow the input buffer.
if (blendSource() == static_cast<int>(DirectBlendSource::inputId))
{
if ((size_t)inputId() >= stateMachineImporter->stateMachine()->inputCount())
{
return StatusCode::InvalidObject;
}
auto input = stateMachineImporter->stateMachine()->input((size_t)inputId());
if (input == nullptr || !input->is<StateMachineNumber>())
{
return StatusCode::InvalidObject;
}
}
else if (blendSource() == static_cast<int>(DirectBlendSource::dataBindId))
{
auto bindablePropertyImporter = importStack
.latest<BindablePropertyImporter>(
BindablePropertyBase::typeKey);
if (bindablePropertyImporter == nullptr)
{
return StatusCode::MissingObject;
}
m_bindableProperty = bindablePropertyImporter->bindableProperty();
}
return Super::import(importStack);
}