Sunday, 9 October 2016

MovingQueue

using UnityEngine;
using System.Collections;

public class MovingQueue : MonoBehaviour
{

    public float TimeMoved = 0;

    public void moveTo(Vector3 destination, float duration, Vector3 manipulate = new Vector3(), IEnumerator nextAction = null)
    {
        StopAllCoroutines();
        StartCoroutine(tweenTo(destination, duration, manipulate, nextAction));
    }

    IEnumerator tweenTo(Vector3 destination, float duration, Vector3 manipulate = new Vector3(), IEnumerator nextAction = null)
    {
        float timeThrough = 0.0f;
        Vector3 initialPosition = transform.position;
        while (Vector3.Distance(transform.position, destination) >= 0.05 && timeThrough < duration)
        {
            timeThrough += Time.deltaTime;
            TimeMoved += Time.deltaTime;
            Vector3 target = Vector3.Lerp(initialPosition, destination, timeThrough / duration);
            Vector3 manip = Vector3.Lerp(Vector3.zero, manipulate, Mathf.PingPong(timeThrough, duration / 2));
            transform.position = target + manip;
            yield return null;
        }
        transform.position = destination;

    }

    public void moveToLocal(Vector3 destination, float duration, Vector3 manipulate = new Vector3(), IEnumerator nextAction = null)
    {
        StopAllCoroutines();
        StartCoroutine(tweenToLocal(destination, duration, manipulate, nextAction));
    }

    IEnumerator tweenToLocal(Vector3 destination, float duration, Vector3 manipulate = new Vector3(), IEnumerator nextAction = null)
    {
        float timeThrough = 0.0f;
        Vector3 initialPosition = transform.localPosition;
        while (Vector3.Distance(transform.localPosition, destination) >= 0.05 && timeThrough < duration)
        {
            timeThrough += Time.deltaTime;
            TimeMoved += Time.deltaTime;
            Vector3 target = Vector3.Lerp(initialPosition, destination, timeThrough / duration);
            Vector3 manip = Vector3.Lerp(Vector3.zero, manipulate, Mathf.PingPong(timeThrough, duration / 2));
            transform.localPosition = target + manip;
            yield return null;
        }
        transform.localPosition = destination;
        if (nextAction != null)
            StartCoroutine(nextAction);
    }
}

No comments:

Post a Comment