#include "rive/animation/blend_state_direct_instance.hpp"
#include "rive/animation/state_machine_input_instance.hpp"

using namespace rive;

BlendStateDirectInstance::BlendStateDirectInstance(
    const BlendStateDirect* blendState) :
    BlendStateInstance<BlendStateDirect, BlendAnimationDirect>(blendState) {}

void BlendStateDirectInstance::advance(float seconds, SMIInput** inputs) {
    BlendStateInstance<BlendStateDirect, BlendAnimationDirect>::advance(seconds,
                                                                        inputs);
    for (auto& animation : m_AnimationInstances) {
        auto inputInstance = inputs[animation.blendAnimation()->inputId()];

        auto numberInput = reinterpret_cast<const SMINumber*>(inputInstance);
        auto value = numberInput->value();
        animation.mix(std::min(1.0f, std::max(0.0f, value / 100.0f)));
    }
}
