using UnityEngine;
|
|
using System.Collections;
|
|
|
|
public class car_Control : MonoBehaviour {
|
|
|
|
public GameObject forcePoint;
|
|
public Suspension[] supensions;
|
|
//public Suspension supFR;
|
|
//public Suspension supFL;
|
|
//public Suspension supBR;
|
|
//public Suspension supBL;
|
|
public float speed;
|
|
public float torque;
|
|
public float grip;
|
|
public float driftGrip;
|
|
|
|
private float curGrip;
|
|
|
|
public Vector3 centreOfMass;
|
|
|
|
|
|
public Rigidbody carRigid;
|
|
|
|
// Use this for initialization
|
|
void Start () {
|
|
carRigid = GetComponent<Rigidbody>();
|
|
carRigid.centerOfMass = centreOfMass;
|
|
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void FixedUpdate () {
|
|
carRigid.centerOfMass = centreOfMass;
|
|
float inputX = Input.GetAxis ("Player1 Movement Y");
|
|
float inputY = Input.GetAxis("Player1 Movement X");
|
|
|
|
applyAcceleration (inputX);
|
|
applyTorque (inputY);
|
|
driftCheck ();
|
|
applyGrip ();
|
|
|
|
|
|
}
|
|
|
|
void applyAcceleration(float input){
|
|
Vector3 force = transform.forward * input * speed;
|
|
//Vector3 rayNormal = (supensions[0].supHit.normal + supensions[1].supHit.normal + supensions[2].supHit.normal + supensions[3].supHit.normal) / 4;
|
|
Vector3 rayNormal = suspensionNormal ();
|
|
|
|
rayNormal = Quaternion.AngleAxis(90, transform.right) * rayNormal;
|
|
Vector3 projectedForce = Vector3.Project (force, rayNormal);
|
|
//carRigid.AddForceAtPosition (projectedForce,forcePoint.transform.position);
|
|
carRigid.AddForce(projectedForce);
|
|
}
|
|
|
|
void applyTorque (float input){
|
|
carRigid.AddTorque(transform.up * torque * input);
|
|
}
|
|
|
|
void driftCheck(){
|
|
if (Input.GetButton ("Player1 Jump")) {
|
|
curGrip = driftGrip;
|
|
} else {
|
|
curGrip = grip;
|
|
}
|
|
}
|
|
|
|
void applyGrip(){
|
|
|
|
float localVelX = transform.InverseTransformDirection(carRigid.velocity).x;
|
|
bool grounded = false;
|
|
|
|
for (int i = 0; i<supensions.Length; i++) {
|
|
if (supensions[i].supcompressionRatio >0)
|
|
grounded = true;
|
|
}
|
|
|
|
Debug.Log ("Grounded: " + grounded);
|
|
if (grounded) {
|
|
for (int i = 0; i<supensions.Length; i++) {
|
|
carRigid.AddForceAtPosition (transform.right * -localVelX * curGrip, supensions [i].transform.position);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
Vector3 suspensionNormal(){
|
|
|
|
Vector3 normal = supensions[0].supHit.normal;
|
|
for (int i = 1;i< supensions.Length; i++){
|
|
normal += supensions[i].supHit.normal;
|
|
}
|
|
normal /= supensions.Length;
|
|
|
|
return normal;
|
|
}
|
|
|
|
|
|
|
|
}
|