summaryrefslogtreecommitdiff
path: root/Client/Assembly-CSharp/IntroCutscene.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Assembly-CSharp/IntroCutscene.cs')
-rw-r--r--Client/Assembly-CSharp/IntroCutscene.cs155
1 files changed, 155 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/IntroCutscene.cs b/Client/Assembly-CSharp/IntroCutscene.cs
new file mode 100644
index 0000000..3271c11
--- /dev/null
+++ b/Client/Assembly-CSharp/IntroCutscene.cs
@@ -0,0 +1,155 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class IntroCutscene : MonoBehaviour
+{
+ public static IntroCutscene Instance;
+
+ public TextRenderer Title;
+
+ public TextRenderer ImpostorText;
+
+ public PoolablePlayer PlayerPrefab;
+
+ public MeshRenderer BackgroundBar;
+
+ public MeshRenderer Foreground;
+
+ public FloatRange ForegroundRadius;
+
+ public SpriteRenderer FrontMost;
+
+ public AudioClip IntroStinger;
+
+ public float BaseY = -0.25f;
+
+ public IEnumerator CoBegin(List<PlayerControl> yourTeam, bool isImpostor)
+ {
+ SoundManager.Instance.PlaySound(this.IntroStinger, false, 1f);
+ if (!isImpostor)
+ {
+ this.BeginCrewmate(yourTeam);
+ }
+ else
+ {
+ this.BeginImpostor(yourTeam);
+ }
+ Color c = this.Title.Color;
+ Color fade = Color.black;
+ Color impColor = Color.white;
+ Vector3 titlePos = this.Title.transform.localPosition;
+ float timer = 0f;
+ while (timer < 3f)
+ {
+ timer += Time.deltaTime;
+ float num = Mathf.Min(1f, timer / 3f);
+ this.Foreground.material.SetFloat("_Rad", this.ForegroundRadius.ExpOutLerp(num * 2f));
+ fade.a = Mathf.Lerp(1f, 0f, num * 3f);
+ this.FrontMost.color = fade;
+ c.a = Mathf.Clamp(FloatRange.ExpOutLerp(num, 0f, 1f), 0f, 1f);
+ this.Title.Color = c;
+ impColor.a = Mathf.Lerp(0f, 1f, (num - 0.3f) * 3f);
+ this.ImpostorText.Color = impColor;
+ titlePos.y = 2.7f - num * 0.3f;
+ this.Title.transform.localPosition = titlePos;
+ yield return null;
+ }
+ timer = 0f;
+ while (timer < 1f)
+ {
+ timer += Time.deltaTime;
+ float num2 = timer / 1f;
+ fade.a = Mathf.Lerp(0f, 1f, num2 * 3f);
+ this.FrontMost.color = fade;
+ yield return null;
+ }
+ UnityEngine.Object.Destroy(base.gameObject);
+ yield break;
+ }
+
+ private void BeginCrewmate(List<PlayerControl> yourTeam)
+ {
+ Vector3 position = this.BackgroundBar.transform.position;
+ position.y -= 0.25f;
+ this.BackgroundBar.transform.position = position;
+ int adjustedNumImpostors = PlayerControl.GameOptions.GetAdjustedNumImpostors(GameData.Instance.PlayerCount);
+ if (adjustedNumImpostors == 1)
+ {
+ this.ImpostorText.Text = DestroyableSingleton<TranslationController>.Instance.GetString(StringNames.NumImpostorsS, Array.Empty<object>());
+ }
+ else
+ {
+ this.ImpostorText.Text = DestroyableSingleton<TranslationController>.Instance.GetString(StringNames.NumImpostorsP, new object[]
+ {
+ adjustedNumImpostors
+ });
+ }
+ this.BackgroundBar.material.SetColor("_Color", Palette.CrewmateBlue);
+ this.Title.Text = DestroyableSingleton<TranslationController>.Instance.GetString(StringNames.Crewmate, Array.Empty<object>());
+ this.Title.Color = Palette.CrewmateBlue;
+ for (int i = 0; i < yourTeam.Count; i++)
+ {
+ PlayerControl playerControl = yourTeam[i];
+ if (playerControl)
+ {
+ GameData.PlayerInfo data = playerControl.Data;
+ if (data != null)
+ {
+ int num = (i % 2 == 0) ? -1 : 1;
+ int num2 = (i + 1) / 2;
+ float num3 = ((i == 0) ? 1.2f : 1f) - (float)num2 * 0.12f;
+ float num4 = 1f - (float)num2 * 0.08f;
+ float num5 = (float)((i == 0) ? -8 : -1);
+ PoolablePlayer poolablePlayer = UnityEngine.Object.Instantiate<PoolablePlayer>(this.PlayerPrefab, base.transform);
+ poolablePlayer.name = data.PlayerName + "Dummy";
+ poolablePlayer.SetFlipX(i % 2 == 0);
+ poolablePlayer.transform.localPosition = new Vector3(0.8f * (float)num * (float)num2 * num4, this.BaseY - 0.25f + (float)num2 * 0.1f, num5 + (float)num2 * 0.01f) * 1.5f;
+ Vector3 localScale = new Vector3(num3, num3, num3) * 1.5f;
+ poolablePlayer.transform.localScale = localScale;
+ PlayerControl.SetPlayerMaterialColors((int)data.ColorId, poolablePlayer.Body);
+ DestroyableSingleton<HatManager>.Instance.SetSkin(poolablePlayer.SkinSlot, data.SkinId);
+ PlayerControl.SetHatImage(data.HatId, poolablePlayer.HatSlot);
+ PlayerControl.SetPetImage(data.PetId, (int)data.ColorId, poolablePlayer.PetSlot);
+ poolablePlayer.NameText.gameObject.SetActive(false);
+ }
+ }
+ }
+ }
+
+ private void BeginImpostor(List<PlayerControl> yourTeam)
+ {
+ this.ImpostorText.gameObject.SetActive(false);
+ this.Title.Text = DestroyableSingleton<TranslationController>.Instance.GetString(StringNames.Impostor, Array.Empty<object>());
+ this.Title.Color = Palette.ImpostorRed;
+ for (int i = 0; i < yourTeam.Count; i++)
+ {
+ PlayerControl playerControl = yourTeam[i];
+ if (playerControl)
+ {
+ GameData.PlayerInfo data = playerControl.Data;
+ if (data != null)
+ {
+ int num = (i % 2 == 0) ? -1 : 1;
+ int num2 = (i + 1) / 2;
+ float num3 = 1f - (float)num2 * 0.075f;
+ float num4 = 1f - (float)num2 * 0.035f;
+ float num5 = (float)((i == 0) ? -8 : -1);
+ PoolablePlayer poolablePlayer = UnityEngine.Object.Instantiate<PoolablePlayer>(this.PlayerPrefab, base.transform);
+ poolablePlayer.transform.localPosition = new Vector3((float)(num * num2) * num4, this.BaseY + (float)num2 * 0.15f, num5 + (float)num2 * 0.01f) * 1.5f;
+ Vector3 vector = new Vector3(num3, num3, num3) * 1.5f;
+ poolablePlayer.transform.localScale = vector;
+ poolablePlayer.SetFlipX(i % 2 == 1);
+ PlayerControl.SetPlayerMaterialColors((int)data.ColorId, poolablePlayer.Body);
+ DestroyableSingleton<HatManager>.Instance.SetSkin(poolablePlayer.SkinSlot, data.SkinId);
+ PlayerControl.SetHatImage(data.HatId, poolablePlayer.HatSlot);
+ PlayerControl.SetPetImage(data.PetId, (int)data.ColorId, poolablePlayer.PetSlot);
+ TextRenderer nameText = poolablePlayer.NameText;
+ nameText.Text = data.PlayerName;
+ nameText.transform.localScale = vector.Inv();
+ }
+ }
+ }
+ }
+}