private var Gun : Transform;
private var AimPos : Transform;

@Range(10,100) var AimFov : float= 40.0;
//private var velocityPos : Vector3 = Vector3.zero;
private var velocityFov : float = 0;
@Range(1,50)var SmoothTime : float = 20;

@Range(1,20)var AimedWalkSpeed : float = 2;
var AimedSensitivity : Vector2 = Vector2(2, 2);
private var AimedOrigWalkSpeed : float = 6;
private var AimedOrigSensitivity : Vector2 = Vector2(15, 10);

var AimBobblingAmount : Vector2 = Vector2(0.1, 0.05);
@Range(1,20) var AimBobblingSpeed : float = 8;
@Range(0.001,1) var AimRecoilAmount : float = 0.1;
@Range(0.001,1) var AimRecoilRandomDispl : float = 0.1;

private var AimOriginalPos : Vector3;
private var AimOriginalRot : Quaternion;
private var AimOriginalFov : float;

private var AimTempPos : Vector3 = Vector3.zero;
private var AimTempRot: Quaternion = Quaternion.identity;
private var AimTempFov : float = 0.0;

//var IsAiming : boolean = false;
private var MiFPC : GameObject;
private var BobberGun : HeadbobberGun;
private var GunStatusScript : GunStatus;

/*@Compact
var V3Test : Vector3 = Vector3(2, 2, 2);*/

// Inicializo las variables que necesito para realizar todas las operaciones-
function Start() {
	MiFPC = GameObject.Find("First Person Controller");
	BobberGun = this.gameObject.GetComponentInChildren(HeadbobberGun);
	GunStatusScript = this.gameObject.GetComponent(GunStatus);
	AimedOrigSensitivity.x = MiFPC.GetComponent(MouseLook).sensitivityX;
	AimedOrigSensitivity.y = Camera.main.GetComponent(MouseLook).sensitivityY;
	AimedOrigWalkSpeed = MiFPC.GetComponent(CharacterMotor).movement.maxForwardSpeed;
	
	Gun = GunStatusScript.GunNormal;
	AimPos = GunStatusScript.GunAiming;
	
	// Guardo los valores originales de todas las opciones de las armas, para poder cambiar el arma
	// entre unas posiciones (arma normal) y otras (arma apuntando).
	AimOriginalPos = GunStatusScript.GunNormal.localPosition;
	AimOriginalRot = GunStatusScript.GunNormal.localRotation;
	AimOriginalFov = Camera.main.fieldOfView;
	
	AimTempPos = AimOriginalPos;
	AimTempRot = AimOriginalRot;
	AimTempFov = AimOriginalFov;
}

/*function ReasignOriginalValues(NewGunPos : Vector3){
	AimOriginalPos = NewGunPos;
}

function ReasignOriginalRotValues(NewGunRot : Quaternion){
	AimOriginalRot = NewGunRot;
}*/


function Update () {
	// Realiza el movimiento del arma hasta que el FOV de la cámara ya es casi el FOV final.
	// En caso de que ya hayamos llegado a ese punto, asigno directamente al arma, su posicion final
	// sin hacer ninguna interpolacion.
	if(Mathf.Abs(Camera.main.fieldOfView - AimTempFov) > 0.5){
		//Gun.localPosition = Vector3.SmoothDamp(Gun.localPosition, AimTempPos, velocityPos, SmoothTime);
		Gun.localPosition = Vector3.Lerp(Gun.localPosition, AimTempPos, SmoothTime * Time.deltaTime);
		Gun.localRotation = Quaternion.Lerp(Gun.localRotation, AimTempRot, SmoothTime * Time.deltaTime);
		//Debug.Log("Pos Arma : "+Gun.localPosition+" - Pos Temp Aim : "+AimTempPos);
		Camera.main.fieldOfView = Mathf.SmoothDamp(Camera.main.fieldOfView, AimTempFov, velocityFov, SmoothTime * Time.deltaTime);
	}
	else{
		// Si ya casi ha acabado con el movimiento, muevo directamente el arma a su punto de destino y asigno nuevos valores
		// en la funcion de aputar. Esto sólo se hace una vez (mirandosi el script de apuntar está desactivado).
		if(!BobberGun.enabled){
			Gun.localPosition = AimTempPos;
			Camera.main.fieldOfView = AimTempFov;
			if(FPCStatus.IsAiming){
				BobberGun.ReasignOriginalValues(AimPos.localPosition);
				BobberGun.bobbingSpeed = AimBobblingSpeed;
				BobberGun.bobbingAmount = AimBobblingAmount;
				BobberGun.RecoilAmount = AimRecoilAmount;
				BobberGun.RecoilRandomDispl = AimRecoilRandomDispl;
			}
			else{
				BobberGun.ReasignOriginalValues(AimOriginalPos);
				BobberGun.RestoreBobbingValues();
			}
			BobberGun.enabled = true;
		}
	}
	
	// Si pulso la tecla del raton, inicia el proceso de movimiento del arma a la posicion de apuntando.
	// Desactivo el script de Aiming para que no interfiera hasta que acabe de mover el arma a su nueva posicion.
    if (FPCStatus.IsFire2Down) {
		FPCStatus.IsAiming = true;
		BobberGun.enabled = false;
		
        //adjust viewpoint and Gun position
        AimTempPos = AimPos.localPosition;
		AimTempRot = AimPos.localRotation;
        AimTempFov = AimFov;
       
        //slow down turning and movement speed
        MiFPC.GetComponent(CharacterMotor).movement.maxForwardSpeed = AimedWalkSpeed;
        MiFPC.GetComponent(MouseLook).sensitivityX = AimedSensitivity.x;
        Camera.main.GetComponent(MouseLook).sensitivityY = AimedSensitivity.y;
    } 
	else 
	// Al soltar el boton, vuelve a la posicion normal.
	if(FPCStatus.IsFire2Up) {
		FPCStatus.IsAiming = false;
		BobberGun.enabled = false;
		
        //adjust viewpoint and Gun position
        AimTempPos = AimOriginalPos;
		AimTempRot = AimOriginalRot;
        AimTempFov = AimOriginalFov;
       
        //speed up turning and movement speed
		MiFPC.GetComponent(CharacterMotor).movement.maxForwardSpeed = AimedOrigWalkSpeed;
        MiFPC.GetComponent(MouseLook).sensitivityX = AimedOrigSensitivity.x;
        Camera.main.GetComponent(MouseLook).sensitivityY = AimedOrigSensitivity.y;
    }
}
 