#include "rive/artboard.hpp"
#include "rive/scene.hpp"

using namespace rive;

Scene::Scene(ArtboardInstance* abi) : m_ArtboardInstance(abi) {
    assert(m_ArtboardInstance->isInstance());
}

float Scene::width() const {
    return m_ArtboardInstance->width();
}

float Scene::height() const {
    return m_ArtboardInstance->height();
}

void Scene::draw(Renderer* renderer) {
    m_ArtboardInstance->draw(renderer);
}

void Scene::pointerDown(Vec2D) {}
void Scene::pointerMove(Vec2D) {}
void Scene::pointerUp(Vec2D) {}

size_t Scene::inputCount() const { return 0; }
SMIInput* Scene::input(size_t index) const { return nullptr; }
SMIBool* Scene::getBool(const std::string&) const { return nullptr; }
SMINumber* Scene::getNumber(const std::string&) const { return nullptr; }
SMITrigger* Scene::getTrigger(const std::string&) const { return nullptr; }
