using UnityEngine;
using System.Collections;

public class AimCamera : MonoBehaviour {
  public Transform target;
	Vector3 f0Dir= Vector3.zero;
	Vector3 upVal= Vector3.zero;
	float zoomDistance= 5;
	float theta= 0.0F;
	float fai= 0.0F;
	float loc_x= 0.0F;
	float loc_y= 0.0F;
	float panWeight= 0.5F;
	
	void Update() {
		if( Input.GetMouseButton(0) && !Input.GetKey("left alt" ) ) {
			f0Dir=  new Vector3(Input.GetAxis("Mouse X")*5.0F, -Input.GetAxis("Mouse Y")*5.0F, 0);
			if(	Input.GetKey("left alt")) {
				loc_x= -Input.GetAxis("Mouse X")*1;
				loc_y= -Input.GetAxis("Mouse Y")*1;
				f0Dir= Vector3.zero;
			}
		} else if( Input.GetMouseButton(1)&& Input.GetKey("left alt") ) {
			zoomDistance= zoomDistance+(-Input.GetAxis("Mouse X")+Input.GetAxis("Mouse Y"))*0.1F;
		} else if( Input.GetMouseButton(2) ) {
			loc_x= -Input.GetAxis("Mouse X")*panWeight;
			loc_y= -Input.GetAxis("Mouse Y")*panWeight;
		} else {
			f0Dir= Vector3.zero;
			loc_x= 0.0F;
			loc_y= 0.0F;
		}
		theta+= Mathf.Deg2Rad*f0Dir.x*1;
		fai+=   -Mathf.Deg2Rad*f0Dir.y*1;
		
		upVal.z= zoomDistance*Mathf.Cos(theta)*Mathf.Sin(fai+Mathf.PI/2);
		upVal.x= zoomDistance*Mathf.Sin(theta)*Mathf.Sin(fai+Mathf.PI/2);
		upVal.y= zoomDistance*Mathf.Cos(fai+Mathf.PI/2);

		transform.position= upVal;
		target.transform.Translate( Camera.main.transform.up*loc_y+Camera.main.transform.right*(loc_x), Space.World);
		transform.position+= target.position;
		Camera.main.transform.LookAt(target.position);
	}
}