using UnityEngine; using System.Collections; public class GlassBall : MonoBehaviour { private Animator animator; public AudioClip spawnSound; public AudioClip bounceSound; public AudioClip hitSound; public AudioClip breakSound; private AudioSource audioSource; private Vector2 speed; private int health = 3; private SpriteRenderer spriteRenderer; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { audioSource = GetComponent(); animator = GetComponent(); spriteRenderer = GetComponent(); speed = new Vector2(Random.Range(-0.05f, 0.05f), Random.Range(-0.05f, 0.05f)); audioSource.PlayOneShot(spawnSound); } // Update is called once per frame void FixedUpdate() { AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); if (stateInfo.IsName("GlassBallMove1") || stateInfo.IsName("GlassBallMove2") || stateInfo.IsName("GlassBallMove3")) { transform.Translate(speed); } } void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Wall") || collision.gameObject.CompareTag("GlassBall")) { ContactPoint2D contact = collision.GetContact(0); speed = Vector2.Reflect(speed, contact.normal); // Glass balls take damage when colliding with other GlassBalls // TODO: Check for collisions with a bar. if (collision.gameObject.CompareTag("GlassBall")) { health--; if (health < 0) { health = 0; } animator.SetInteger("health", health); if (health > 0) { audioSource.PlayOneShot(hitSound); } else { audioSource.PlayOneShot(breakSound); } } } } public void Break() { spriteRenderer.enabled = false; StartCoroutine(BreakCoroutine()); } private IEnumerator BreakCoroutine() { yield return new WaitForSeconds(0.6f); Destroy(gameObject); } }