//carslawiaredux ai android test
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 steer_max = 20;
var motor_max = 40;
var brake_max = 100;
var steerSpeed = 20;
//private var steer = 0;
private var forward = 0.2;
private var back = 0;
private var brakeRelease = false;
private var motor = 0.2;
private var brake = 0;
private var reverse = false;
private var speed = 0;
var CollRevSec : float = 1;
var CollFwdSec : float = 1.1;
var CollRev1Steer : float = 0.28;
var CollRev2Steer : float = -0.21;
var CollFwdSteer : float = 0.15;
var ObsSteer : float = 0.28;
var colltime : float = 2;
var avoidcolltime : float = 2;
var steerouttime : float = 2;
var throttle : float = 1;
var waypoints : Transform[ ];
var waypointRadius : float = 3;
var damping : float = 0.1;
var loop : boolean = false;
//var speed : float = 2.0;
var faceHeading : boolean = true;
private var targetHeading : Vector3;
private var currentHeading : Vector3;
private var targetwaypoint : int;
//var xform : Transform;
private var useRigidbody : boolean;
private var rigidmember : Rigidbody;
private var steerMaxAngle = 70.0;
// var collisionObject : GameObject;
var avoidcollision : boolean = false;
var hitinfo : RaycastHit;
var steerout : boolean = false;
var angleDisplay : GUIText;
//var obstacDisplay : GUIText;
//var obsvehDisplay : GUIText;
//var collDisplay : GUIText;
//var kphDisplay : GUIText;
var steerxDisplay : GUIText;
var steeraDisplay : GUIText;
//var distxDisplay : GUIText;
//var throttleDisplay : GUIText;
//var dragDisplay : GUIText;
function Start() {
rigidbody.centerOfMass = Vector3(0, -0.05, 0);
brakeRelease = true;
starttime = Time.time;
}
function Update () {
//seek code
var localTarget = transform.InverseTransformPoint(waypoints[targetwaypoint].position);
var targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg;
var tarX = Mathf.Round(targetAngle);
var tarxabs = Mathf.Abs(tarX);
angleDisplay.text = "angle: " + tarX;
var steerx=targetAngle/180;
if(throttle == 1 !avoidcollision){
// steer = Mathf.Clamp(steerx, -steerMaxAngle/180, steerMaxAngle/180);
steer = steerx2;
steer = Mathf.Clamp(steer, -steerMaxAngle/180, steerMaxAngle/180);
}
var steera = steer180;
steerxDisplay.text = "steer: " + steer;
steeraDisplay.text = "angle: " + steera;
var targetDist = (waypoints[targetwaypoint].position - transform.position).magnitude;
var distx = Mathf.Round(targetDist);
//distxDisplay.text = "distance: " + distx;
//throttleDisplay.text = "throttle: " + throttle;
//dragDisplay.text = "drag: " + rigidbody.drag;
//bodyrend.renderer.material = mainMaterial;
//after reverse if towards target point
// if(avoidcollision){
// steer = -0.3;
// if((Time.time - avoidcolltime)%60f > CollFwdSec){
// avoidcollision = false;
// }
// }
//steering control
//rigidbody.drag = 0.15;
rigidbody.drag = 0.2;
//slow down if close
if(distx < 10) {
rigidbody.drag += 0.5;
}
//slow down (based on angle) if angle big
if(tarxabs > 20) {
rigidbody.drag += tarxabs*0.04;
}
if(Vector3.Distance(transform.position,waypoints[targetwaypoint].position)<=waypointRadius)
{
targetwaypoint++;
print(targetwaypoint);
if(targetwaypoint>=waypoints.Length)
{
targetwaypoint = 0;
// if(!loop)
// enabled = false;
}
}
targetHeading = waypoints[targetwaypoint].position - transform.position;
currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
motor = forward;
brake = back;
speed = rigidbody.velocity.sqrMagnitude;
//steer = Input.GetAxis(“Horizontal”); //pc
//steer = -Input.acceleration.y; //mobile
//forward = Mathf.Clamp(Input.GetAxis(“Vertical”), 0, 1);
//back = -1 * Mathf.Clamp(Input.GetAxis(“Vertical”), -1, 0);
//var throttle = Input.acceleration.x;
forward = Mathf.Clamp(throttle, 0, 1);
back = -1 * Mathf.Clamp(throttle, -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(throttle > 0) { reverse = false; }
if(throttle < 0) { reverse = true; }
//}
//if(reverse) {
//motor = -1 * back;
//brake = forward;
//} else {
//motor = forward;
//brake = back;
//}
//reverse
if(reverse){
rigidbody.drag = 0;
motor = -1 * back;
throttle = -1;
brake = forward;
//if(steer>0){
steer = CollRev1Steer;
//}else{
//steer = -CollRev1Steer;
//}
//print(steer);
if((Time.time - colltime)%60f > 2){
throttle = 1;
reverse = false;
avoidcollision = true;
avoidcolltime = Time.time;
}
else {
motor = forward;
brake = back;
}
}
//after reverse
if(avoidcollision){
steer = CollFwdSteer;
if((Time.time - avoidcolltime)%60f > 2){
avoidcollision = false;
reverse = false;
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 ( 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; }
//}
frontWheel1.steerAngle = steer;
frontWheel2.steerAngle = frontWheel1.steerAngle;
wheelFL.localEulerAngles.y = frontWheel1.steerAngle;
wheelFR.localEulerAngles.y = frontWheel2.steerAngle;
wheelFR.Rotate(frontWheel1.rpm * 6 * Time.deltaTime, 0, 0);
wheelFL.Rotate(frontWheel2.rpm * 6 * Time.deltaTime, 0, 0);
//wheelMR.Rotate(0, 0, rearWheel1.rpm * -6 * Time.deltaTime);
//wheelML.Rotate(0, 0, rearWheel2.rpm * -6 * Time.deltaTime);
wheelRR.Rotate(rearWheel1.rpm * 6 * Time.deltaTime, 0, 0);
wheelRL.Rotate(rearWheel2.rpm * 6 * Time.deltaTime, 0, 0);
}
function OnCollisionEnter (collision : Collision)
{
//collision detect
//if(collision.gameObject.tag == “Roadblock”){
//collDisplay.text = "collision: " + collision.gameObject.tag;
//print(collision.gameObject.tag);
//reverse
//back =-throttle;
throttle = -1;
reverse = true;
colltime = Time.time;
steer = CollRev1Steer;
//}
//if(collision.gameObject.tag == “Vehicle”){
//collDisplay.text = "collision: " + collision.gameObject.tag;
print(collision.gameObject.tag);
//reverse
// throttle = -1;
// colltime = Time.time;
//steer = CollRev2Steer;
//}
// print(“collision”);
// throttle = -1;
// colltime = Time.time;
//steer = CollRev1Steer;
}