using UnityEngine;
using System.Collections;

public class CameraView
{

    //距离摄像机8.5米 用黄色表示
    public float upperDistance = 8.5f;
    //距离摄像机12米 用红色表示
    public float lowerDistance = 12.0f;

    private Transform tx;


    void Start()
    {
    }


    void Update()
    {
      //  FindUpperCorners();
        //FindLowerCorners();
    }

    public static Vector3 PosChange(float a, float b,float dic,Transform cam)
    {
        Vector3[] v3List = GetCorners(dic, cam);
        Vector3 posX = Vector3.zero;
        float juli = Vector3.Distance(v3List[1],v3List[0]);
        Vector3 vector = (v3List[1] - v3List[0]).normalized; //向量单位化
        float rand = juli*a;//随机距离
        posX = vector * rand; //得到新坐标
        posX += v3List[0];


        Vector3[] v3ListY = GetCorners(1f, cam);
        Vector3 posY = Vector3.zero;
        float juliY = Vector3.Distance(v3List[2], v3List[0]);
        Vector3 vectorY = (v3List[0] - v3List[2]).normalized; //向量单位化
        float randY = b * juliY;//随机距离
        posY = vectorY * randY; //得到新坐标
        posY += v3List[2];

        Vector3[] v3ListZ = GetCorners(1.5f, cam);
        Vector3 posZ = Vector3.zero;
        float juliZ = Vector3.Distance(v3List[2], v3List[0]);
        Vector3 vectorZ = (v3List[0] - v3List[2]).normalized; //向量单位化
        float randZ = b * juliZ;//随机距离
        posZ = vectorZ * randZ; //得到新坐标
        posZ += v3List[2];

        return cam.TransformPoint(new Vector3(posX.x, posY.y, posZ.z));
    }

    void FindUpperCorners()
    {
      //  Vector3[] corners = GetCorners(upperDistance);

        // for debugging
     //   Debug.DrawLine(corners[0], corners[1], Color.yellow); // UpperLeft -> UpperRight
     //   Debug.DrawLine(corners[1], corners[3], Color.yellow); // UpperRight -> LowerRight
    //    Debug.DrawLine(corners[3], corners[2], Color.yellow); // LowerRight -> LowerLeft
    //   Debug.DrawLine(corners[2], corners[0], Color.yellow); // LowerLeft -> UpperLeft
    }


    void FindLowerCorners()
    {
       // Vector3[] corners = GetCorners(lowerDistance);

        // for debugging
      //  Debug.DrawLine(corners[0], corners[1], Color.red);
     //   Debug.DrawLine(corners[1], corners[3], Color.red);
     //   Debug.DrawLine(corners[3], corners[2], Color.red);
      //  Debug.DrawLine(corners[2], corners[0], Color.red);
    }


    public static Vector3[] GetCorners(float distance,Transform cam)
    {
        Vector3[] corners = new Vector3[4];

        float halfFOV = (RemoteRtc.Instance.cam.fieldOfView * 0.5f) * Mathf.Deg2Rad;
        float aspect = RemoteRtc.Instance.cam.aspect;

        float height = distance * Mathf.Tan(halfFOV);
        float width = height * aspect;

        // UpperLeft
        corners[0] = RemoteRtc.Instance.cam.transform.position - (RemoteRtc.Instance.cam.transform.right * width);
        corners[0] += RemoteRtc.Instance.cam.transform.up * height;
        corners[0] += RemoteRtc.Instance.cam.transform.forward * distance;
        corners[0] = cam.InverseTransformPoint(corners[0]);
        // UpperRight
        corners[1] = RemoteRtc.Instance.cam.transform.position + (RemoteRtc.Instance.cam.transform.right * width);
        corners[1] += RemoteRtc.Instance.cam.transform.up * height;
        corners[1] += RemoteRtc.Instance.cam.transform.forward * distance;
        corners[1] = cam.InverseTransformPoint(corners[1]);

        // LowerLeft
        corners[2] = RemoteRtc.Instance.cam.transform.position - (RemoteRtc.Instance.cam.transform.right * width);
        corners[2] -= RemoteRtc.Instance.cam.transform.up * height;
        corners[2] += RemoteRtc.Instance.cam.transform.forward * distance;
        corners[2] = cam.InverseTransformPoint(corners[2]);

        // LowerRight
        corners[3] = RemoteRtc.Instance.cam.transform.position + (RemoteRtc.Instance.cam.transform.right * width);
        corners[3] -= RemoteRtc.Instance.cam.transform.up * height;
        corners[3] += RemoteRtc.Instance.cam.transform.forward * distance;
        corners[3] = cam.InverseTransformPoint(corners[3]);

        return corners;
    }
}