using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rabbit : MonoBehaviour {
public float speed;
public float distance;
private Transform[] target;
private int current = 0;
private bool run = false;
private Transform pivot;
private Vector3 pivotStart;
private Vector3 pivotVec;
private float pivotNorm;
private bool theEnd = false;
// Use this for initialization
void Start () {
int count = GameObject.Find("Trajectory").transform.childCount;
target = new Transform[count];
for(int i = 0; i < count; i++)
target[i] = GameObject.Find("Trajectory").transform.GetChild(i);
}
// Update is called once per frame
void Update () {
if (current >= target.Length - 1) {
//if ((Vector3.Distance(transform.position, GameObject.Find("ThirdPersonController").transform.position) <= distance))
//GameObject.Find("GameController").GetComponent<GameController>().LoadNextScene();
}
else if (transform.position.x == target[current].position.x && transform.position.z == target[current].position.z) {
current = Mathf.Min(current + 1, target.Length - 1);
if (target[current].tag == "pivot") {
pivot = target[current];
current = Mathf.Min(current + 1, target.Length - 1);
pivotNorm = Vector3.Distance(target[current].position, transform.position);
pivotVec = Vector3.Normalize(target[current].position - transform.position);
pivotStart = transform.position;
}
else
pivot = null;
run = (Vector3.Distance(transform.position, GameObject.Find("ThirdPersonController").transform.position) <= distance);
if (run) {
Vector3 pos;
if (pivot != null) {
float coefTarget = Mathf.Min(1.0f, Vector3.Dot(transform.position - pivotStart, pivotVec) / pivotNorm * 2.0f);
float coefPivot = 1.0f - coefTarget;
//Debug.Log("coefPivot: "+coefPivot+" coefTarget: "+coefTarget);
pos = Vector3.MoveTowards(transform.position, target[current].position, speed * Time.deltaTime) * coefTarget + Vector3.MoveTowards(transform.position, pivot.position, speed * Time.deltaTime) * coefPivot;
}
else
pos = Vector3.MoveTowards(transform.position, target[current].position, speed * Time.deltaTime);
transform.LookAt(new Vector3(pos.x, 0, pos.z));
transform.position = pos;
}
}
else {
if (run) {
Vector3 pos;
if (pivot != null) {
float coefTarget = Mathf.Min(1.0f, Vector3.Dot(transform.position - pivotStart, pivotVec) / pivotNorm * 2.0f);
float coefPivot = 1.0f - coefTarget;
//Debug.Log("coefPivot: " + coefPivot + " coefTarget: " + coefTarget);
pos = Vector3.MoveTowards(transform.position, target[current].position, speed * Time.deltaTime) * coefTarget + Vector3.MoveTowards(transform.position, pivot.position, speed * Time.deltaTime) * coefPivot;
}
else
pos = Vector3.MoveTowards(transform.position, target[current].position, speed * Time.deltaTime);
transform.LookAt(new Vector3(pos.x, 0, pos.z));
transform.position = pos;
}
else
run = (Vector3.Distance(transform.position, GameObject.Find("ThirdPersonController").transform.position) <= distance);
}
}
}