You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.3 KiB
C#
81 lines
2.3 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class NOSController : MonoBehaviour
|
|
{
|
|
[SerializeField] private float _currentNOS = 0f;
|
|
[SerializeField] private float _chargeSpeed = 1f;
|
|
[SerializeField] private float _depletionSpeed = 1f;
|
|
[SerializeField] private float _boostAcceleration = 40f;
|
|
[SerializeField] private float _audioVolume = 0.5f;
|
|
[SerializeField] private AudioSource _boostAudio = null;
|
|
|
|
public bool _isBoosting = false;
|
|
private VehicleController _vehicleHandler = null;
|
|
private MotionBlur _cameraMotionBlur;
|
|
public float NOSRatio => _currentNOS / 100f;
|
|
public Image _boostBarFill;
|
|
|
|
private void Awake()
|
|
{
|
|
_vehicleHandler = GetComponent<VehicleController>();
|
|
_cameraMotionBlur = Camera.main.GetComponent<MotionBlur>();
|
|
|
|
if (_boostAudio != null)
|
|
{
|
|
_boostAudio.playOnAwake = false;
|
|
_boostAudio.loop = true;
|
|
_boostAudio.volume = _audioVolume;
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (_vehicleHandler.AIControlled) return;
|
|
|
|
if (!_isBoosting)
|
|
{
|
|
if (Mathf.Abs(_vehicleHandler.LocalVelocity.x) > 10f && _currentNOS < 100f)
|
|
{
|
|
_currentNOS += Time.deltaTime * (_chargeSpeed * _vehicleHandler.LocalVelocity.z / 30f);
|
|
_boostBarFill.fillAmount = _currentNOS / 100f;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (_vehicleHandler.InputsActive)
|
|
{
|
|
_currentNOS -= Time.deltaTime * _depletionSpeed;
|
|
_boostBarFill.fillAmount = _currentNOS / 100f;
|
|
}
|
|
|
|
if (_currentNOS <= 0f)
|
|
_isBoosting = false;
|
|
}
|
|
|
|
ManageBoost();
|
|
}
|
|
|
|
private void ManageBoost()
|
|
{
|
|
if (_isBoosting && _vehicleHandler.InputsActive && _vehicleHandler.Running)
|
|
{
|
|
if (_cameraMotionBlur != null)
|
|
_cameraMotionBlur.enabled = true;
|
|
}
|
|
else
|
|
{
|
|
if (_cameraMotionBlur != null)
|
|
_cameraMotionBlur.enabled = false;
|
|
|
|
_vehicleHandler.ActivateNOS(false);
|
|
}
|
|
}
|
|
|
|
public void ActivateNOS()
|
|
{
|
|
if (_isBoosting || _currentNOS <= 0f) return;
|
|
_isBoosting = true;
|
|
_vehicleHandler.ActivateNOS(_isBoosting, _boostAcceleration);
|
|
}
|
|
} |