﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PositionSpring : MonoBehaviour
{
    public Vector3 pin;
    public Transform pinTransform;
    public float strength = 1;
    public float dampener = 0;
    public float threshold = 0;
    Vector3 direction;
    Vector3 velocity;

    private void Update()
    {
        Step(Time.deltaTime, 7);
    }

    public void Step(float deltaTime, int subSteps = 1)
    {
        deltaTime /= subSteps;

        for(int i = 0; i < subSteps; i++)
        {
            if (pinTransform != null)
                pin = pinTransform.position;

            direction = (transform.position - pin).normalized;
            Vector3 f = -direction * strength - dampener * velocity;

            if (Vector3.Distance(pin, transform.position + (velocity * deltaTime)) > threshold)
            {
                velocity += f * deltaTime;
            }
            else
            {
                velocity = Vector3.MoveTowards(velocity, Vector3.zero, deltaTime * 5);
            }
            transform.position += velocity * deltaTime;
        }
    }
}
