public SlidingThrottleController(
      MovableAcobject s,
      SteeringControls controls,
      float minSpeed,
      float midSpeed,
      float maxSpeed,
      FloatSpring accelerationSpring,
      float velocityHalflife) {
    super();
    this.s = s;
    this.controls = controls;
    this.midSpeed = midSpeed;
    this.maxSpeed = maxSpeed;
    this.minSpeed = minSpeed;
    this.accelerationSpring = accelerationSpring;

    // Initialise speed spring to desired velocity, no spring velocity (spatial acceleration)
    accelerationSpring.setVelocity(0);
    accelerationSpring.setPosition(desiredSpeedForThrottle());

    // Make velocity decay
    velocityDecay = new FloatDecay3f(velocityHalflife);

    // Current speed is desired speed
    currentSpeed = desiredSpeedForThrottle();
  }
  @Override
  public void update(float time) {

    // Update for current speed
    accelerationSpring.update(desiredSpeedForThrottle(), time);
    currentSpeed = accelerationSpring.getPosition();

    // s.moveLocal(2, currentSpeed * time);

    // Work out desired velocity, as target for decay
    NodeTranslator.makeTranslationVector(
        s.getRotation(), 2, currentSpeed, velocityDecay.getTarget());

    // Decay velocity towards desired
    velocityDecay.update(time);

    // Make the move
    move.set(velocityDecay.getPosition());
    move.multLocal(time);
    s.moveGlobal(move);
  }