UnityGameProjectsCode / InTheDarkGame / Level / Drone / DrainPlayerStamina.cs
DrainPlayerStamina.cs
Raw
using UnityEngine;
using UnityEngine.Experimental.Rendering.Universal;

public class DrainPlayerStamina : MonoBehaviour
{
    public float damageStartRange, damageBaseValue;
    private float halfDamageCutoff, halfDamageAmt;
    private float fullDamageCutoff, fullDamageAmt;
    private bool playerInSight = false;
    GameObject playerObject;
    PlayerMove playerMove;
    private DroneAIMod parentDrone;
    BarrierTool barrierT;

    public Light2D lightSource;

    private void Awake()
    {
        parentDrone = GetComponentInParent<DroneAIMod>();
    }

    private void Start()
    {
        playerObject = GameObject.Find("Player Object");
        playerMove = playerObject.GetComponent<PlayerMove>();
        barrierT = playerObject.GetComponent<BarrierTool>();

        float rangeChange = damageStartRange / 3;
        float damageChange = damageBaseValue / 3;

        halfDamageCutoff = damageStartRange - rangeChange;
        halfDamageAmt = damageBaseValue + damageChange;
        fullDamageCutoff = damageStartRange - (rangeChange * 2);
        fullDamageAmt = damageBaseValue + (damageChange * 2);
    }

    private void Update()
    {
        float distanceToPlayer = Vector2.Distance(transform.position, playerObject.transform.position);

        if (distanceToPlayer < damageStartRange)
        {
            RaycastHit2D hit;
            int layerMask = 1 << 9;
            layerMask = ~layerMask;

            hit = Physics2D.Raycast(transform.position, playerObject.transform.position - transform.position, damageStartRange, layerMask);
            Debug.DrawRay(transform.position, (playerObject.transform.position - transform.position), Color.green);

            if (hit.collider != null)
            {
                if (hit.collider.gameObject.CompareTag("Player") && playerInSight)
                {
                    if (barrierT != null)
                    {
                        if (barrierT.isActiveAndEnabled && barrierT.GetCurrentBarrierCharge() > 0.0f && (barrierT.barrierPrefab.activeSelf || barrierT.barrierPrefabUpgraded.activeSelf))
                        {
                            DamagePlayer(false);
                        }
                        else
                        {
                            DamagePlayer(true);
                        }
                    }
                    else
                        DamagePlayer(true);
                }
            }
        }
    }

    public void DamagePlayer(bool barrierOrHealth)
    {
        float distanceToPlayer = Vector2.Distance(transform.position, playerObject.transform.position);

        if (barrierOrHealth == false)
        {
            if (distanceToPlayer <= fullDamageCutoff)
                barrierT.ModifyBarrierCharge((fullDamageAmt / 2) * lightSource.intensity);
            else if (distanceToPlayer <= halfDamageCutoff)
                barrierT.ModifyBarrierCharge((halfDamageAmt / 2) * lightSource.intensity);
            else if (distanceToPlayer <= damageStartRange)
                barrierT.ModifyBarrierCharge((damageBaseValue / 2) * lightSource.intensity);
        }
        else
        {
            if (distanceToPlayer <= fullDamageCutoff)
            {
                playerMove.ModifyStamina(fullDamageAmt * lightSource.intensity);
                playerMove.SetTimeSinceSprinting(0.0f);
            }
            else if (distanceToPlayer <= halfDamageCutoff)
            {
                playerMove.ModifyStamina(halfDamageAmt * lightSource.intensity);
                playerMove.SetTimeSinceSprinting(0.0f);
            }
            else if (distanceToPlayer <= damageStartRange)
            {
                playerMove.ModifyStamina(damageBaseValue * lightSource.intensity);
                playerMove.SetTimeSinceSprinting(0.0f);
            }
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            parentDrone.SetCanSeePlayer(true);
            playerInSight = true;
        }
    }

    private void OnTriggerExit2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            parentDrone.SetCanSeePlayer(false);
            playerInSight = false;
        }
    }
}