diff options
Diffstat (limited to 'Client/Assembly-CSharp/EmptyGarbageMinigame.cs')
-rw-r--r-- | Client/Assembly-CSharp/EmptyGarbageMinigame.cs | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/EmptyGarbageMinigame.cs b/Client/Assembly-CSharp/EmptyGarbageMinigame.cs new file mode 100644 index 0000000..679d683 --- /dev/null +++ b/Client/Assembly-CSharp/EmptyGarbageMinigame.cs @@ -0,0 +1,195 @@ +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<SpriteRenderer> randomFill = new RandomFill<SpriteRenderer>(); + 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<SpriteRenderer>(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<SpriteRenderer>(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<SpriteRenderer>().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(); + } +} |