123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using System.Collections;
- using System.Security;
- using UnityEngine;
- using UnityEngine.Events;
- namespace HQFPSWeapons
- {
- public class Explosive : Projectile
- {
- [SerializeField]
- public bool m_DetonateOnImpact = false;
- [ShowIf("m_DetonateOnImpact", true)]
- [SerializeField]
- [Range(0f, 15f)]
- private float m_DetonationDelay = 1.5f;
- [SerializeField]
- private GameObject m_ObjectToDisable = null;
- [SerializeField]
- private Explosion m_Explosion = null;
- [SerializeField]
- private LingeringFire m_LingeringFire = null;
- [Space]
- [SerializeField]
- private UnityEvent m_OnExplosiveLaunched = null;
- private LivingEntity m_Detonator;
- private bool m_IsDetonating;
- public override void Launch(LivingEntity launcher)
- {
- if(m_IsDetonating)
- return;
- m_IsDetonating = true;
- m_OnExplosiveLaunched.Invoke();
- if(!m_DetonateOnImpact)
- StartCoroutine(C_DetonateWithDelay(launcher));
- else
- m_Detonator = launcher;
- }
- private void OnCollisionEnter(Collision collision)
- {
- if (m_DetonateOnImpact && m_IsDetonating)
- StartCoroutine(C_DetonateWithDelay(m_Detonator));
- }
- private IEnumerator C_DetonateWithDelay(LivingEntity launcher)
- {
- m_DetonateOnImpact = false;
- if (m_ObjectToDisable != null)
- m_ObjectToDisable.SetActive(false);
- yield return new WaitForSeconds(m_DetonationDelay);
- if (m_Explosion != null)
- {
- m_Explosion.transform.SetParent(null, true);
- m_Explosion.gameObject.SetActive(true);
- m_Explosion.Explode(launcher);
- }
- if (m_LingeringFire != null)
- {
- m_LingeringFire.transform.SetParent(null, true);
- m_LingeringFire.transform.rotation = Quaternion.identity;
- m_LingeringFire.gameObject.SetActive(true);
- m_LingeringFire.StartFire();
- }
- Destroy(gameObject);
- }
- }
- }
|