Station.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Station : MonoBehaviour
  5. {
  6. public float maxPower;
  7. public Transform gauge;
  8. public float powerSuckDelay = 1;
  9. public float powerLevel;
  10. public LineRenderer lineRenderer;
  11. private IEnumerator drainCoroutine;
  12. private Transform lineTarget;
  13. // Use this for initialization
  14. void Start ()
  15. {
  16. powerLevel = 0;
  17. lineTarget = lineRenderer.transform;
  18. lineRenderer.SetPositions(new Vector3[]{
  19. lineRenderer.transform.position,
  20. lineTarget.position,
  21. });
  22. }
  23. // Update is called once per frame
  24. void Update () {
  25. UpdatePowerBar();
  26. }
  27. void PowerUp(float delta)
  28. {
  29. powerLevel += delta;
  30. if (powerLevel >= maxPower)
  31. Debug.Log("Station at max power!");
  32. UpdatePowerBar();
  33. }
  34. private void UpdatePowerBar()
  35. {
  36. var level = powerLevel / maxPower;
  37. gauge.localScale = new Vector3(1, level, 1);
  38. lineRenderer.SetPosition(1, lineTarget.position);
  39. }
  40. void OnTriggerEnter(Collider other)
  41. {
  42. if (other.CompareTag("Player"))
  43. {
  44. lineTarget = other.transform;
  45. drainCoroutine = DrainPower(other.GetComponent<Player>());
  46. StartCoroutine(drainCoroutine);
  47. }
  48. }
  49. void OnTriggerExit(Collider other)
  50. {
  51. if (other.CompareTag("Player"))
  52. {
  53. lineTarget = lineRenderer.transform;
  54. if (drainCoroutine != null)
  55. StopCoroutine(drainCoroutine);
  56. }
  57. }
  58. private IEnumerator DrainPower(Player player)
  59. {
  60. while (player.PowerLevel >= 2f)
  61. {
  62. if (powerLevel >= maxPower)
  63. {
  64. yield break;
  65. }
  66. yield return new WaitForSeconds(powerSuckDelay);
  67. PowerUp(1);
  68. player.PowerLevel -= 1f;
  69. UpdatePowerBar();
  70. }
  71. }
  72. }