diff options
Diffstat (limited to 'Client/Assembly-CSharp/VendingMinigame.cs')
-rw-r--r-- | Client/Assembly-CSharp/VendingMinigame.cs | 188 |
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; + } +} |