#include "rive/artboard.hpp"
#include "rive/importers/artboard_importer.hpp"
#include "rive/animation/linear_animation.hpp"
#include "rive/animation/state_machine.hpp"
#include "rive/artboard.hpp"

using namespace rive;

ArtboardImporter::ArtboardImporter(Artboard* artboard) : m_Artboard(artboard) {}

void ArtboardImporter::addComponent(Core* object) { m_Artboard->addObject(object); }

void ArtboardImporter::addAnimation(LinearAnimation* animation)
{
    m_Artboard->addAnimation(animation);
}

void ArtboardImporter::addStateMachine(StateMachine* stateMachine)
{
    m_Artboard->addStateMachine(stateMachine);
}

StatusCode ArtboardImporter::resolve() { return m_Artboard->initialize(); }

bool ArtboardImporter::readNullObject()
{
    addComponent(nullptr);
    return true;
}