Files

94 lines
2.8 KiB
C#

using UnityEngine;
public class VerticalBar : MonoBehaviour
{
public float firingSpeed = 0.03f;
public GameObject verticalBarrierPrefab;
public bool canFireTop = true;
public bool canFireBottom = true;
private float firingTimer = 0.0f;
private Bounds bounds;
private bool canFire = true;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
bounds = spriteRenderer.bounds;
var walls = GameObject.FindGameObjectsWithTag("Wall");
if (walls.Length > 0)
{
// Cap the firing ability if the bar is already intersecting with a wall.
foreach (var wall in walls)
{
if (wall.GetComponent<Collider2D>().bounds.Intersects(bounds))
{
canFire = false;
break;
}
}
}
}
// Update is called once per frame
void FixedUpdate()
{
if (canFire)
{
firingTimer += Time.fixedDeltaTime;
if (firingTimer >= firingSpeed)
{
if (canFireTop)
{
Vector3 topSide = new Vector3(
bounds.center.x,
bounds.max.y + (bounds.size.y / 2.0f),
bounds.center.z
);
var top = Instantiate(verticalBarrierPrefab, topSide, Quaternion.identity);
var topBarScript = top.GetComponent<VerticalBar>();
topBarScript.firingSpeed = firingSpeed;
topBarScript.canFireBottom = false;
Physics2D.IgnoreCollision(
top.GetComponent<Collider2D>(),
GetComponent<Collider2D>(),
true
);
}
if (canFireBottom)
{
Vector3 bottomSide = new Vector3(
bounds.center.x,
bounds.min.y - (bounds.size.y / 2.0f),
bounds.center.z
);
var bottom = Instantiate(verticalBarrierPrefab, bottomSide, Quaternion.identity);
var bottomBarScript = bottom.GetComponent<VerticalBar>();
bottomBarScript.firingSpeed = firingSpeed;
bottomBarScript.canFireTop = false;
Physics2D.IgnoreCollision(
bottom.GetComponent<Collider2D>(),
GetComponent<Collider2D>(),
true
);
}
canFire = false;
}
}
}
}