81 lines
2.5 KiB
C#
81 lines
2.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
// player car controller
|
|
public class PlayerCar : MonoBehaviour
|
|
{
|
|
private float hInput;
|
|
private float vInput;
|
|
|
|
public float engineStrength = 60000;
|
|
public float maxSteerAngle = 90;
|
|
|
|
public Transform frontLeftWheelTransform;
|
|
public Transform frontRightWheelTransform;
|
|
public Transform rearLeftWheelTransform;
|
|
public Transform rearRightWheelTransform;
|
|
|
|
public WheelCollider frontLeftWheelCollider;
|
|
public WheelCollider frontRightWheelCollider;
|
|
public WheelCollider rearLeftWheelCollider;
|
|
public WheelCollider rearRightWheelCollider;
|
|
|
|
private int lapCount = 0;
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
// only accept input if race has started
|
|
if (GameManager.isRaceOn) {
|
|
hInput = Input.GetAxis("Horizontal");
|
|
vInput = Input.GetAxis("Vertical");
|
|
|
|
// front wheel drive
|
|
frontLeftWheelCollider.motorTorque = vInput * engineStrength;
|
|
frontRightWheelCollider.motorTorque = vInput * engineStrength;
|
|
|
|
// steering
|
|
frontLeftWheelCollider.steerAngle = maxSteerAngle * hInput;
|
|
frontRightWheelCollider.steerAngle = maxSteerAngle * hInput;
|
|
|
|
// rotate wheels to propel car
|
|
Vector3 pos;
|
|
Quaternion rot;
|
|
|
|
frontLeftWheelCollider.GetWorldPose(out pos, out rot);
|
|
frontLeftWheelTransform.rotation = rot;
|
|
frontLeftWheelTransform.position = pos;
|
|
|
|
frontRightWheelCollider.GetWorldPose(out pos, out rot);
|
|
frontRightWheelTransform.rotation = rot;
|
|
frontRightWheelTransform.position = pos;
|
|
|
|
rearLeftWheelCollider.GetWorldPose(out pos, out rot);
|
|
rearLeftWheelTransform.rotation = rot;
|
|
rearLeftWheelTransform.position = pos;
|
|
|
|
rearRightWheelCollider.GetWorldPose(out pos, out rot);
|
|
rearRightWheelTransform.rotation = rot;
|
|
rearRightWheelTransform.position = pos;
|
|
}
|
|
}
|
|
|
|
|
|
private void OnTriggerEnter(Collider other) {
|
|
// if collided with finish line
|
|
if (other.gameObject.CompareTag("FinishLine")) {
|
|
lapCount++;
|
|
|
|
// if finished laps and race not over, declare victory
|
|
if (lapCount > 3 && GameManager.isRaceOn) {
|
|
GameManager.EndRace("Player");
|
|
}
|
|
// else update lap counter display
|
|
else {
|
|
LapDisplay.IncrementCount();
|
|
}
|
|
}
|
|
}
|
|
}
|