This commit is contained in:
Gerard Gascón 2025-04-24 17:29:51 +02:00
commit 3b4c6e0ec6
506 changed files with 434142 additions and 0 deletions

View file

@ -0,0 +1,77 @@
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);
}
}