blob: 80f92ecb1545e943bbcf747510ac40a046f09a30 [file] [log] [blame]
#include "rive/animation/transition_property_viewmodel_comparator.hpp"
#include "rive/animation/transition_value_number_comparator.hpp"
#include "rive/animation/transition_value_string_comparator.hpp"
#include "rive/animation/transition_value_color_comparator.hpp"
#include "rive/animation/transition_value_boolean_comparator.hpp"
#include "rive/animation/transition_value_enum_comparator.hpp"
#include "rive/animation/state_machine_instance.hpp"
#include "rive/importers/bindable_property_importer.hpp"
#include "rive/data_bind/bindable_property_number.hpp"
#include "rive/data_bind/bindable_property_string.hpp"
#include "rive/data_bind/bindable_property_color.hpp"
#include "rive/data_bind/bindable_property_enum.hpp"
#include "rive/data_bind/bindable_property_boolean.hpp"
using namespace rive;
StatusCode TransitionPropertyViewModelComparator::import(ImportStack& importStack)
{
auto bindablePropertyImporter =
importStack.latest<BindablePropertyImporter>(BindablePropertyBase::typeKey);
if (bindablePropertyImporter == nullptr)
{
return StatusCode::MissingObject;
}
m_bindableProperty = bindablePropertyImporter->bindableProperty();
return Super::import(importStack);
}
bool TransitionPropertyViewModelComparator::compare(
TransitionComparator* comparand,
TransitionConditionOp operation,
const StateMachineInstance* stateMachineInstance)
{
switch (m_bindableProperty->coreType())
{
case BindablePropertyNumber::typeKey:
if (comparand->is<TransitionPropertyViewModelComparator>())
{
auto rightValue = comparand->as<TransitionPropertyViewModelComparator>()
->value<BindablePropertyNumber, float>(stateMachineInstance);
return compareNumbers(value<BindablePropertyNumber, float>(stateMachineInstance),
rightValue,
operation);
}
else if (comparand->is<TransitionValueNumberComparator>())
{
auto rightValue = comparand->as<TransitionValueNumberComparator>()->value();
return compareNumbers(value<BindablePropertyNumber, float>(stateMachineInstance),
rightValue,
operation);
}
break;
case BindablePropertyString::typeKey:
if (comparand->is<TransitionPropertyViewModelComparator>())
{
auto rightValue =
comparand->as<TransitionPropertyViewModelComparator>()
->value<BindablePropertyString, std::string>(stateMachineInstance);
return compareStrings(
value<BindablePropertyString, std::string>(stateMachineInstance),
rightValue,
operation);
}
else if (comparand->is<TransitionValueStringComparator>())
{
auto rightValue = comparand->as<TransitionValueStringComparator>()->value();
return compareStrings(
value<BindablePropertyString, std::string>(stateMachineInstance),
rightValue,
operation);
}
break;
case BindablePropertyColor::typeKey:
if (comparand->is<TransitionPropertyViewModelComparator>())
{
auto rightValue = comparand->as<TransitionPropertyViewModelComparator>()
->value<BindablePropertyColor, int>(stateMachineInstance);
return compareColors(value<BindablePropertyColor, int>(stateMachineInstance),
rightValue,
operation);
}
else if (comparand->is<TransitionValueColorComparator>())
{
auto rightValue = comparand->as<TransitionValueColorComparator>()->value();
return compareColors(value<BindablePropertyColor, int>(stateMachineInstance),
rightValue,
operation);
}
break;
case BindablePropertyBoolean::typeKey:
if (comparand->is<TransitionPropertyViewModelComparator>())
{
auto rightValue = comparand->as<TransitionPropertyViewModelComparator>()
->value<BindablePropertyBoolean, bool>(stateMachineInstance);
return compareBooleans(value<BindablePropertyBoolean, bool>(stateMachineInstance),
rightValue,
operation);
}
else if (comparand->is<TransitionValueBooleanComparator>())
{
auto rightValue = comparand->as<TransitionValueBooleanComparator>()->value();
return compareBooleans(value<BindablePropertyBoolean, bool>(stateMachineInstance),
rightValue,
operation);
}
break;
case BindablePropertyEnum::typeKey:
if (comparand->is<TransitionPropertyViewModelComparator>())
{
auto rightValue = comparand->as<TransitionPropertyViewModelComparator>()
->value<BindablePropertyEnum, uint16_t>(stateMachineInstance);
return compareEnums(value<BindablePropertyEnum, uint16_t>(stateMachineInstance),
rightValue,
operation);
}
else if (comparand->is<TransitionValueEnumComparator>())
{
auto rightValue = comparand->as<TransitionValueEnumComparator>()->value();
return compareEnums(value<BindablePropertyEnum, uint16_t>(stateMachineInstance),
rightValue,
operation);
}
break;
}
return false;
}