#include "rive/animation/transition_condition.hpp"
#include "rive/animation/state_transition.hpp"
#include "rive/importers/state_transition_importer.hpp"

using namespace rive;

StatusCode TransitionCondition::onAddedDirty(CoreContext* context)
{
    return StatusCode::Ok;
}

StatusCode TransitionCondition::onAddedClean(CoreContext* context)
{
    return StatusCode::Ok;
}

StatusCode TransitionCondition::import(ImportStack& importStack)
{
    auto transitionImporter =
        importStack.latest<StateTransitionImporter>(StateTransition::typeKey);
    if (transitionImporter == nullptr)
    {
        return StatusCode::MissingObject;
    }
    transitionImporter->addCondition(this);
    return Super::import(importStack);
}
