diff --git a/Game/Assets/Scripts/Car.cs b/Game/Assets/Scripts/Car.cs index 1dde53c..1ea9f56 100644 --- a/Game/Assets/Scripts/Car.cs +++ b/Game/Assets/Scripts/Car.cs @@ -1,42 +1,25 @@ /* - Author : Wai Lam - Date : 10/2/2025 - Description : Car obstacle + * Author: Wai Lam + * Date: 10/2/2025 + * Description: Car obstacle */ -using System.Collections; -using System.Collections.Generic; + using UnityEngine; public class Car : MonoBehaviour { - public Transform playerRig; // Assign your XR Rig here - public Transform startPoint; // Assign the starting point here - - public Transform[] waypoints; // List of waypoints - public float speed = 3.0f; // Speed of movement - public float rotationSpeed = 5.0f; // Smooth turning speed + public Transform playerRig; // Assign your XR Rig here + public Transform startPoint; // Assign the starting point here - private int currentWaypointIndex = 0; // Starting at the first waypoint + public Transform[] waypoints; // List of waypoints + public float speed = 3.0f; // Speed of movement + public float rotationSpeed = 5.0f; // Smooth turning speed public Vector3 rotationOffset = Vector3.zero; - private void OnTriggerEnter(Collider other) - { - // Check if the collider belongs to the player - if (other.CompareTag("Player")) - { - Debug.Log("Teleporting Player..."); - TeleportPlayer(); - } - } - private void TeleportPlayer() - { - Vector3 offset = playerRig.position - Camera.main.transform.position; - playerRig.position = startPoint.position + offset; - playerRig.rotation = startPoint.rotation; - } - + private int _currentWaypointIndex; // Starting at the first waypoint - void Update() + + private void Update() { if (waypoints.Length == 0) return; @@ -44,29 +27,49 @@ public class Car : MonoBehaviour RotateTowardsWaypoint(); } - void MoveTowardsWaypoint() + private void OnTriggerEnter(Collider other) { - Transform target = waypoints[currentWaypointIndex]; + // Check if the collider belongs to the player + if (!other.CompareTag("Player")) return; + + Debug.Log("Teleporting Player..."); + TeleportPlayer(); + } + + private void TeleportPlayer() + { + if (Camera.main == null) + { + Debug.LogError("not teleporting player, no main camera found!"); + return; + } + + var offset = playerRig.position - Camera.main.transform.position; + playerRig.position = startPoint.position + offset; + playerRig.rotation = startPoint.rotation; + } + + private void MoveTowardsWaypoint() + { + var target = waypoints[_currentWaypointIndex]; transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime); // Check if the object has reached the waypoint if (Vector3.Distance(transform.position, target.position) < 0.1f) - { // Move to the next waypoint in a loop - currentWaypointIndex = (currentWaypointIndex + 1) % waypoints.Length; - } + _currentWaypointIndex = (_currentWaypointIndex + 1) % waypoints.Length; } - void RotateTowardsWaypoint() + private void RotateTowardsWaypoint() { - Transform target = waypoints[currentWaypointIndex]; - Vector3 direction = (target.position - transform.position).normalized; + var target = waypoints[_currentWaypointIndex]; + var direction = (target.position - transform.position).normalized; if (direction != Vector3.zero) { // Apply rotation offset - Quaternion lookRotation = Quaternion.LookRotation(direction) * Quaternion.Euler(rotationOffset); + var lookRotation = Quaternion.LookRotation(direction) * Quaternion.Euler(rotationOffset); transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, rotationSpeed * Time.deltaTime); } } -} +} \ No newline at end of file