2014년 9월 15일 월요일

n

using UnityEngine;
using System.Collections;


public class WayPoint : MonoBehaviour {
    GetAngle angleGameObject exTransform NearestRoadGameObject destinationTransform forwardSide;
    GameObject NearestPoint;float distanceint executeCodeint StagePointfloat accuredValuefloat objectAngleint direction;
    // Use this for initialization

    void findNearestPoint(){
        GameObject[] wayPointint idistance = 9999999float newDistanceint index = 0;
        float diffXfloat diffZ;
        wayPoint = GameObject.FindGameObjectsWithTag("WayPoint");
        for(i = 0i < wayPoint.Lengthi++){
            diffX = destination.transform.position.x - wayPoint[i].transform.position.x
            diffZ = destination.transform.position.z - wayPoint[i].transform.position.z
            diffX = diffX * diffXdiffZ = diffZ * diffZ;
            newDistance = Mathf.Sqrt(diffX + diffZ);
            if(newDistance < distance){
                distance = newDistanceindex = i;
            }
        }
        NearestPoint = wayPoint[index]; Debug.Log(NearestPoint.transform.parent.position);
    }

    void FindWayPoint (float x1float z1) { float x2float z2float lastAngle;
        GameObject[] wayPointint ifloat diffXfloat diffZGameObject tempPoint;
        distance = 9999999float newDistanceint index = 0;
        wayPoint = GameObject.FindGameObjectsWithTag("WayPoint");
        for(i = 0i < wayPoint.Lengthi++){
            diffX = gameObject.transform.position.x - wayPoint[i].transform.position.x
            diffZ = gameObject.transform.position.z - wayPoint[i].transform.position.z
            diffX = diffX * diffXdiffZ = diffZ * diffZ;
            newDistance = Mathf.Sqrt(diffX + diffZ);
            if(newDistance < distance){
                distance = newDistanceindex = i;
            }
        }
        tempPoint = wayPoint[index]; NearestRoad = tempPoint.transform.parent;
        if(tempPoint.name == "connection1"){
            forwardSide = NearestRoad.GetChild(1);
        }else{
            forwardSide = NearestRoad.GetChild(0);
        }

//        x1 = gameObject.transform.position.xz1 = gameObject.transform.position.z;
        x2 = tempPoint.transform.position.xz2 = tempPoint.transform.position.z;
        lastAngle = gameObject.transform.eulerAngles.y;
        objectAngle = angle.getAngle(x1,z1,x2,z2,lastAngle);

        if(objectAngle < 0){
            objectAngle = -objectAngledirection = -1;
        }else{
            direction = 1;
        }

        executeCode = 1Debug.Log(objectAngle);
    }

    void reConnect () {GameObject[] tempObjectGameObject doubleCheckint iGameObject[] temp3;
        float x1float z1float x2float z2distance = 9999999float lastAnglefloat wfloat h;
        float diffXfloat diffZfloat newDistance = 0int index = 0int aTransform temp;
        if(forwardSide.name == "connection1"){ a = 0; }else { a = 1; }
        temp = forwardSide.transform.parent;
        tempObject = GameObject.FindGameObjectsWithTag("WayPoint"); temp3 = new GameObject[4];
        temp3[0] = nulltemp3[1] = nulltemp3[2] = nulltemp3[3] = null;

        for(i = 0i < tempObject.Lengthi++){
            w = gameObject.transform.position.xh = gameObject.transform.transform.position.z;
            if(tempObject[i].transform.position.x < w + 2 && tempObject[i].transform.position.x > w - 2 &&
               tempObject[i].transform.position.z < h + 2 && tempObject[i].transform.position.z > h - 2){
                if(temp3[0] == null){ temp3[0] = tempObject[i]; }
                else if(temp3[1] == null ){ temp3[1] = tempObject[i]; }
                else if(temp3[2] == null ){ temp3[2] = tempObject[i]; }
                else if(temp3[3] == null ){ temp3[3] = tempObject[i]; }
            }
        }

        fori = 0i < 4i++ ){
            iftemp3[i] != null ){
            diffX = destination.transform.position.x - temp3[i].transform.parent.position.x
            diffZ = destination.transform.position.z - temp3[i].transform.parent.position.z
            diffX = diffX * diffXdiffZ = diffZ * diffZ;
                newDistance = Mathf.Sqrt(diffX + diffZ); Debug.Log"distance :  " + newDistance );
            if(newDistance < distance ){
                    index = idistance = newDistance;
            }
            }Debug.Log"distance is " +  distance + " index : " + index);
        }NearestRoad = temp3[index].transform.parent;

        iftemp == forwardSide.transform.parent ){
            if(a == 0){
                a = 1;
            }else{
                a = 0;
            }
        }

        forwardSide = NearestRoad.GetChild(a);

        lastAngle = gameObject.transform.eulerAngles.y;
        x1 = gameObject.transform.position.xz1 = gameObject.transform.position.z;
        x2 = forwardSide.transform.position.xz2 = forwardSide.transform.position.z;
        objectAngle = angle.getAngle(x1,z1,x2,z2,lastAngle);

        if(objectAngle < 0){
            objectAngle = -objectAngledirection = -1;
        }else { direction = 1; }
        Debug.Log("re " + forwardSide.transform.parent.position);

        diffX = gameObject.transform.position.x - forwardSide.transform.position.x;
        diffZ = gameObject.transform.position.z - forwardSide.transform.position.z;
        diffX = diffX * diffXdiffZ = diffZ * diffZdistance = Mathf.SqrtdiffX + diffZ );

    }



    void Start () {
        executeCode = 0StagePoint = 0angle = new GetAngle(); direction = 1destination = GameObject.Find("destination"); 
        findNearestPoint();
    }
    
    // Update is called once per frame
    void Update () {

        if(executeCode == 1){ 
            if(StagePoint == 0 && accuredValue < objectAngle ){ 
                gameObject.transform.Rotate(0Time.deltaTime * 180 * direction , 0);
                accuredValue += Time.deltaTime * 180;
            }else if(StagePoint == 0){ accuredValue = 0StagePoint = 1Debug.Log("rotate end");}
        

            if(StagePoint == 1 && accuredValue < distance){ 
                gameObject.transform.Translate(Vector3.forward * Time.deltaTime * 10);
                accuredValue += Time.deltaTime * 10;
            }else if(StagePoint == 1){Debug.Log("forward End");
                StagePoint = 2accuredValue = 0
                objectAngle = angle.getAngle
                    (gameObject.transform.position.xgameObject.transform.position.zNearestRoad.position.xNearestRoad.position.z , gameObject.transform.eulerAngles.y); 
                ifobjectAngle < 0 ){
                    objectAngle = -objectAngledirection = -1;
                }elsedirection = 1; }
            }

            if(StagePoint == 2 && accuredValue < objectAngle ){
                gameObject.transform.Rotate (0Time.deltaTime * 180 * direction0);
                accuredValue += Time.deltaTime * 180;
            }
            else if(StagePoint == 2){ float diffXfloat diffZ;
                accuredValue = 0StagePoint = 3
                diffX = gameObject.transform.position.x - forwardSide.position.x
                diffZ = gameObject.transform.position.z - forwardSide.position.z
                diffX = diffX * diffXdiffZ = diffZ * diffZ;
                distance = Mathf.Sqrt(diffX + diffZ);
            }

            if(StagePoint == 3 && accuredValue < distance){
                gameObject.transform.Translate(Vector3.forward * Time.deltaTime * 10);
                accuredValue += Time.deltaTime * 10;
            }else ifStagePoint == 3 && forwardSide.transform.parent == NearestPoint.transform.parent ){
                accuredValue = 0StagePoint = 0executeCode = 0;
                Debug.Log(forwardSide.transform.parent.position);
                Debug.Log(NearestPoint.transform.parent.position);
            }else if ( StagePoint == 3 ){
                accuredValue = 0StagePoint = 0executeCode = 2;
                Debug.Log(forwardSide.transform.parent.position);
                Debug.Log(NearestPoint.transform.parent.position); reConnect();
            }

        }

        if(executeCode == 2){
            ifStagePoint == 0 && accuredValue < objectAngle ){
                gameObject.transform.Rotate(0Time.deltaTime * 180 * direction ,0);
                accuredValue += Time.deltaTime * 180;
            }else if(StagePoint == 0){
                accuredValue = 0StagePoint = 1Debug.Log("re rotate"); Debug.Log("1 a : " + forwardSide.transform.parent.position + " b : " + NearestRoad.transform.position );
            }

            ifStagePoint == 1 && accuredValue < distance ){
                gameObject.transform.Translate(Vector3.forward * Time.deltaTime * 10);
                accuredValue += Time.deltaTime * 10;
                float diffX = gameObject.transform.position.x - destination.transform.position.x
                float diffZ = gameObject.transform.position.z - destination.transform.position.z;
                diffX = diffX * diffXdiffZ = diffZ * diffZfloat temp = Mathf.Sqrt(diffX + diffZ);
                if(temp < 4){ accuredValue = 0StagePoint = 0executeCode = 3distance = temp; }


            }else ifStagePoint == 1 && forwardSide.transform.parent.position == NearestPoint.transform.parent.position ){
                accuredValue = 0StagePoint = 0executeCode = 3Debug.Log ("end");
                float diffX = gameObject.transform.position.x - destination.transform.position.x;
                float diffZ = gameObject.transform.position.z - destination.transform.position.z;
                diffX = diffX * diffXdiffZ = diffZ * diffZ;
                distance = Mathf.Sqrt(diffX + diffZ);
                objectAngle = angle.getAngle(gameObject.transform.position.x,gameObject.transform.position.z,
                                             destination.transform.position.x,destination.transform.position.z,gameObject.transform.eulerAngles.y);
                if(objectAngle < 0){
                    objectAngle = -objectAngledirection = -1;
                }else{
                    direction = 1;
                }
                if(forwardSide.transform.parent.position == NearestPoint.transform.parent.position){ Debug.Log("??????"); }

            }else if(StagePoint == 1){
                accuredValue = 0StagePoint = 0executeCode = 2reConnect();

            }


        }

        if(executeCode == 3){
            if(StagePoint == 0 && accuredValue < objectAngle ){
                gameObject.transform.Rotate(0Time.deltaTime * 180 * direction0);
                accuredValue += 180 * Time.deltaTime;
            }else ifStagePoint == 0 ) {
                StagePoint = 1accuredValue = 0;
            }

            if(StagePoint == 1 && accuredValue < distance ) {
                gameObject.transform.Translate(Vector3.forward * Time.deltaTime * 10);
                accuredValue += Time.deltaTime * 10;
            }else if(StagePoint == 1){
                StagePoint = 0executeCode = 0accuredValue = 0Debug.Log("complete");
            }

        }


       if(Input.GetKeyDown(KeyCode.Space) && executeCode == 0){
            FindWayPoint(gameObject.transform.position.xgameObject.transform.position.z);
        }
    }
}