summaryrefslogtreecommitdiff
path: root/Client/Assembly-CSharp/VendingMinigame.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Assembly-CSharp/VendingMinigame.cs')
-rw-r--r--Client/Assembly-CSharp/VendingMinigame.cs188
1 files changed, 188 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/VendingMinigame.cs b/Client/Assembly-CSharp/VendingMinigame.cs
new file mode 100644
index 0000000..19ad09b
--- /dev/null
+++ b/Client/Assembly-CSharp/VendingMinigame.cs
@@ -0,0 +1,188 @@
+using System;
+using System.Collections;
+using System.Linq;
+using UnityEngine;
+
+public class VendingMinigame : Minigame
+{
+ public static readonly string[] Letters = new string[]
+ {
+ "a",
+ "b",
+ "c"
+ };
+
+ public TextRenderer NumberText;
+
+ public SpriteRenderer TargetImage;
+
+ public string enteredCode = string.Empty;
+
+ private bool animating;
+
+ private bool done;
+
+ private string targetCode;
+
+ public SpriteRenderer AcceptButton;
+
+ public VendingSlot[] Slots;
+
+ public Sprite[] Drinks;
+
+ public Sprite[] DrawnDrinks;
+
+ public void OnEnable()
+ {
+ this.Begin(null);
+ }
+
+ public override void Begin(PlayerTask task)
+ {
+ base.Begin(task);
+ int num = this.Drinks.RandomIdx<Sprite>();
+ this.TargetImage.sprite = this.DrawnDrinks[num];
+ for (int i = 0; i < this.Drinks.Length; i++)
+ {
+ Sprite sprite = this.Drinks[i];
+ int num2;
+ while (!this.PickARandomSlot(sprite, out num2))
+ {
+ }
+ this.Slots[num2].DrinkImage.enabled = true;
+ this.Slots[num2].DrinkImage.sprite = sprite;
+ if (num == i)
+ {
+ this.targetCode = VendingMinigame.SlotIdToString(num2);
+ }
+ }
+ this.NumberText.Text = string.Empty;
+ }
+
+ private static int StringToSlotId(string code)
+ {
+ int num;
+ if (int.TryParse(code[0].ToString(), out num) || VendingMinigame.Letters.Any(new Func<string, bool>(code.EndsWith)))
+ {
+ return -1;
+ }
+ int num2 = VendingMinigame.Letters.IndexOf(new Predicate<string>(code.StartsWith));
+ return int.Parse(code[1].ToString()) - 1 + num2 * 4;
+ }
+
+ private static string SlotIdToString(int slotId)
+ {
+ int num = slotId % 4 + 1;
+ int num2 = slotId / 4;
+ return VendingMinigame.Letters[num2] + num;
+ }
+
+ private bool PickARandomSlot(Sprite drink, out int slotId)
+ {
+ slotId = this.Slots.RandomIdx<VendingSlot>();
+ return !this.Slots[slotId].DrinkImage.enabled;
+ }
+
+ public void EnterDigit(string s)
+ {
+ if (this.animating)
+ {
+ return;
+ }
+ if (this.done)
+ {
+ return;
+ }
+ if (this.enteredCode.Length >= 2)
+ {
+ base.StartCoroutine(this.BlinkAccept());
+ return;
+ }
+ this.enteredCode += s;
+ this.NumberText.Text = this.enteredCode;
+ }
+
+ public void ClearDigits()
+ {
+ if (this.animating)
+ {
+ return;
+ }
+ this.enteredCode = string.Empty;
+ this.NumberText.Text = string.Empty;
+ }
+
+ public void AcceptDigits()
+ {
+ if (this.animating)
+ {
+ return;
+ }
+ base.StartCoroutine(this.Animate());
+ }
+
+ private IEnumerator BlinkAccept()
+ {
+ int num;
+ for (int i = 0; i < 5; i = num)
+ {
+ this.AcceptButton.color = Color.gray;
+ yield return null;
+ yield return null;
+ this.AcceptButton.color = Color.white;
+ yield return null;
+ yield return null;
+ num = i + 1;
+ }
+ yield break;
+ }
+
+ private IEnumerator Animate()
+ {
+ this.animating = true;
+ int num = VendingMinigame.StringToSlotId(this.enteredCode);
+ if (num >= 0 && this.Slots[num].DrinkImage.enabled)
+ {
+ yield return Effects.All(new IEnumerator[]
+ {
+ this.CoBlinkVend(),
+ this.Slots[num].CoBuy()
+ });
+ if (this.targetCode == this.enteredCode)
+ {
+ this.done = true;
+ this.MyNormTask.NextStep();
+ yield return base.CoStartClose(0.25f);
+ }
+ }
+ else
+ {
+ WaitForSeconds wait = new WaitForSeconds(0.1f);
+ this.NumberText.Text = "XXXXXXXX";
+ yield return wait;
+ this.NumberText.Text = string.Empty;
+ yield return wait;
+ this.NumberText.Text = "XXXXXXXX";
+ yield return wait;
+ wait = null;
+ }
+ this.enteredCode = string.Empty;
+ this.NumberText.Text = this.enteredCode;
+ this.animating = false;
+ yield break;
+ }
+
+ private IEnumerator CoBlinkVend()
+ {
+ int num;
+ for (int i = 0; i < 5; i = num)
+ {
+ this.NumberText.Text = "Vending";
+ yield return Effects.Wait(0.1f);
+ this.NumberText.Text = string.Empty;
+ yield return Effects.Wait(0.1f);
+ num = i + 1;
+ }
+ yield break;
+ }
+}