68 lines
2.1 KiB
C#
68 lines
2.1 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Splines;
|
|
|
|
namespace Unity.Cinemachine.Samples
|
|
{
|
|
[RequireComponent(typeof(CinemachineSplineCart))]
|
|
public class RunnerController : MonoBehaviour
|
|
{
|
|
public float WaitTimeAtStart = 1;
|
|
|
|
CinemachineSplineCart m_Cart;
|
|
static bool s_LeaderWasSlowed;
|
|
bool m_IsTired;
|
|
float m_StartTime;
|
|
|
|
void OnEnable()
|
|
{
|
|
m_Cart = GetComponent<CinemachineSplineCart>();
|
|
ResetRace();
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
m_Cart.AutomaticDolly.Enabled = Time.time > m_StartTime + WaitTimeAtStart;
|
|
|
|
// Slow down leader to improve chances of at least 1 takeover per run
|
|
if (!s_LeaderWasSlowed)
|
|
{
|
|
if (m_Cart.Spline.Spline.ConvertIndexUnit(
|
|
m_Cart.SplinePosition, m_Cart.PositionUnits, PathIndexUnit.Normalized) > 0.5f)
|
|
{
|
|
s_LeaderWasSlowed = true;
|
|
if (m_Cart.AutomaticDolly.Method is RandomizedDollySpeed speedControl)
|
|
{
|
|
// Leader is tired!
|
|
speedControl.MinSpeed /= 2;
|
|
speedControl.MaxSpeed /= 2;
|
|
m_IsTired = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// This is called by the "Restart Race" UX button.
|
|
public void ResetRace()
|
|
{
|
|
// Reset position to start
|
|
m_Cart.SplinePosition = 0;
|
|
m_StartTime = Time.time;
|
|
m_Cart.AutomaticDolly.Enabled = false;
|
|
|
|
// Reset slowdown mechanism
|
|
if (m_Cart.AutomaticDolly.Method is RandomizedDollySpeed speedControl)
|
|
{
|
|
m_Cart.AutomaticDolly.Method.Reset();
|
|
if (m_IsTired)
|
|
{
|
|
// Restore the speed, leader is no longer tired
|
|
speedControl.MinSpeed *= 2;
|
|
speedControl.MaxSpeed *= 2;
|
|
}
|
|
}
|
|
m_IsTired = false;
|
|
s_LeaderWasSlowed = false;
|
|
}
|
|
}
|
|
}
|