summaryrefslogtreecommitdiff
path: root/Client/Assembly-CSharp/GameStartManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Assembly-CSharp/GameStartManager.cs')
-rw-r--r--Client/Assembly-CSharp/GameStartManager.cs215
1 files changed, 215 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/GameStartManager.cs b/Client/Assembly-CSharp/GameStartManager.cs
new file mode 100644
index 0000000..69f1967
--- /dev/null
+++ b/Client/Assembly-CSharp/GameStartManager.cs
@@ -0,0 +1,215 @@
+using System;
+using InnerNet;
+using UnityEngine;
+
+public class GameStartManager : DestroyableSingleton<GameStartManager>, IDisconnectHandler
+{
+ public int MinPlayers = 4;
+
+ public TextRenderer PlayerCounter;
+
+ private int LastPlayerCount = -1;
+
+ public GameObject GameSizePopup;
+
+ public TextRenderer GameRoomName;
+
+ public LobbyBehaviour LobbyPrefab;
+
+ public TextRenderer GameStartText;
+
+ public SpriteRenderer StartButton;
+
+ public SpriteRenderer MakePublicButton;
+
+ public Sprite PublicGameImage;
+
+ public Sprite PrivateGameImage;
+
+ private GameStartManager.StartingStates startState;
+
+ private float countDownTimer;
+
+ private enum StartingStates
+ {
+ NotStarting,
+ Countdown,
+ Starting
+ }
+
+ public void Start()
+ {
+ if (DestroyableSingleton<TutorialManager>.InstanceExists)
+ {
+ UnityEngine.Object.Destroy(base.gameObject);
+ return;
+ }
+ string text = InnerNetClient.IntToGameName(AmongUsClient.Instance.GameId);
+ if (text != null)
+ {
+ this.GameRoomName.Text = DestroyableSingleton<TranslationController>.Instance.GetString(StringNames.RoomCode, Array.Empty<object>()) + "\r\n" + text;
+ }
+ else
+ {
+ this.StartButton.transform.localPosition = new Vector3(0f, -0.2f, 0f);
+ this.PlayerCounter.transform.localPosition = new Vector3(0f, -0.8f, 0f);
+ }
+ AmongUsClient.Instance.DisconnectHandlers.AddUnique(this);
+ if (!AmongUsClient.Instance.AmHost)
+ {
+ this.StartButton.gameObject.SetActive(false);
+ }
+ else
+ {
+ LobbyBehaviour.Instance = UnityEngine.Object.Instantiate<LobbyBehaviour>(this.LobbyPrefab);
+ AmongUsClient.Instance.Spawn(LobbyBehaviour.Instance, -2, SpawnFlags.None);
+ }
+ this.MakePublicButton.gameObject.SetActive(AmongUsClient.Instance.GameMode == GameModes.OnlineGame);
+ }
+
+ public void MakePublic()
+ {
+ if (AmongUsClient.Instance.AmHost)
+ {
+ AmongUsClient.Instance.ChangeGamePublic(!AmongUsClient.Instance.IsGamePublic);
+ }
+ }
+
+ public void Update()
+ {
+ if (!GameData.Instance)
+ {
+ return;
+ }
+ this.MakePublicButton.sprite = (AmongUsClient.Instance.IsGamePublic ? this.PublicGameImage : this.PrivateGameImage);
+ if (GameData.Instance.PlayerCount != this.LastPlayerCount)
+ {
+ this.LastPlayerCount = GameData.Instance.PlayerCount;
+ string arg = "[FF0000FF]";
+ if (this.LastPlayerCount > this.MinPlayers)
+ {
+ arg = "[00FF00FF]";
+ }
+ if (this.LastPlayerCount == this.MinPlayers)
+ {
+ arg = "[FFFF00FF]";
+ }
+ this.PlayerCounter.Text = string.Format("{0}{1}/{2}", arg, this.LastPlayerCount, PlayerControl.GameOptions.MaxPlayers);
+ this.StartButton.color = ((this.LastPlayerCount >= this.MinPlayers) ? Palette.EnabledColor : Palette.DisabledColor);
+ if (DestroyableSingleton<DiscordManager>.InstanceExists)
+ {
+ if (AmongUsClient.Instance.AmHost && AmongUsClient.Instance.GameMode == GameModes.OnlineGame)
+ {
+ DestroyableSingleton<DiscordManager>.Instance.SetInLobbyHost(this.LastPlayerCount, AmongUsClient.Instance.GameId);
+ }
+ else
+ {
+ DestroyableSingleton<DiscordManager>.Instance.SetInLobbyClient();
+ }
+ }
+ }
+ if (AmongUsClient.Instance.AmHost)
+ {
+ if (this.startState == GameStartManager.StartingStates.Countdown)
+ {
+ int num = Mathf.CeilToInt(this.countDownTimer);
+ this.countDownTimer -= Time.deltaTime;
+ int num2 = Mathf.CeilToInt(this.countDownTimer);
+ this.GameStartText.Text = string.Format("Starting in {0}", num2);
+ if (num != num2)
+ {
+ PlayerControl.LocalPlayer.RpcSetStartCounter(num2);
+ }
+ if (num2 <= 0)
+ {
+ this.FinallyBegin();
+ return;
+ }
+ }
+ else
+ {
+ this.GameStartText.Text = string.Empty;
+ }
+ }
+ }
+
+ public void ResetStartState()
+ {
+ this.startState = GameStartManager.StartingStates.NotStarting;
+ if (this.StartButton && this.StartButton.gameObject)
+ {
+ this.StartButton.gameObject.SetActive(AmongUsClient.Instance.AmHost);
+ }
+ PlayerControl.LocalPlayer.RpcSetStartCounter(-1);
+ }
+
+ public void SetStartCounter(sbyte sec)
+ {
+ if (sec == -1)
+ {
+ this.GameStartText.Text = string.Empty;
+ return;
+ }
+ this.GameStartText.Text = string.Format("Starting in {0}", sec);
+ }
+
+ public void BeginGame()
+ {
+ if (this.startState != GameStartManager.StartingStates.NotStarting)
+ {
+ return;
+ }
+ if (SaveManager.ShowMinPlayerWarning && GameData.Instance.PlayerCount == this.MinPlayers)
+ {
+ this.GameSizePopup.SetActive(true);
+ return;
+ }
+ if (GameData.Instance.PlayerCount < this.MinPlayers)
+ {
+ base.StartCoroutine(Effects.Shake(this.PlayerCounter.transform, 0.75f, 0.25f));
+ return;
+ }
+ this.ReallyBegin(false);
+ }
+
+ public void ReallyBegin(bool neverShow)
+ {
+ this.startState = GameStartManager.StartingStates.Countdown;
+ if (neverShow)
+ {
+ SaveManager.ShowMinPlayerWarning = false;
+ }
+ this.StartButton.gameObject.SetActive(false);
+ this.countDownTimer = 10.0001f;
+ this.startState = GameStartManager.StartingStates.Countdown;
+ }
+
+ public void FinallyBegin()
+ {
+ if (this.startState != GameStartManager.StartingStates.Countdown)
+ {
+ return;
+ }
+ this.startState = GameStartManager.StartingStates.Starting;
+ AmongUsClient.Instance.StartGame();
+ AmongUsClient.Instance.DisconnectHandlers.Remove(this);
+ UnityEngine.Object.Destroy(base.gameObject);
+ }
+
+ public void HandleDisconnect(PlayerControl pc, DisconnectReasons reason)
+ {
+ if (AmongUsClient.Instance.AmHost)
+ {
+ this.LastPlayerCount = -1;
+ if (this.StartButton)
+ {
+ this.StartButton.gameObject.SetActive(true);
+ }
+ }
+ }
+
+ public void HandleDisconnect()
+ {
+ this.HandleDisconnect(null, DisconnectReasons.ExitGame);
+ }
+}