Bomb_Fail
unknown
csharp
4 years ago
2.5 kB
7
Indexable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bomb : MonoBehaviour
{
public LayerMask blockLayer;
public GameObject explodeSide;
private Powers powers;
private Animator animator;
private void Start()
{
powers = GameObject.FindObjectOfType<Powers>();
animator = GetComponent<Animator>();
StartCoroutine(fusing());
}
IEnumerator fusing()
{
float delay = powers.fuseTime;
while(delay > 0)
{
delay -= Time.deltaTime;
yield return null;
}
animator.SetTrigger("explode");
Explode();
}
void Explode()
{
//Direction for ray
Vector2 rayDirection = Vector2.right;
//Raycast to all 4 directions
for (int i = 0; i < 4; i++)
{
//Create child gameObject explode
GameObject childExplodeDown = Instantiate(explodeSide, new Vector2(transform.position.x, transform.position.y), explodeSide.transform.localRotation);
childExplodeDown.transform.parent = transform;
childExplodeDown.transform.eulerAngles = Vector3.forward * i * 90;
Quaternion rotDegree = Quaternion.Euler(0, 0, 90 * i);
rayDirection = rotDegree * rayDirection;
//Cast with explodeSize
for(int o = 0; o < powers.explodeSize; o++)
{
RaycastHit2D hit = Physics2D.Raycast(new Vector2(transform.position.x + o, transform.position.y), rayDirection, 0.65f, blockLayer);
if(hit.collider == null)
{
//new Vector2(transform.position.x + 1 + o * 0.5f, transform.position.y);
childExplodeDown.transform.position = new Vector2(transform.position.x, transform.position.y) + rayDirection * (1 + o * 0.5f);
childExplodeDown.transform.localScale = new Vector2(transform.localScale.x + o, transform.localScale.y);
}
else
{
//If child explode is having same position with parent then it gets destroyed.
if (childExplodeDown.transform.position == transform.position)
{
Destroy(childExplodeDown);
}
//return;
}
}
}
}Editor is loading...