diff options
author | chai <215380520@qq.com> | 2023-10-27 11:05:14 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-10-27 11:05:14 +0800 |
commit | 766cdff5ffa72b65d7f106658d1603f47739b2ba (patch) | |
tree | 34d7799a94dfa9be182825577583c0fa6dc935f7 /GameCode/GridLightBulb.cs |
+ init
Diffstat (limited to 'GameCode/GridLightBulb.cs')
-rw-r--r-- | GameCode/GridLightBulb.cs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/GameCode/GridLightBulb.cs b/GameCode/GridLightBulb.cs new file mode 100644 index 0000000..8fa2523 --- /dev/null +++ b/GameCode/GridLightBulb.cs @@ -0,0 +1,57 @@ +using System.Collections; +using UnityEngine; + +public class GridLightBulb : GridObject +{ + private SpriteRenderer rend; + + public Color maxLightColor; + + private Color baseColor; + + private bool isLitUp; + + private float currentDistance; + + private void Start() + { + rend = GetComponent<SpriteRenderer>(); + baseColor = rend.color; + } + + public override void BopCall(float distance) + { + distance = 1f - distance; + if (!isLitUp || (isLitUp && distance > currentDistance)) + { + StopAllCoroutines(); + StartCoroutine(LightUp(distance)); + } + } + + private IEnumerator LightUp(float distance) + { + isLitUp = true; + currentDistance = distance; + Color lightColor = Color.Lerp(maxLightColor, baseColor, distance); + rend.color = lightColor; + yield return new WaitForSeconds(Random.Range(0.5f, 2f)); + int blinks = Random.Range(0, 8); + bool isOn = true; + for (int i = 0; i < blinks; i++) + { + if (isOn) + { + rend.color = baseColor; + } + else + { + rend.color = lightColor; + } + isOn = !isOn; + yield return new WaitForSeconds(Random.Range(0.05f, 0.1f)); + } + rend.color = baseColor; + isLitUp = false; + } +} |