73 lines
2.2 KiB
C#
73 lines
2.2 KiB
C#
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
|
|
public class RaceManager : MonoBehaviour
|
|
{
|
|
public static RaceManager Instance;
|
|
|
|
[Header("Race Settings")]
|
|
[Tooltip("Total number of laps needed to finish the race.")]
|
|
public int totalLaps = 3;
|
|
[Tooltip("Total number of checkpoints in the race.")]
|
|
public int numberOfCheckpoints = 0; // Set this in the Inspector to match your track setup
|
|
|
|
[Header("Finish Line Settings")]
|
|
[Tooltip("Assign the finish line object (with a trigger collider) here.")]
|
|
public Transform finishLine;
|
|
|
|
private List<RacerProgress> racers = new List<RacerProgress>();
|
|
public bool raceFinished = false;
|
|
public string winnerName = "";
|
|
|
|
void Awake()
|
|
{
|
|
// Basic singleton setup.
|
|
if (Instance == null)
|
|
Instance = this;
|
|
else
|
|
Destroy(gameObject);
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
// Optionally, automatically find all racers by tag.
|
|
GameObject[] racerObjects = GameObject.FindGameObjectsWithTag("Racer");
|
|
foreach (GameObject racer in racerObjects)
|
|
{
|
|
RacerProgress progress = racer.GetComponent<RacerProgress>();
|
|
if (progress != null)
|
|
racers.Add(progress);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the highest “progress value” among all racers.
|
|
/// (Calculated as: lap count * numberOfCheckpoints + current checkpoint index.)
|
|
/// </summary>
|
|
public float GetLeaderProgress()
|
|
{
|
|
float leaderProgress = 0f;
|
|
foreach (RacerProgress rp in racers)
|
|
{
|
|
float progressValue = rp.lapCount * numberOfCheckpoints + rp.currentCheckpointIndex;
|
|
if (progressValue > leaderProgress)
|
|
leaderProgress = progressValue;
|
|
}
|
|
return leaderProgress;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Call this when a racer crosses the finish line.
|
|
/// </summary>
|
|
public void CheckFinish(RacerProgress rp)
|
|
{
|
|
if (rp.lapCount >= totalLaps && !raceFinished)
|
|
{
|
|
raceFinished = true;
|
|
winnerName = rp.gameObject.name;
|
|
Debug.Log("Race Finished! Winner: " + winnerName);
|
|
// Here you might trigger UI updates, stop all racers, etc.
|
|
}
|
|
}
|
|
}
|