Modification start date
[BattleCats.git] / Assets / Scripts / Terrain / BreakableTerrain.cs
blobe6e78e08425529e9bb0e68c2aeb8f314899a0e17
1 using UnityEngine;
2 using UnityEngine.Tilemaps;
4 public class BreakableTerrain : MonoBehaviour
6 public HealthSlider m_yarnPhysics;
7 public float m_tresholdVelocity = 40.0f;
9 private Tilemap m_tilemap;
10 private Vector3Int m_checkOffset = new Vector3Int(-5, -5, 0);
11 private Vector3Int m_checkSize = new Vector3Int(10, 10, 0);
13 private void Awake()
15 m_tilemap = GetComponent<Tilemap>();
16 m_yarnPhysics = GameObject.FindGameObjectWithTag("YarnPhysics").GetComponent<HealthSlider>();
19 private void OnCollisionEnter2D(Collision2D collision)
21 if (collision.gameObject.CompareTag("YarnPhysics"))
23 Rigidbody2D rigidbody = collision.gameObject.GetComponent<Rigidbody2D>();
24 float velocityMagnitude = Vector3.Magnitude(m_yarnPhysics.CurrentYarnVelocity);
26 if (velocityMagnitude >= m_tresholdVelocity)
28 ContactPoint2D[] contact = new ContactPoint2D[1];
29 GetComponent<CompositeCollider2D>().GetContacts(contact);
31 Vector3Int tilePosition = m_tilemap.WorldToCell(new Vector3(
32 contact[0].point.x,
33 contact[0].point.y,
34 0.0f));
36 // Pick the tile which collided with the yarn as the center of a 10x10 bounding box
37 BoundsInt checkBounds = new BoundsInt(tilePosition + m_checkOffset, m_checkSize);
39 for (int x = checkBounds.xMin; x != checkBounds.xMax; ++x)
41 for (int y = checkBounds.yMin; y != checkBounds.yMax; ++y)
43 Vector3Int tilePos = new Vector3Int(x, y, 0);
44 TileBase tile = m_tilemap.GetTile(tilePos);
45 if (tile != null)
47 m_tilemap.SetTile(tilePos, null);
52 // Restore the yarn's original velocity pre-collision
53 rigidbody.velocity = m_yarnPhysics.CurrentYarnVelocity;