123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- using UnityEngine;
- namespace HQFPSWeapons
- {
- /// <summary>
- ///
- /// </summary>
- public class PlayerVitals : EntityVitals
- {
- public Player Player
- {
- get
- {
- if(!m_Player)
- m_Player = GetComponent<Player>();
- if(!m_Player)
- m_Player = GetComponentInParent<Player>();
-
- return m_Player;
- }
- }
- [BHeader("Stamina")]
- [SerializeField]
- [Clamp(0f, 300f)]
- private float m_StaminaDepletionRate = 30f;
- [SerializeField]
- private StatRegenData m_StaminaRegeneration = null;
- [SerializeField]
- private SoundPlayer m_BreathingHeavyAudio = null;
- [SerializeField]
- private float m_BreathingHeavyDuration = 11f;
- [SerializeField]
- [Clamp(0f, 100f)]
- private float m_JumpStaminaTake = 15f;
- [BHeader("Player Audio")]
- [SerializeField]
- private SoundPlayer m_JumpAudio = null;
- [SerializeField]
- private SoundPlayer m_CrouchAudio = null;
- [SerializeField]
- private SoundPlayer m_StandUpAudio = null;
- [SerializeField]
- private SoundPlayer m_EarRingingAudio = null;
- [SerializeField]
- [Range(0f, 1f)]
- private float m_EarRingingAudioVolumeDecrease = 0.5f;
- [SerializeField]
- private float m_EarRingVolumeGainSpeed = 0.15f;
- private Player m_Player;
- private float m_LastHeavyBreathTime;
- protected override void Update()
- {
- base.Update();
- // Stamina.
- if(Player.Run.Active)
- {
- m_StaminaRegeneration.Pause();
- ModifyStamina(-m_StaminaDepletionRate * Time.deltaTime);
- }
- else if(m_StaminaRegeneration.CanRegenerate && Player.Stamina.Get() < 100f)
- ModifyStamina(m_StaminaRegeneration.RegenDelta);
- if(!m_StaminaRegeneration.CanRegenerate && Player.Stamina.Is(0f) && Time.time - m_LastHeavyBreathTime > m_BreathingHeavyDuration)
- {
- m_LastHeavyBreathTime = Time.time;
- m_BreathingHeavyAudio.Play2D();
- }
- //Using equipment stops stamina regen for a moment
- if (Player.UseOnce.LastExecutionTime + 0.1f > Time.time && Player.ActiveEquipmentItem.Val.StaminaTakePerUse > 0)
- m_StaminaRegeneration.Pause();
- AudioListener.volume = Mathf.MoveTowards(AudioListener.volume, 1f, m_EarRingVolumeGainSpeed * Time.deltaTime);
- }
- protected override bool Try_ChangeHealth(HealthEventData healthEventData)
- {
- return base.Try_ChangeHealth(healthEventData);
- }
- protected override void Start()
- {
- Player.Run.AddStartTryer(()=> { m_StaminaRegeneration.Pause(); return Player.Stamina.Get() > 0f; });
- Player.Jump.AddStartListener(OnJump);
- Player.Crouch.AddStartListener(OnCrouchStart);
- Player.Crouch.AddStopListener(OnCrouchEnd);
- ShakeManager.ShakeEvent.AddListener(OnShakeEvent);
- }
- private void OnDestroy()
- {
- ShakeManager.ShakeEvent.RemoveListener(OnShakeEvent);
- }
- private void OnShakeEvent(ShakeEventData shake)
- {
- if(shake.ShakeType == ShakeType.Explosion)
- {
- float distToExplosionSqr = (transform.position - shake.Position).sqrMagnitude;
- float explosionRadiusSqr = shake.Radius * shake.Radius;
- float distanceFactor = 1f - Mathf.Clamp01(distToExplosionSqr / explosionRadiusSqr);
- AudioListener.volume = 1f - m_EarRingingAudioVolumeDecrease * distanceFactor;
- m_EarRingingAudio.Play(ItemSelection.Method.RandomExcludeLast, m_AudioSource, distanceFactor);
- }
- }
- private void ModifyStamina(float delta)
- {
- float stamina = Player.Stamina.Get() + delta;
- stamina = Mathf.Clamp(stamina, 0f, 100f);
- Player.Stamina.Set(stamina);
- }
- private void OnJump()
- {
- ModifyStamina(-m_JumpStaminaTake);
- m_JumpAudio.Play(ItemSelection.Method.RandomExcludeLast, m_AudioSource);
- m_StaminaRegeneration.Pause();
- }
- private void OnCrouchStart()
- {
- m_CrouchAudio.Play(ItemSelection.Method.RandomExcludeLast, m_AudioSource);
- }
- private void OnCrouchEnd()
- {
- m_StandUpAudio.Play(ItemSelection.Method.RandomExcludeLast, m_AudioSource);
- }
- }
- }
|