boredom. / Assets / Scripts / Interactables / Puddle.cs
Puddle.cs
Raw

using DG.Tweening;
using System.Collections;
using UnityEngine;

public class Puddle : Interactable {

    [Header("References")]
    private SpriteRenderer spriteRenderer;

    [Header("Color")]
    [SerializeField][Range(0, 1)] private float alphaRemoval;
    [SerializeField] private float fadeDuration;
    private float targetAlpha;
    private Tweener fadeTweener;

    [Header("Interacting")]
    [SerializeField] private float interactDelay;

    private void Start() {

        spriteRenderer = GetComponent<SpriteRenderer>();

        targetAlpha = spriteRenderer.color.a;

    }

    public override void Interact() {

        if (targetAlpha <= 0f) // target alpha is already 0, don't reduce it anymore, let current tween finish
            return;

        targetAlpha -= alphaRemoval;

        if (fadeTweener != null)
            fadeTweener.Kill();

        fadeTweener = spriteRenderer.DOFade(targetAlpha - alphaRemoval, fadeDuration).OnComplete(() => {

            if (targetAlpha <= 0f) {

                taskManager.CompleteCurrentTask();
                Destroy(gameObject);
                return;

            }
        });

        StartCoroutine(InteractCooldown());

    }

    private IEnumerator InteractCooldown() {

        isInteractable = false;
        yield return new WaitForSeconds(interactDelay);
        isInteractable = true;

    }
}