| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | using System.Collections;using UnityEngine;using Random = UnityEngine.Random;namespace HQFPSWeapons{	public class PlayerDeath : PlayerComponent	{		[SerializeField]		private GameObject m_Camera = null;		[BHeader("Audio")]		[SerializeField]		private AudioSource m_AudioSource = null;		[SerializeField]		private SoundPlayer m_DeathAudio = null;		[BHeader("Stuff To Disable On Death")]		[SerializeField]		private GameObject[] m_ObjectsToDisable = null;		[SerializeField]		private Behaviour[] m_BehavioursToDisable = null;		[SerializeField]		private Collider[] m_CollidersToDisable = null;		[BHeader("Player Head Hitbox")]		[SerializeField]		private Collider m_HeadCollider = null;		[SerializeField]		private Rigidbody m_HeadRigidbody = null;		[BHeader("Respawn")]		[SerializeField]		private float m_RespawnDuration = 5f;		[SerializeField]		private bool m_RestartSceneOnRespawn = false;		private Transform m_CameraStartParent;		private Quaternion m_CameraStartRotation;		private Vector3 m_CameraStartPosition;		//Hitbox		private Vector3 m_HeadHitboxStartPosition;		private Quaternion m_HeadHitboxStartRotation;		public void OnLoad()		{			Player.Health.AddChangeListener(OnChanged_Health);		}		private void Awake()		{			Player.Health.AddChangeListener(OnChanged_Health);			//Camera set up			m_CameraStartRotation = m_Camera.transform.localRotation;			m_CameraStartPosition = m_Camera.transform.localPosition;			m_CameraStartParent = m_Camera.transform.parent;			//Hitbox set up			m_HeadHitboxStartPosition = m_HeadCollider.transform.localPosition;			m_HeadHitboxStartRotation = m_HeadCollider.transform.localRotation;		}		private void OnChanged_Health(float health)		{			if(health == 0f)			{				On_Death();				m_Camera.transform.parent = m_HeadCollider.transform;			}			}		private void On_Death()		{			m_DeathAudio.Play(ItemSelection.Method.Random, m_AudioSource);			//Disable			foreach (var obj in m_ObjectsToDisable)			{				if (obj != null)					obj.SetActive(false);				else					Debug.LogWarning("Check out PlayerDeath for missing references, an object reference was found null!", this);			}			foreach (var behaviour in m_BehavioursToDisable)			{				if (behaviour != null)					behaviour.enabled = false;				else					Debug.LogWarning("Check out PlayerDeath for missing references, a behaviour reference was found null!", this);			}			foreach (var collider in m_CollidersToDisable)			{				if(collider != null)					collider.enabled = false;				else					Debug.LogWarning("Check out PlayerDeath for missing references, a collider reference was found null!", this);			}			m_HeadCollider.transform.localPosition = m_HeadHitboxStartPosition;			m_HeadCollider.transform.localRotation = m_HeadHitboxStartRotation;			m_HeadCollider.isTrigger = false;			m_HeadRigidbody.isKinematic = false;			m_HeadRigidbody.AddForce(Player.Velocity.Get() * 0.5f, ForceMode.Force);			m_HeadRigidbody.AddRelativeTorque(new Vector3(Random.value - 0.5f, Random.value - 0.5f, Random.value - 0.5f) * 35, ForceMode.Force);			PostProcessingManager.Instance.DoDeathAnim();			Player.Death.Send();			StartCoroutine(C_Respawn());		}		private IEnumerator C_Respawn()		{			yield return new WaitForSeconds(m_RespawnDuration);			if (m_RestartSceneOnRespawn)				GameManager.Instance.StartGame();			else			{				GameManager.Instance.SetPlayerPosition();				m_Camera.transform.parent = m_CameraStartParent;				m_Camera.transform.localRotation = m_CameraStartRotation;				m_Camera.transform.localPosition = m_CameraStartPosition;				m_HeadCollider.isTrigger = true;				m_HeadRigidbody.isKinematic = true;				PostProcessingManager.Instance.RestoreDefaultProfile();				foreach (var obj in m_ObjectsToDisable)					obj.SetActive(true);				foreach (var behaviour in m_BehavioursToDisable)					behaviour.enabled = true;				foreach (var collider in m_CollidersToDisable)					collider.enabled = true;				Player.MoveInput.Set(Vector2.zero);				Player.Health.Set(100f);				Player.Stamina.Set(100f);				Player.Respawn.Send();			}		}	}}
 |