blob: 70651e226df0b0691172f8625a7f8671c8f30d45 [file] [log] [blame]
#ifndef _RIVE_SCROLL_PHYSICS_HPP_
#define _RIVE_SCROLL_PHYSICS_HPP_
#include "rive/artboard.hpp"
#include "rive/backboard.hpp"
#include "rive/constraints/draggable_constraint.hpp"
#include "rive/generated/constraints/scrolling/scroll_physics_base.hpp"
#include "rive/importers/artboard_importer.hpp"
#include "rive/importers/backboard_importer.hpp"
#include "rive/importers/import_stack.hpp"
#include "rive/math/math_types.hpp"
#include "rive/math/vec2d.hpp"
#include <chrono>
#include <stdio.h>
#include <vector>
namespace rive
{
class ScrollConstraint;
enum class ScrollPhysicsType : uint8_t
{
elastic,
clamped
};
class ScrollPhysics : public ScrollPhysicsBase
{
private:
bool m_isRunning = false;
long long m_lastTime =
std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::high_resolution_clock::now().time_since_epoch())
.count();
protected:
DraggableConstraintDirection m_direction;
Vec2D m_speed;
Vec2D m_acceleration;
public:
virtual bool enabled() { return isRunning(); }
virtual bool isRunning() { return m_isRunning; }
virtual void prepare(DraggableConstraintDirection dir)
{
m_direction = dir;
}
virtual Vec2D clamp(Vec2D range, Vec2D value) { return Vec2D(); };
virtual Vec2D advance(float elapsedSeconds) { return Vec2D(); };
virtual void accumulate(Vec2D delta);
virtual void run(Vec2D range,
Vec2D value,
std::vector<Vec2D> snappingPoints)
{
m_isRunning = true;
}
virtual void stop() { m_isRunning = false; }
virtual void reset() {}
StatusCode import(ImportStack& importStack) override;
};
} // namespace rive
#endif