using System; using System.Collections; using System.Linq; using UnityEngine; public class EmptyGarbageMinigame : Minigame { private const float GrinderVolume = 0.8f; public FloatRange HandleRange = new FloatRange(-0.65f, 0.65f); public Vector2Range SpawnRange; public Collider2D Blocker; public AreaEffector2D Popper; public Collider2D Handle; public SpriteRenderer Bars; private Controller controller = new Controller(); private bool finished; public int NumObjects = 15; private SpriteRenderer[] Objects; public SpriteRenderer[] GarbagePrefabs; public SpriteRenderer[] LeafPrefabs; public SpriteRenderer[] SpecialObjectPrefabs; public AudioClip LeverDown; public AudioClip LeverUp; public AudioClip GrinderStart; public AudioClip GrinderLoop; public AudioClip GrinderEnd; public override void Begin(PlayerTask task) { base.Begin(task); int i = 0; this.Objects = new SpriteRenderer[this.NumObjects]; RandomFill randomFill = new RandomFill(); NormalPlayerTask myNormTask = this.MyNormTask; if (myNormTask != null && myNormTask.taskStep == 0) { if (this.MyNormTask.StartAt == SystemTypes.Cafeteria) { randomFill.Set(this.GarbagePrefabs); } else { randomFill.Set(this.LeafPrefabs); } } else { randomFill.Set(this.GarbagePrefabs.Union(this.LeafPrefabs)); while (i < this.SpecialObjectPrefabs.Length) { SpriteRenderer spriteRenderer = this.Objects[i] = UnityEngine.Object.Instantiate(this.SpecialObjectPrefabs[i]); spriteRenderer.transform.SetParent(base.transform); spriteRenderer.transform.localPosition = this.SpawnRange.Next(); i++; } } while (i < this.Objects.Length) { SpriteRenderer spriteRenderer2 = this.Objects[i] = UnityEngine.Object.Instantiate(randomFill.Get()); spriteRenderer2.transform.SetParent(base.transform); Vector3 vector = this.SpawnRange.Next(); vector.z = FloatRange.Next(-0.5f, 0.5f); spriteRenderer2.transform.localPosition = vector; spriteRenderer2.GetComponent().color = Color.Lerp(Color.white, Color.black, (vector.z + 0.5f) * 0.7f); i++; } } public void Update() { if (this.amClosing != Minigame.CloseState.None) { return; } this.controller.Update(); Vector3 localPosition = this.Handle.transform.localPosition; float num = this.HandleRange.ReverseLerp(localPosition.y); switch (this.controller.CheckDrag(this.Handle, false)) { case DragState.NoTouch: localPosition.y = Mathf.Lerp(localPosition.y, this.HandleRange.max, num + Time.deltaTime * 15f); break; case DragState.Dragging: if (!this.finished) { if (num > 0.5f) { Vector2 vector = this.controller.DragPosition - base.transform.position; float num2 = this.HandleRange.ReverseLerp(this.HandleRange.Clamp(vector.y)); localPosition.y = this.HandleRange.Lerp(num2 / 2f + 0.5f); } else { localPosition.y = Mathf.Lerp(localPosition.y, this.HandleRange.min, num + Time.deltaTime * 15f); if (this.Blocker.enabled) { if (Constants.ShouldPlaySfx()) { SoundManager.Instance.PlaySound(this.LeverDown, false, 1f); SoundManager.Instance.PlaySound(this.GrinderStart, false, 0.8f); SoundManager.Instance.StopSound(this.GrinderEnd); SoundManager.Instance.StopSound(this.GrinderLoop); } this.Blocker.enabled = false; base.StopAllCoroutines(); base.StartCoroutine(this.PopObjects()); base.StartCoroutine(this.AnimateObjects()); } } } break; case DragState.Released: if (!this.Blocker.enabled) { this.Blocker.enabled = true; if (Constants.ShouldPlaySfx()) { SoundManager.Instance.PlaySound(this.LeverUp, false, 1f); SoundManager.Instance.StopSound(this.GrinderStart); SoundManager.Instance.StopSound(this.GrinderLoop); SoundManager.Instance.PlaySound(this.GrinderEnd, false, 0.8f); } } if (!this.finished) { if (this.Objects.All((SpriteRenderer o) => !o)) { this.finished = true; this.MyNormTask.NextStep(); base.StartCoroutine(base.CoStartClose(0.75f)); } } break; } if (Constants.ShouldPlaySfx() && !this.Blocker.enabled && !SoundManager.Instance.SoundIsPlaying(this.GrinderStart)) { SoundManager.Instance.PlaySound(this.GrinderLoop, true, 0.8f); } this.Handle.transform.localPosition = localPosition; Vector3 localScale = this.Bars.transform.localScale; localScale.y = this.HandleRange.ChangeRange(localPosition.y, -1f, 1f); this.Bars.transform.localScale = localScale; } private IEnumerator PopObjects() { this.Popper.enabled = true; yield return new WaitForSeconds(0.05f); this.Popper.enabled = false; yield break; } private IEnumerator AnimateObjects() { Vector3 pos = base.transform.localPosition; for (float t = 3f; t > 0f; t -= Time.deltaTime) { float d = t / 3f; base.transform.localPosition = pos + Vector2Range.NextEdge() * d * 0.1f; yield return null; } yield break; } public override void Close() { SoundManager.Instance.StopSound(this.GrinderStart); SoundManager.Instance.StopSound(this.GrinderLoop); SoundManager.Instance.StopSound(this.GrinderEnd); if (this.MyNormTask && this.MyNormTask.IsComplete) { ShipStatus.Instance.OpenHatch(); PlayerControl.LocalPlayer.RpcPlayAnimation((byte)this.MyTask.TaskType); } base.Close(); } }