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

public class RollOffTrace : MonoBehaviour {
    public Transform[] objs;
    public float[] rotates;
    public float time = 1;
    public float height = 2;
    public float rolloff = 0.3f;
    public bool faceToTarget = true;

    public float dist = 0;

    private float time_count = 0;
    private List<Transform> objs2;
    private List<Transform> objs3;
    private List<Vector3> lastPosition;
    private float real_height = 0;
    // Use this for initialization
    void Awake () {
        time_count = 0;
        objs2 = new List<Transform>();
        objs3 = new List<Transform>();
        lastPosition = new List<Vector3>();
        for (int i = 0; i < objs.Length; i++)
        {
            objs[i].transform.localPosition = Vector3.zero;
            objs[i].transform.localScale = Vector3.one;
            objs[i].transform.rotation = Quaternion.AngleAxis(rotates[i], gameObject.transform.forward);
            Transform t1 = objs[i].GetChild(0);
            t1.localPosition = Vector3.zero;
            t1.localScale = Vector3.one;
            t1.localRotation = Quaternion.AngleAxis(90, Vector3.up);
            objs2.Add(t1);
            Transform t2 = objs[i].GetChild(1);
            //if(t != null)
            {
                t2.localPosition = Vector3.zero;
                t2.localScale = Vector3.one;
                t2.localRotation = Quaternion.AngleAxis(90, Vector3.up);
                objs3.Add(t2);
            }
            lastPosition.Add(objs2[i].position);
        }
    }

    public void Reset()
    {
        time_count = 0;
        real_height = height * dist;
        for (int i = 0; i < objs.Length; i++)
        {
            objs[i].transform.localPosition = Vector3.zero;
            objs[i].transform.localScale = Vector3.one;
            objs[i].transform.rotation = Quaternion.AngleAxis(rotates[i], gameObject.transform.forward);
            Transform t1 = objs2[i];
            t1.localPosition = Vector3.zero;
            t1.localScale = Vector3.one;
            t1.localRotation = Quaternion.AngleAxis(90, Vector3.up);
            Transform t2 = objs3[i];
            //if(t != null)
            {
                t2.localPosition = Vector3.zero;
                t2.localScale = Vector3.one;
                t2.localRotation = Quaternion.AngleAxis(90, Vector3.up);
            }
            lastPosition[i] = (objs2[i].position);
        }
    }
	
	// Update is called once per frame
	void Update () {
        time_count += Time.deltaTime;
        float t = time_count / time;
        if (t > 1) return;
        if(t <= rolloff)//上升阶段
        {
            Vector3 pos = Vector3.up * real_height * Mathf.Sin(t / rolloff *  Mathf.PI / 2);
            for (int i = 0; i < objs.Length; i++)
            {
                objs2[i].transform.localPosition = pos;
                //if(i < objs3.Count -1 && objs3[i] != null)
                    objs3[i].transform.localPosition = pos;
                //objs2[i].transform.localRotation = Quaternion.AngleAxis(rotates[i], Vector3.up);
                if (faceToTarget)
                {
                    objs2[i].transform.forward = objs2[i].transform.position - lastPosition[i];
                    lastPosition[i] = objs2[i].transform.position;
                }
            }
        }
        else//下降阶段
        {
            Vector3 pos = Vector3.up * real_height * Mathf.Cos((t- rolloff) / (1-rolloff) * 0.5f * Mathf.PI);
            for (int i = 0; i < objs.Length; i++)
            {
                objs2[i].transform.localPosition = pos;
                //if (i < objs3.Count - 1 && objs3[i] != null)
                    objs3[i].transform.localPosition = pos;
                //objs2[i].transform.localRotation = Quaternion.AngleAxis(rotates[i], Vector3.up);
                if (faceToTarget)
                {
                    objs2[i].transform.forward = objs2[i].transform.position - lastPosition[i];
                    lastPosition[i] = objs2[i].transform.position;
                }
            }
        }

    }
}