init
This commit is contained in:
commit
3b4c6e0ec6
506 changed files with 434142 additions and 0 deletions
77
Assets/Scripts/BombController.cs
Normal file
77
Assets/Scripts/BombController.cs
Normal 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);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue