// 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);
