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);
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(
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
);
47 m_tilemap
.SetTile(tilePos
, null);
52 // Restore the yarn's original velocity pre-collision
53 rigidbody
.velocity
= m_yarnPhysics
.CurrentYarnVelocity
;