summaryrefslogtreecommitdiff
path: root/GameCode/GridLightBulb.cs
diff options
context:
space:
mode:
Diffstat (limited to 'GameCode/GridLightBulb.cs')
-rw-r--r--GameCode/GridLightBulb.cs57
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;
+ }
+}