diff options
Diffstat (limited to 'Client/Assembly-CSharp/Minigame.cs')
-rw-r--r-- | Client/Assembly-CSharp/Minigame.cs | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/Minigame.cs b/Client/Assembly-CSharp/Minigame.cs new file mode 100644 index 0000000..0897e13 --- /dev/null +++ b/Client/Assembly-CSharp/Minigame.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections; +using UnityEngine; + +public abstract class Minigame : MonoBehaviour +{ + public global::Console Console { get; set; } + + protected int ConsoleId + { + get + { + if (!this.Console) + { + return 0; + } + return this.Console.ConsoleId; + } + } + + public static Minigame Instance; + + public const float Depth = -50f; + + public TransitionType TransType; + + protected PlayerTask MyTask; + + protected NormalPlayerTask MyNormTask; + + protected Minigame.CloseState amClosing; + + public AudioClip OpenSound; + + public AudioClip CloseSound; + + protected enum CloseState + { + None, + Waiting, + Closing + } + + public virtual void Begin(PlayerTask task) + { + Minigame.Instance = this; + this.MyTask = task; + this.MyNormTask = (task as NormalPlayerTask); + if (PlayerControl.LocalPlayer) + { + if (MapBehaviour.Instance) + { + MapBehaviour.Instance.Close(); + } + PlayerControl.LocalPlayer.NetTransform.Halt(); + } + base.StartCoroutine(this.CoAnimateOpen()); + } + + protected IEnumerator CoStartClose(float duration = 0.75f) + { + if (this.amClosing != Minigame.CloseState.None) + { + yield break; + } + this.amClosing = Minigame.CloseState.Waiting; + yield return Effects.Wait(duration); + this.Close(); + yield break; + } + + [Obsolete("Don't use, I just don't want to reselect the close button event handlers", true)] + public void Close(bool allowMovement) + { + this.Close(); + } + + public virtual void Close() + { + if (this.amClosing != Minigame.CloseState.Closing) + { + if (this.CloseSound && Constants.ShouldPlaySfx()) + { + SoundManager.Instance.PlaySound(this.CloseSound, false, 1f); + } + this.amClosing = Minigame.CloseState.Closing; + base.StartCoroutine(this.CoDestroySelf()); + return; + } + UnityEngine.Object.Destroy(base.gameObject); + } + + protected virtual IEnumerator CoAnimateOpen() + { + if (this.OpenSound && Constants.ShouldPlaySfx()) + { + SoundManager.Instance.PlaySound(this.OpenSound, false, 1f); + } + TransitionType transType = this.TransType; + if (transType != TransitionType.SlideBottom) + { + if (transType == TransitionType.Alpha) + { + SpriteRenderer[] rends = base.GetComponentsInChildren<SpriteRenderer>(); + for (float timer = 0f; timer < 0.25f; timer += Time.deltaTime) + { + float t = timer / 0.25f; + for (int i = 0; i < rends.Length; i++) + { + rends[i].color = Color.Lerp(Palette.ClearWhite, Color.white, t); + } + yield return null; + } + for (int j = 0; j < rends.Length; j++) + { + rends[j].color = Color.white; + } + rends = null; + } + } + else + { + for (float timer = 0f; timer < 0.25f; timer += Time.deltaTime) + { + float t2 = timer / 0.25f; + base.transform.localPosition = new Vector3(0f, Mathf.SmoothStep(-8f, 0f, t2), -50f); + yield return null; + } + base.transform.localPosition = new Vector3(0f, 0f, -50f); + } + yield break; + } + + protected virtual IEnumerator CoDestroySelf() + { + TransitionType transType = this.TransType; + if (transType != TransitionType.SlideBottom) + { + if (transType == TransitionType.Alpha) + { + SpriteRenderer[] rends = base.GetComponentsInChildren<SpriteRenderer>(); + for (float timer = 0f; timer < 0.25f; timer += Time.deltaTime) + { + float t = timer / 0.25f; + for (int i = 0; i < rends.Length; i++) + { + rends[i].color = Color.Lerp(Color.white, Palette.ClearWhite, t); + } + yield return null; + } + rends = null; + } + } + else + { + for (float timer = 0f; timer < 0.25f; timer += Time.deltaTime) + { + float t2 = timer / 0.25f; + base.transform.localPosition = new Vector3(0f, Mathf.SmoothStep(0f, -8f, t2), -50f); + yield return null; + } + } + UnityEngine.Object.Destroy(base.gameObject); + yield break; + } +} |