| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- 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<Player>());
- 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 >= 1f)
- {
- if (powerLevel >= maxPower)
- {
- yield break;
- }
- yield return new WaitForSeconds(powerSuckDelay);
- PowerUp(1);
- player.PowerLevel -= 1f;
- UpdatePowerBar();
- }
- }
- }
|