using Cinemachine; using System.Collections; using System.Collections.Generic; using UnityEngine; public class BombController : MonoBehaviour, IPooledObject{ [SerializeField, Range(0, 5f)] float timeToExplode = 1.5f; float currentTime; [SerializeField, Range(1, 10)] int maxDistance = 5; [Space] [SerializeField, Range(0, .3f)] float timeBetweenExplosions = .05f; bool exploded; [SerializeField] LayerMask whatIsWall = -1; bool canRightSpawn, canLeftSpawn, canForwardSpawn, canBackSpawn; public void OnObjectSpawn(){ currentTime = 0; exploded = false; canRightSpawn = canLeftSpawn = canForwardSpawn = canBackSpawn = true; } // Update is called once per frame void Update(){ currentTime += Time.deltaTime; if(currentTime >= timeToExplode && !exploded){ StartCoroutine(Explode()); ScreenShakeCall.instance.ShakeCamera(10f, .4f); exploded = true; } } IEnumerator Explode(){ for (int i = 0; i < maxDistance; i++){ yield return new WaitForSeconds(timeBetweenExplosions); if (i == 0){ ObjectPooler.instance.SpawnFromPool("Explosion", transform.position, Quaternion.identity); }else{ if(!Physics.CheckSphere(transform.position + Vector3.right * i, .3f, whatIsWall) && canRightSpawn){ ObjectPooler.instance.SpawnFromPool("Explosion", transform.position + Vector3.right * i, Quaternion.identity); }else{ canRightSpawn = false; } if (!Physics.CheckSphere(transform.position + Vector3.left * i, .3f, whatIsWall) && canLeftSpawn){ ObjectPooler.instance.SpawnFromPool("Explosion", transform.position + Vector3.left * i, Quaternion.identity); }else{ canLeftSpawn = false; } if (!Physics.CheckSphere(transform.position + Vector3.forward * i, .3f, whatIsWall) && canForwardSpawn){ ObjectPooler.instance.SpawnFromPool("Explosion", transform.position + Vector3.forward * i, Quaternion.identity); }else{ canForwardSpawn = false; } if (!Physics.CheckSphere(transform.position + Vector3.back * i, .3f, whatIsWall) && canBackSpawn){ ObjectPooler.instance.SpawnFromPool("Explosion", transform.position + Vector3.back * i, Quaternion.identity); }else{ canBackSpawn = false; } } AudioManager.instance.PlayWithRandomPitch("Explode"); } gameObject.SetActive(false); } void OnDrawGizmos(){ Gizmos.color = Color.red; Gizmos.DrawLine(transform.position, transform.position + Vector3.right * maxDistance); Gizmos.DrawLine(transform.position, transform.position + Vector3.left * maxDistance); Gizmos.DrawLine(transform.position, transform.position + Vector3.forward * maxDistance); Gizmos.DrawLine(transform.position, transform.position + Vector3.back * maxDistance); } }