using System.Collections; using UnityEngine; using UnityEngine.Experimental.Rendering.Universal; public class RubbleFallTrigger : MonoBehaviour { private SpriteRenderer rubbleObject; private SpriteRenderer rubbleShadow; private GameObject soundMarker; private PolygonCollider2D rubbleTrigger; private AudioSource aSource; public ParticleSystem pSys; private bool damagePossible; private bool fadeComplete; private bool playerIn; public float damageAmt; private void Awake() { foreach (SpriteRenderer obj in GetComponentsInChildren<SpriteRenderer>()) { if (obj.name == "Rubble Object") rubbleObject = obj; else if (obj.name == "Rubble Shadow") rubbleShadow = obj; else if (obj.name == "Sound Marker") soundMarker = obj.gameObject; } soundMarker.SetActive(false); rubbleObject.enabled = false; rubbleObject.GetComponent<ShadowCaster2D>().enabled = false; rubbleTrigger = GetComponent<PolygonCollider2D>(); aSource = GetComponent<AudioSource>(); } private void FixedUpdate() { if (playerIn && !fadeComplete) { FadeIn(); } } private void OnTriggerEnter2D(Collider2D collision) { playerIn = true; if (!aSource.isPlaying) { aSource.Play(); pSys.Play(); } } private void OnTriggerStay2D(Collider2D collision) { if (collision.gameObject.CompareTag("Player") && damagePossible) { GameObject player = collision.gameObject; player.GetComponent<Health>().ModifyCurrentHealth(damageAmt); } } public void FadeIn() { if (!rubbleObject.enabled) rubbleObject.enabled = true; if (rubbleShadow.color.a > 0) rubbleShadow.color -= new Color(0, 0, 0, rubbleShadow.color.a - 0.1f) * Time.deltaTime; rubbleObject.color += new Color(0, 0, 0, rubbleObject.color.a + 0.02f) * Time.deltaTime; if (rubbleObject.color.a >= 1) { fadeComplete = true; StartCoroutine(OnFall()); } } IEnumerator OnFall() { //wait for a set period of time to allow for a damage window damagePossible = true; yield return new WaitForSecondsRealtime(2.0f); damagePossible = false; //change collider from trigger to normal rubbleTrigger.isTrigger = false; rubbleObject.GetComponent<ShadowCaster2D>().enabled = true; } }