// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:newton/newton.dart'; // Base class for creating Simulations for the animation Timeline. abstract class Force { Simulation release(double position, double velocity); } class SpringForce extends Force { SpringForce(this.spring, { this.left: 0.0, this.right: 1.0 }); final SpringDescription spring; // Where to put the spring's resting point when releasing left or right, // respectively. final double left, right; // We overshoot the target by this distance, but stop the simulation when // the spring gets within this distance (regardless of how fast it's moving). // This causes the spring to settle a bit faster than it otherwise would. static final Tolerance tolerance = new Tolerance( velocity: double.INFINITY, distance: 0.01 ); Simulation release(double position, double velocity) { double target = velocity < 0.0 ? this.left - tolerance.distance : this.right + tolerance.distance; return new SpringSimulation(spring, position, target, velocity) ..tolerance = tolerance; } } final SpringDescription _kDefaultSpringDesc = new SpringDescription.withDampingRatio( mass: 1.0, springConstant: 500.0, ratio: 1.0 ); final SpringForce kDefaultSpringForce = new SpringForce(_kDefaultSpringDesc);