bubble_shooter_2d/Assets/Scripts/Bubble.cs
2022-12-30 23:30:32 +05:00

85 lines
2.3 KiB
C#

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class Bubble : MonoBehaviour
{
public float raycastRange = 0.15f;
public float raycastOffset = 0.6f;
public bool isFixed;
public bool isConnected;
public BubbleColor bubbleColor;
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Bubble" && collision.gameObject.GetComponent<Bubble>().isFixed)
{
if (!isFixed)
{
HasCollided();
}
}
if (collision.gameObject.tag == "Limit")
{
if (!isFixed)
{
HasCollided();
}
}
}
private void HasCollided()
{
Rigidbody2D rb = GetComponent<Rigidbody2D>();
Destroy(rb);
isFixed = true;
LevelManager.instance.SetAsBubbleAreaChild(transform);
GameManager.instance.ProcessTurn(transform);
}
public List<Transform> GetNeighbors()
{
List<RaycastHit2D> hits = new List<RaycastHit2D>();
List<Transform> neighbors = new List<Transform>();
hits.Add(Physics2D.Raycast(new Vector2(transform.position.x - raycastOffset, transform.position.y), Vector3.left, raycastRange));
hits.Add(Physics2D.Raycast(new Vector2(transform.position.x + raycastOffset, transform.position.y), Vector3.right, raycastRange));
hits.Add(Physics2D.Raycast(new Vector2(transform.position.x - raycastOffset, transform.position.y + raycastOffset), new Vector2(-1f, 1f), raycastRange));
hits.Add(Physics2D.Raycast(new Vector2(transform.position.x - raycastOffset, transform.position.y - raycastOffset), new Vector2(-1f, -1f), raycastRange));
hits.Add(Physics2D.Raycast(new Vector2(transform.position.x + raycastOffset, transform.position.y + raycastOffset), new Vector2(1f, 1f), raycastRange));
hits.Add(Physics2D.Raycast(new Vector2(transform.position.x + raycastOffset, transform.position.y - raycastOffset), new Vector2(1f, -1f), raycastRange));
foreach (RaycastHit2D hit in hits)
{
if (hit.collider != null && hit.transform.tag.Equals("Bubble"))
{
neighbors.Add(hit.transform);
}
}
return neighbors;
}
void OnBecameInvisible()
{
Destroy(gameObject);
}
public enum BubbleColor
{
Blue, Yellow, Red, Purple, Bomb
}
public void OnDrawGizmosSelected()
{
Gizmos.color = Color.white;
foreach (Transform tr in GetNeighbors())
{
Gizmos.DrawLine(transform.position, tr.position);
}
}
}