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(); 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(code.EndsWith))) { return -1; } int num2 = VendingMinigame.Letters.IndexOf(new Predicate(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(); 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; } }