private IEnumerator C_SpawnCasing(EquippableGameObject equippable) { yield return(m_CasingSpawnDelay); var casing = equippable.Entity.Game.Pool.Get(m_CasingEjection.CasingPrefab, .5f); casing.transform.position = m_CasingEjection.Parent.position + /*Player.Aim.Active ? Vector3.zero : */ m_CasingEjection.Parent.TransformVector(m_CasingEjection.SpawnOffset);; casing.transform.rotation = Quaternion.Euler(UnityEngine.Random.Range(-30, 30), UnityEngine.Random.Range(-30, 30), UnityEngine.Random.Range(-30, 30)); casing.transform.localScale = new Vector3(m_CasingEjection.CasingScale, m_CasingEjection.CasingScale, m_CasingEjection.CasingScale); if (casing.TryGetComponent(out Rigidbody rb)) { rb.velocity = transform.TransformVector(new Vector3(m_CasingEjection.SpawnVelocity.x * UnityEngine.Random.Range(0.75f, 1.15f), m_CasingEjection.SpawnVelocity.y * UnityEngine.Random.Range(0.9f, 1.1f), m_CasingEjection.SpawnVelocity.z * UnityEngine.Random.Range(0.85f, 1.15f))); rb.maxAngularVelocity = 10000f; rb.angularVelocity = new Vector3(UnityEngine.Random.Range(-m_CasingEjection.Spin, m_CasingEjection.Spin), UnityEngine.Random.Range(-m_CasingEjection.Spin, m_CasingEjection.Spin), UnityEngine.Random.Range(-m_CasingEjection.Spin, m_CasingEjection.Spin)); } }
public void Trigger(EquippableGameObject equippable, RaycastHit hit) { if (m_ParticleEffects.Parent == null || !isActiveAndEnabled) { return; } if (!_muzzleFlash && m_ParticleEffects.MuzzleFlash) { _muzzleFlash = GameObject.Instantiate(m_ParticleEffects.MuzzleFlash).GetComponent <ParticleSystem>(); _muzzleFlash.transform.SetParent(m_ParticleEffects.Parent, true); _muzzleFlash.transform.localPosition = Vector3.zero; _muzzleFlash.transform.localRotation = Quaternion.identity; _muzzleFlash.transform.localScale = Vector3.one; _muzzleFlash.Stop(); } if (m_ParticleEffects.Tracer != null && _tracerTimer <= 0) { _tracerTimer = UnityEngine.Random.Range(.25f, 1.5f); var tracer = equippable.Entity.Game.Pool.Get(m_ParticleEffects.Tracer, 1.5f); tracer.transform.position = m_ParticleEffects.Parent.position + m_ParticleEffects.Parent.TransformVector(m_ParticleEffects.TracerOffset); tracer.transform.rotation = Quaternion.LookRotation(hit.point - m_ParticleEffects.Parent.transform.position); } if (Time.time < m_LastTimeSpawningVfx) { return; } if (_muzzleFlash) { _muzzleFlash.transform.localPosition = Vector3.zero; var randomMuzzleFlashRot = m_ParticleEffects.MuzzleFlashRandomRot; randomMuzzleFlashRot = new Vector3( UnityEngine.Random.Range(-randomMuzzleFlashRot.x, randomMuzzleFlashRot.x), UnityEngine.Random.Range(-randomMuzzleFlashRot.y, randomMuzzleFlashRot.y), UnityEngine.Random.Range(-randomMuzzleFlashRot.z, randomMuzzleFlashRot.z)); _muzzleFlash.transform.localRotation = Quaternion.Euler(randomMuzzleFlashRot); float randomMuzzleFlashScale = UnityEngine.Random.Range(m_ParticleEffects.MuzzleFlashRandomScale.x, m_ParticleEffects.MuzzleFlashRandomScale.y); _muzzleFlash.transform.localScale = Vector3.one * randomMuzzleFlashScale; _muzzleFlash.Play(); } if (m_ParticleEffects.Light != null) { m_ParticleEffects.Light.Play(false); } // Spawn the shell if a prefab is assigned if (m_CasingEjection.CasingPrefab != null && m_CasingEjection.Parent != null) { StartCoroutine(C_SpawnCasing(equippable)); } m_LastTimeSpawningVfx = Time.time + 0.05f; }