var rearWheel1 : WheelCollider;
var rearWheel2 : WheelCollider;
var frontWheel1 : WheelCollider;
var frontWheel2 : WheelCollider;
 
var wheelFL : Transform;
var wheelFR : Transform;
//var wheelML : Transform;
//var wheelMR : Transform;
var wheelRL : Transform;
var wheelRR : Transform;

var up : GUITexture;
var down : GUITexture;
var left : GUITexture;
var right : GUITexture;
var fire : GUITexture;

var steer_max = 20;
var motor_max = 40;
var brake_max = 100;
var steerSpeed = 20;
 
private var steer = 0;
private var forward = 0;
private var back = 0;
private var brakeRelease = false;
private var motor = 0;
private var brake = 0;
private var reverse = false;
private var speed = 0;

private var axisH: float = 0;
private var axisV: float = 0;

function Start() {
rigidbody.centerOfMass += Vector3(0, -1, .25);
 //rigidbody.centerOfMass = Vector3(0, -0.05, 0);
}

function OnEnable(){
		Gesture.onMouse1E += Pressed;
		Gesture.onTouchE += Pressed;
}

function OnDisable(){
		Gesture.onMouse1E -= Pressed;
		Gesture.onTouchE -= Pressed;
}

function InputGetAxis(axis: String): float {
	var v = Input.GetAxis(axis);
	if (Mathf.Abs(v) > 0.005) return v;
	if (axis=="Horizontal") return axisH;
	if (axis=="Vertical") return axisV;
}

function Control(ctrl) {
	
	if(ctrl == ("up") || ctrl == ("upleft") || ctrl == ("upright")) axisV =  1;
	
	if(ctrl == ("down") || ctrl == ("downleft") || ctrl == ("downright")) axisV = -1;

	if(ctrl == ("left") || ctrl == ("downleft") || ctrl == ("upleft")) axisH = -1;
	
	if(ctrl == ("right") || ctrl == ("upright") || ctrl == ("upright")) axisH = 1;
	
}

function Update () {
 
speed = rigidbody.velocity.sqrMagnitude;

steer = axisH;
forward = Mathf.Clamp(axisV, 0, 1);
back = -1 * Mathf.Clamp(axisV, -1, 0);

if(speed == 0 && forward == 0 && back == 0) {
brakeRelease = true;
}

if(speed == 0 && brakeRelease) {
if(back > 0) { reverse = true; }
if(forward > 0) { reverse = false; }
}

if(reverse) {
motor = -1 * back;
brake = forward;
} else {
motor = forward;
brake = back;
}

if (brake > 0 ) { brakeRelease = false; };
 
rearWheel1.motorTorque = motor_max * motor;
rearWheel2.motorTorque = motor_max * motor;
rearWheel1.brakeTorque = brake_max * brake;
rearWheel2.brakeTorque = brake_max * brake;

//if (motor == 0 && brake == 0 && speed != 0) {
//	rearWheel1.brakeTorque = 15;
//	rearWheel2.brakeTorque = 15;
//}

if ( steer == 0 && frontWheel1.steerAngle != 0) {
if (Mathf.Abs(frontWheel1.steerAngle) <= (steerSpeed * Time.deltaTime)) {
frontWheel1.steerAngle = 0;
} else if (frontWheel1.steerAngle > 0) {
frontWheel1.steerAngle = frontWheel1.steerAngle - (steerSpeed * Time.deltaTime);
} else {
frontWheel1.steerAngle = frontWheel1.steerAngle + (steerSpeed * Time.deltaTime);
}
} else {
frontWheel1.steerAngle = frontWheel1.steerAngle + (steer * steerSpeed * Time.deltaTime);
if (frontWheel1.steerAngle > steer_max) { frontWheel1.steerAngle = steer_max; }
if (frontWheel1.steerAngle < -1 * steer_max) { frontWheel1.steerAngle = -1 * steer_max; }
}
frontWheel2.steerAngle = frontWheel1.steerAngle;
wheelFL.localEulerAngles.y = frontWheel1.steerAngle;
wheelFR.localEulerAngles.y = frontWheel2.steerAngle;

wheelFR.Rotate(0, 0, frontWheel1.rpm * -6 * Time.deltaTime);
wheelFL.Rotate(0, 0, frontWheel2.rpm * -6 * Time.deltaTime);
//wheelMR.Rotate(0, 0, rearWheel1.rpm * -6 * Time.deltaTime);
//wheelML.Rotate(0, 0, rearWheel2.rpm * -6 * Time.deltaTime);
wheelRR.Rotate(0, 0, rearWheel1.rpm * -6 * Time.deltaTime);
wheelRL.Rotate(0, 0, rearWheel2.rpm * -6 * Time.deltaTime);


if (axisV > 0) axisV -= 0.1;
if (axisV < 0) axisV += 0.1;
if (axisH > 0) axisH -= 0.1;
if (axisH < 0) axisH += 0.1;


}

function Pressed(pos: Vector2) {
	axisV = axisH = 0;
	//if any of the button is pressed, set the corresponding  move direction
	if(up.HitTest(pos) && left.HitTest(pos)){
		//axisV = axisH = 1;
		Control("upleft");
	}
	else
	if(down.HitTest(pos) && right.HitTest(pos)){
		//axisV = axisH = -1;
		Control("downright");
	}
	else
	if(up.HitTest(pos) && right.HitTest(pos)){
		//axisV = 1; axisH = -1;
		Control("upright");
	}
	else
	if(down.HitTest(pos) && left.HitTest(pos)){
		//axisV = -1; axisH = 1;
		Control("downleft");
	}
	else
	if(up.HitTest(pos)){
		Control("up");
		//axisV = 1;
		//moveDir+=new Vector3(0, 0, 1);
	}
	else
	if(down.HitTest(pos)){
		Control("down");
		//axisV = -1;
		//moveDir+=new Vector3(0, 0, -1);
	}
	else
	if(left.HitTest(pos)){
		//Input.GetAxis("Horizontal") = Input.GetAxis("Horizontal") -0.1;
		Control("left");
		//axisH = -1;
		//moveDir+=new Vector3(-1, 0, 0);
	}
	else
	if(right.HitTest(pos)){
		//Input.GetAxis("Horizontal") = Input.GetAxis("Horizontal") +0.1;
		Control("right");
		//axisH = 1;
		//moveDir+=new Vector3(1, 0, 0);
	}
		//if(fire.HitTest(pos)){ }
		

}
/*
function OnGUI(){

    axisV = axisH = 0;
    if (left.HitTest) axisH = 1;
    if (right.HitTest) axisH = -1;
    if (up.HitTest) axisV = 1;
    if (down.HitTest) axisV = 1;
    
     //if (GUI.RepeatButton(Rect(50, 10, 40, 40), "W")) axisV = 1; 
    //if (GUI.RepeatButton(Rect(50, 90, 40, 40), "S")) axisV = -1; 
    //if (GUI.RepeatButton(Rect(10, 50, 40, 40), "A")) axisH = -1;
    //if (GUI.RepeatButton(Rect(90, 50, 40, 40), "D")) axisH = 1;
}*/