Files
uni/year3/semester1/CT3536: Games Programming/project/Assets/PlayerCar.cs
2024-03-09 19:25:59 +00:00

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();
}
}
}
}