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.
Driftology/Assets/Scripts/NOSController.cs

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