using System.Collections; using System.Collections.Generic; using UnityEngine; public class Station : MonoBehaviour { public float maxPower; public Transform gauge; public float powerSuckDelay = 1; public float powerLevel; public LineRenderer lineRenderer; private IEnumerator drainCoroutine; private Transform lineTarget; // Use this for initialization void Start () { powerLevel = 0; lineTarget = lineRenderer.transform; lineRenderer.SetPositions(new Vector3[]{ lineRenderer.transform.position, lineTarget.position, }); } // Update is called once per frame void Update () { UpdatePowerBar(); } void PowerUp(float delta) { powerLevel += delta; if (powerLevel >= maxPower) Debug.Log("Station at max power!"); UpdatePowerBar(); } private void UpdatePowerBar() { var level = powerLevel / maxPower; gauge.localScale = new Vector3(1, level, 1); lineRenderer.SetPosition(1, lineTarget.position); } void OnTriggerEnter(Collider other) { if (other.CompareTag("Player")) { lineTarget = other.transform; drainCoroutine = DrainPower(other.GetComponent()); StartCoroutine(drainCoroutine); } } void OnTriggerExit(Collider other) { if (other.CompareTag("Player")) { lineTarget = lineRenderer.transform; if (drainCoroutine != null) StopCoroutine(drainCoroutine); } } private IEnumerator DrainPower(Player player) { while (player.PowerLevel >= 2f) { if (powerLevel >= maxPower) { yield break; } yield return new WaitForSeconds(powerSuckDelay); PowerUp(1); player.PowerLevel -= 1f; UpdatePowerBar(); } } }