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; } } }