UnityGameProjectsCode / InTheDarkGame / Level / RubbleFallTrigger.cs
RubbleFallTrigger.cs
Raw
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;
    }
}