| #include "rive/constraints/scrolling/scroll_constraint.hpp" |
| #include "rive/constraints/scrolling/scroll_physics.hpp" |
| #include "rive/core_context.hpp" |
| #include "math.h" |
| |
| using namespace rive; |
| |
| void ScrollPhysics::accumulate(Vec2D delta) |
| { |
| auto now = std::chrono::high_resolution_clock::now(); |
| auto ms = std::chrono::duration_cast<std::chrono::microseconds>( |
| now.time_since_epoch()) |
| .count(); |
| float elapsedSeconds = (ms - m_lastTime) / 1000000.0f; |
| if (elapsedSeconds > 0) |
| { |
| auto lastSpeed = m_speed; |
| m_speed = Vec2D(delta.x / elapsedSeconds, delta.y / elapsedSeconds); |
| m_acceleration = Vec2D((lastSpeed.x + m_speed.x) / elapsedSeconds, |
| (lastSpeed.y + m_speed.y) / elapsedSeconds); |
| } |
| m_lastTime = ms; |
| } |
| |
| StatusCode ScrollPhysics::import(ImportStack& importStack) |
| { |
| auto backboardImporter = |
| importStack.latest<BackboardImporter>(BackboardBase::typeKey); |
| if (backboardImporter != nullptr) |
| { |
| backboardImporter->addPhysics(this); |
| } |
| else |
| { |
| return StatusCode::MissingObject; |
| } |
| return StatusCode::Ok; |
| } |