blob: fcafc0cd19a4424c3ebc9ee5390ecaf2598b5ff4 [file] [log] [blame]
#ifndef _RIVE_SCENE_HPP_
#define _RIVE_SCENE_HPP_
#include "rive/animation/loop.hpp"
#include "rive/math/aabb.hpp"
#include "rive/math/vec2d.hpp"
#include <string>
namespace rive {
class ArtboardInstance;
class Renderer;
class SMIInput;
class SMIBool;
class SMINumber;
class SMITrigger;
class Scene {
protected:
ArtboardInstance* m_ArtboardInstance;
Scene(ArtboardInstance*);
public:
virtual ~Scene() {}
Scene(Scene const& lhs) : m_ArtboardInstance(lhs.m_ArtboardInstance) {}
float width() const;
float height() const;
AABB bounds() const { return {0, 0, this->width(), this->height()}; }
virtual std::string name() const = 0;
// Returns onShot if this has no looping (e.g. a statemachine)
virtual Loop loop() const = 0;
// Returns true iff the Scene is known to not be fully opaque
virtual bool isTranslucent() const = 0;
// returns -1 for continuous
virtual float durationSeconds() const = 0;
// returns true if draw() should be called
virtual bool advanceAndApply(float elapsedSeconds) = 0;
void draw(Renderer*);
virtual void pointerDown(Vec2D);
virtual void pointerMove(Vec2D);
virtual void pointerUp(Vec2D);
virtual size_t inputCount() const;
virtual SMIInput* input(size_t index) const;
virtual SMIBool* getBool(const std::string&) const;
virtual SMINumber* getNumber(const std::string&) const;
virtual SMITrigger* getTrigger(const std::string&) const;
};
} // namespace rive
#endif