LethalCompany/Lethal Company/ExportedProject/Assets/Scripts/Assembly-CSharp/HUDManager.cs
2024-01-05 18:46:12 -05:00

3247 lines
102 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dissonance;
using GameNetcodeStuff;
using Steamworks;
using Steamworks.Data;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.UI;
public class HUDManager : NetworkBehaviour
{
public HUDElement Inventory;
public HUDElement Chat;
public HUDElement PlayerInfo;
public HUDElement Tooltips;
public HUDElement InstabilityCounter;
public HUDElement Clock;
private HUDElement[] HUDElements;
public GameObject HUDContainer;
public Animator playerScreenShakeAnimator;
public RawImage playerScreenTexture;
public Volume playerGraphicsVolume;
public TextMeshProUGUI weightCounter;
public Animator weightCounterAnimator;
[Header("Item UI")]
public UnityEngine.UI.Image[] itemSlotIcons;
public UnityEngine.UI.Image[] itemSlotIconFrames;
[Header("Tooltips")]
public TextMeshProUGUI[] controlTipLines;
[Header("Object Scanner")]
private RaycastHit[] scanNodesHit;
public RectTransform[] scanElements;
private bool scanElementsHidden;
private float playerPingingScan;
private float updateScanInterval;
private Dictionary<RectTransform, ScanNodeProperties> scanNodes = new Dictionary<RectTransform, ScanNodeProperties>();
private List<ScanNodeProperties> nodesOnScreen = new List<ScanNodeProperties>();
private TextMeshProUGUI[] scanElementText = new TextMeshProUGUI[2];
public Animator scanEffectAnimator;
public AudioClip scanSFX;
public AudioClip addToScrapTotalSFX;
public AudioClip finishAddingToTotalSFX;
private float addToDisplayTotalInterval;
private bool addingToDisplayTotal;
[Space(3f)]
public TextMeshProUGUI totalValueText;
public Animator scanInfoAnimator;
public int totalScrapScanned;
private int totalScrapScannedDisplayNum;
private int scannedScrapNum;
private bool addedToScrapCounterThisFrame;
[Header("Batteries")]
public UnityEngine.UI.Image batteryIcon;
public TextMeshProUGUI batteryInventoryNumber;
public UnityEngine.UI.Image batteryMeter;
[Header("Audio")]
public AudioSource UIAudio;
public AudioClip criticalInjury;
public AudioLowPassFilter audioListenerLowPass;
public AudioClip globalNotificationSFX;
[Header("Misc UI elements")]
public TextMeshProUGUI debugText;
public GameObject errorLogPanel;
public TextMeshProUGUI errorLogText;
private string previousErrorReceived;
public UnityEngine.UI.Image PTTIcon;
public Animator batteryBlinkUI;
public TextMeshProUGUI holdingTwoHandedItem;
public CanvasGroup selfRedCanvasGroup;
public UnityEngine.UI.Image holdInteractionFillAmount;
public CanvasGroup holdInteractionCanvasGroup;
public float holdFillAmount;
public EndOfGameStatUIElements statsUIElements;
public Animator gameOverAnimator;
public Animator quotaAnimator;
public TextMeshProUGUI HUDQuotaNumerator;
public TextMeshProUGUI HUDQuotaDenominator;
public Animator planetIntroAnimator;
public Animator endgameStatsAnimator;
public TextMeshProUGUI loadingText;
public UnityEngine.UI.Image loadingDarkenScreen;
public TextMeshProUGUI planetInfoSummaryText;
public TextMeshProUGUI planetInfoHeaderText;
public TextMeshProUGUI planetRiskLevelText;
[Header("Text chat")]
public TextMeshProUGUI chatText;
public TextMeshProUGUI typingIndicator;
public TMP_InputField chatTextField;
public string lastChatMessage = "";
public List<string> ChatMessageHistory = new List<string>();
public Animator playerCouldRecieveTextChatAnimator;
public StartOfRound playersManager;
public PlayerActions playerActions;
public PlayerControllerB localPlayer;
private bool playerIsCriticallyInjured;
public TextMeshProUGUI instabilityCounterNumber;
public TextMeshProUGUI instabilityCounterText;
private int previousInstability;
private Terminal terminalScript;
[Header("Special Graphics")]
public bool retrievingSteamLeaderboard;
public Animator signalTranslatorAnimator;
public TextMeshProUGUI signalTranslatorText;
public Animator alarmHornEffect;
public AudioClip shipAlarmHornSFX;
public Animator deviceChangeAnimator;
public TextMeshProUGUI deviceChangeText;
public Animator saveDataIconAnimatorB;
public Animator HUDAnimator;
public Animator radiationGraphicAnimator;
public AudioClip radiationWarningAudio;
public UnityEngine.UI.Image shipLeavingEarlyIcon;
private float timeSinceDisplayingStatusEffect;
public Animator statusEffectAnimator;
public TextMeshProUGUI statusEffectText;
[Space(3f)]
public bool increaseHelmetCondensation;
public Material helmetCondensationMaterial;
[Space(3f)]
public Animator moneyRewardsAnimator;
public TextMeshProUGUI moneyRewardsTotalText;
public TextMeshProUGUI moneyRewardsListText;
private Coroutine scrollRewardTextCoroutine;
public Scrollbar rewardsScrollbar;
[Space(3f)]
public CanvasGroup shockTutorialLeftAlpha;
[Space(3f)]
public CanvasGroup shockTutorialRightAlpha;
public int tutorialArrowState;
public bool setTutorialArrow;
[Space(3f)]
public Animator tipsPanelAnimator;
public TextMeshProUGUI tipsPanelBody;
public TextMeshProUGUI tipsPanelHeader;
public AudioClip[] tipsSFX;
public AudioClip[] warningSFX;
private Coroutine tipsPanelCoroutine;
private bool isDisplayingWarning;
public Animator globalNotificationAnimator;
public TextMeshProUGUI globalNotificationText;
public bool sinkingCoveredFace;
public Animator sinkingUnderAnimator;
[Header("Dialogue Box")]
private Coroutine readDialogueCoroutine;
public TextMeshProUGUI dialogeBoxHeaderText;
public TextMeshProUGUI dialogeBoxText;
public Animator dialogueBoxAnimator;
public AudioSource dialogueBoxSFX;
public AudioClip[] dialogueBleeps;
private Coroutine forceChangeTextCoroutine;
private bool hudHidden;
[Header("Spectate UI")]
private bool hasLoadedSpectateUI;
private bool hasGottenPlayerSteamProfilePictures;
public GameObject spectatingPlayerBoxPrefab;
public Transform SpectateBoxesContainer;
private Dictionary<Animator, PlayerControllerB> spectatingPlayerBoxes = new Dictionary<Animator, PlayerControllerB>();
private float updateSpectateBoxesInterval;
private float yOffsetAmount;
private int boxesAdded;
public TextMeshProUGUI spectatingPlayerText;
private bool displayedSpectatorAFKTip;
public TextMeshProUGUI spectatorTipText;
public TextMeshProUGUI holdButtonToEndGameEarlyText;
public TextMeshProUGUI holdButtonToEndGameEarlyVotesText;
public UnityEngine.UI.Image holdButtonToEndGameEarlyMeter;
private float holdButtonToEndGameEarlyHoldTime;
[Header("Time of day UI")]
public TextMeshProUGUI clockNumber;
public UnityEngine.UI.Image clockIcon;
public Sprite[] clockIcons;
private string amPM;
private string newLine;
[Space(5f)]
public Animator gasHelmetAnimator;
public Volume drunknessFilter;
public CanvasGroup gasImageAlpha;
public Volume insanityScreenFilter;
public Volume flashbangScreenFilter;
public float flashFilter;
public Volume underwaterScreenFilter;
public bool setUnderwaterFilter;
public AudioSource breathingUnderwaterAudio;
[Header("Player levelling")]
public PlayerLevel[] playerLevels;
public int localPlayerLevel;
public int localPlayerXP;
public TextMeshProUGUI playerLevelText;
public TextMeshProUGUI playerLevelXPCounter;
public UnityEngine.UI.Image playerLevelMeter;
public AudioClip levelIncreaseSFX;
public AudioClip levelDecreaseSFX;
public AudioClip decreaseXPSFX;
public AudioClip increaseXPSFX;
public Animator playerLevelBoxAnimator;
public AudioSource LevellingAudio;
[Header("Profit quota/deadline")]
public Animator reachedProfitQuotaAnimator;
public TextMeshProUGUI newProfitQuotaText;
public TextMeshProUGUI reachedProfitQuotaBonusText;
public TextMeshProUGUI profitQuotaDaysLeftText;
public TextMeshProUGUI profitQuotaDaysLeftText2;
public AudioClip newProfitQuotaSFX;
public AudioClip reachedQuotaSFX;
public AudioClip OneDayToMeetQuotaSFX;
public AudioClip profitQuotaDaysLeftCalmSFX;
[Space(3f)]
public Animator playersFiredAnimator;
public TextMeshProUGUI EndOfRunStatsText;
public bool displayingNewQuota;
[Header("Displaying collected scrap")]
public List<GrabbableObject> itemsToBeDisplayed = new List<GrabbableObject>();
public ScrapItemHUDDisplay[] ScrapItemBoxes;
private int boxesDisplaying;
public Coroutine displayingItemCoroutine;
private int bottomBoxIndex;
public int bottomBoxYPosition;
public Material hologramMaterial;
public AudioClip displayCollectedScrapSFX;
public AudioClip displayCollectedScrapSFXSmall;
private int nextBoxIndex;
[Space(5f)]
public TextMeshProUGUI buildModeControlTip;
public bool hasSetSavedValues;
private float noLivingPlayersAtKeyboardTimer;
public static HUDManager Instance { get; private set; }
private void OnEnable()
{
IngamePlayerSettings.Instance.playerInput.actions.FindAction("EnableChat").performed += EnableChat_performed;
IngamePlayerSettings.Instance.playerInput.actions.FindAction("OpenMenu").performed += OpenMenu_performed;
IngamePlayerSettings.Instance.playerInput.actions.FindAction("SubmitChat").performed += SubmitChat_performed;
IngamePlayerSettings.Instance.playerInput.actions.FindAction("PingScan").performed += PingScan_performed;
InputSystem.onDeviceChange += OnDeviceChange;
playerActions.Movement.Enable();
}
private void OnDisable()
{
IngamePlayerSettings.Instance.playerInput.actions.FindAction("EnableChat").performed -= EnableChat_performed;
IngamePlayerSettings.Instance.playerInput.actions.FindAction("OpenMenu").performed -= OpenMenu_performed;
IngamePlayerSettings.Instance.playerInput.actions.FindAction("SubmitChat").performed -= SubmitChat_performed;
IngamePlayerSettings.Instance.playerInput.actions.FindAction("PingScan").performed -= PingScan_performed;
InputSystem.onDeviceChange -= OnDeviceChange;
playerActions.Movement.Disable();
}
private void Awake()
{
if (Instance == null)
{
Instance = this;
playerActions = new PlayerActions();
playersManager = UnityEngine.Object.FindObjectOfType<StartOfRound>();
HUDElements = new HUDElement[6] { Inventory, Chat, PlayerInfo, Tooltips, InstabilityCounter, Clock };
scanNodesHit = new RaycastHit[13];
StartCoroutine(waitUntilLocalPlayerControllerInitialized());
}
else
{
if (Instance.gameObject != null)
{
UnityEngine.Object.Destroy(Instance.gameObject);
}
else
{
UnityEngine.Object.Destroy(Instance);
}
Instance = this;
}
}
private void Start()
{
terminalScript = UnityEngine.Object.FindObjectOfType<Terminal>();
}
private void OnDeviceChange(InputDevice device, InputDeviceChange deviceChange)
{
bool flag = false;
switch (deviceChange)
{
case InputDeviceChange.Disconnected:
flag = true;
deviceChangeText.text = "Controller disconnected";
break;
case InputDeviceChange.Reconnected:
flag = true;
deviceChangeText.text = "Controller connected";
break;
}
if (flag)
{
deviceChangeAnimator.SetTrigger("display");
}
}
public void SetSavedValues(int playerObjectId = -1)
{
if (playerObjectId == -1)
{
playerObjectId = (int)GameNetworkManager.Instance.localPlayerController.playerClientId;
}
if (!hasSetSavedValues)
{
hasSetSavedValues = true;
localPlayerLevel = ES3.Load("PlayerLevel", "LCGeneralSaveData", 0);
localPlayerXP = ES3.Load("PlayerXPNum", "LCGeneralSaveData", 0);
bool flag = ES3.Load("playedDuringBeta", "LCGeneralSaveData", defaultValue: true);
StartOfRound.Instance.allPlayerScripts[playerObjectId].playerBetaBadgeMesh.enabled = flag;
Debug.Log("Has beta?: {hasBeta}");
Debug.Log(string.Format("Has beta save data: {0}", ES3.Load("playedDuringBeta", "LCGeneralSaveData", defaultValue: true)));
if (ES3.Load("FinishedShockMinigame", "LCGeneralSaveData", 0) < 2)
{
setTutorialArrow = true;
}
}
}
private IEnumerator waitUntilLocalPlayerControllerInitialized()
{
yield return new WaitUntil(() => GameNetworkManager.Instance.localPlayerController != null);
SetSavedValues();
}
public void SetNearDepthOfFieldEnabled(bool enabled)
{
float value = ((!enabled) ? 0.2f : 0.5f);
if (playerGraphicsVolume.sharedProfile.TryGet<DepthOfField>(out var component))
{
component.nearFocusEnd.SetValue(new MinFloatParameter(value, 0f, overrideState: true));
}
}
public void UpdateHealthUI(int health, bool hurtPlayer = true)
{
if (health < 100)
{
selfRedCanvasGroup.alpha = (float)(100 - health) / 100f;
if (health >= 20 && playerIsCriticallyInjured)
{
playerIsCriticallyInjured = false;
HUDAnimator.SetTrigger("HealFromCritical");
}
}
else
{
selfRedCanvasGroup.alpha = 0f;
}
if (hurtPlayer && health > 0)
{
if (health < 20)
{
playerIsCriticallyInjured = true;
HUDAnimator.SetTrigger("CriticalHit");
UIAudio.PlayOneShot(criticalInjury, 1f);
}
else
{
HUDAnimator.SetTrigger("SmallHit");
}
}
}
private void AddChatMessage(string chatMessage, string nameOfUserWhoTyped = "")
{
if (!(lastChatMessage == chatMessage))
{
lastChatMessage = chatMessage;
PingHUDElement(Chat, 4f);
if (ChatMessageHistory.Count >= 4)
{
chatText.text.Remove(0, ChatMessageHistory[0].Length);
ChatMessageHistory.Remove(ChatMessageHistory[0]);
}
StringBuilder stringBuilder = new StringBuilder(chatMessage);
stringBuilder.Replace("[playerNum0]", StartOfRound.Instance.allPlayerScripts[0].playerUsername);
stringBuilder.Replace("[playerNum1]", StartOfRound.Instance.allPlayerScripts[1].playerUsername);
stringBuilder.Replace("[playerNum2]", StartOfRound.Instance.allPlayerScripts[2].playerUsername);
stringBuilder.Replace("[playerNum3]", StartOfRound.Instance.allPlayerScripts[3].playerUsername);
chatMessage = stringBuilder.ToString();
string item = ((!string.IsNullOrEmpty(nameOfUserWhoTyped)) ? ("<color=#FF0000>" + nameOfUserWhoTyped + "</color>: <color=#FFFF00>'" + chatMessage + "'</color>") : ("<color=#7069ff>" + chatMessage + "</color>"));
ChatMessageHistory.Add(item);
chatText.text = "";
for (int i = 0; i < ChatMessageHistory.Count; i++)
{
TextMeshProUGUI textMeshProUGUI = chatText;
textMeshProUGUI.text = textMeshProUGUI.text + "\n" + ChatMessageHistory[i];
}
}
}
public void AddTextToChatOnServer(string chatMessage, int playerId = -1)
{
if (playerId != -1)
{
AddChatMessage(chatMessage, playersManager.allPlayerScripts[playerId].playerUsername);
AddPlayerChatMessageServerRpc(chatMessage, playerId);
}
else
{
AddChatMessage(chatMessage);
AddTextMessageServerRpc(chatMessage);
}
}
[ServerRpc(RequireOwnership = false)]
private void AddPlayerChatMessageServerRpc(string chatMessage, int playerId)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(2930587515u, serverRpcParams, RpcDelivery.Reliable);
bool value = chatMessage != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(chatMessage);
}
BytePacker.WriteValueBitPacked(bufferWriter, playerId);
__endSendServerRpc(ref bufferWriter, 2930587515u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost) && chatMessage.Length <= 50)
{
AddPlayerChatMessageClientRpc(chatMessage, playerId);
}
}
[ClientRpc]
private void AddPlayerChatMessageClientRpc(string chatMessage, int playerId)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(168728662u, clientRpcParams, RpcDelivery.Reliable);
bool value = chatMessage != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(chatMessage);
}
BytePacker.WriteValueBitPacked(bufferWriter, playerId);
__endSendClientRpc(ref bufferWriter, 168728662u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && playersManager.allPlayerScripts[playerId].isPlayerDead == GameNetworkManager.Instance.localPlayerController.isPlayerDead)
{
bool flag = GameNetworkManager.Instance.localPlayerController.holdingWalkieTalkie && StartOfRound.Instance.allPlayerScripts[playerId].holdingWalkieTalkie;
if (!(Vector3.Distance(GameNetworkManager.Instance.localPlayerController.transform.position, playersManager.allPlayerScripts[playerId].transform.position) > 25f) || flag)
{
AddChatMessage(chatMessage, playersManager.allPlayerScripts[playerId].playerUsername);
}
}
}
[ServerRpc(RequireOwnership = false)]
private void AddTextMessageServerRpc(string chatMessage)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(2787681914u, serverRpcParams, RpcDelivery.Reliable);
bool value = chatMessage != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(chatMessage);
}
__endSendServerRpc(ref bufferWriter, 2787681914u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
{
AddTextMessageClientRpc(chatMessage);
}
}
[ClientRpc]
private void AddTextMessageClientRpc(string chatMessage)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(1568596901u, clientRpcParams, RpcDelivery.Reliable);
bool value = chatMessage != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(chatMessage);
}
__endSendClientRpc(ref bufferWriter, 1568596901u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
{
AddChatMessage(chatMessage);
}
}
private void SubmitChat_performed(InputAction.CallbackContext context)
{
localPlayer = GameNetworkManager.Instance.localPlayerController;
if (!context.performed || localPlayer == null || !localPlayer.isTypingChat || ((!localPlayer.IsOwner || (base.IsServer && !localPlayer.isHostPlayerObject)) && !localPlayer.isTestingPlayer) || localPlayer.isPlayerDead)
{
return;
}
if (!string.IsNullOrEmpty(chatTextField.text) && chatTextField.text.Length < 50)
{
AddTextToChatOnServer(chatTextField.text, (int)localPlayer.playerClientId);
}
for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++)
{
if (StartOfRound.Instance.allPlayerScripts[i].isPlayerControlled && Vector3.Distance(GameNetworkManager.Instance.localPlayerController.transform.position, StartOfRound.Instance.allPlayerScripts[i].transform.position) > 24.4f && (!GameNetworkManager.Instance.localPlayerController.holdingWalkieTalkie || !StartOfRound.Instance.allPlayerScripts[i].holdingWalkieTalkie))
{
playerCouldRecieveTextChatAnimator.SetTrigger("ping");
break;
}
}
localPlayer.isTypingChat = false;
chatTextField.text = "";
EventSystem.current.SetSelectedGameObject(null);
PingHUDElement(Chat);
typingIndicator.enabled = false;
}
private void EnableChat_performed(InputAction.CallbackContext context)
{
localPlayer = GameNetworkManager.Instance.localPlayerController;
if (context.performed && !(localPlayer == null) && ((localPlayer.IsOwner && (!base.IsServer || localPlayer.isHostPlayerObject)) || localPlayer.isTestingPlayer) && !localPlayer.isPlayerDead && !localPlayer.inTerminalMenu)
{
ShipBuildModeManager.Instance.CancelBuildMode();
localPlayer.isTypingChat = true;
chatTextField.Select();
PingHUDElement(Chat, 0.1f, 1f, 1f);
typingIndicator.enabled = true;
}
}
private void OpenMenu_performed(InputAction.CallbackContext context)
{
localPlayer = GameNetworkManager.Instance.localPlayerController;
if (!(localPlayer == null) && localPlayer.isTypingChat && context.performed && ((localPlayer.IsOwner && (!base.IsServer || localPlayer.isHostPlayerObject)) || localPlayer.isTestingPlayer))
{
localPlayer.isTypingChat = false;
EventSystem.current.SetSelectedGameObject(null);
chatTextField.text = "";
PingHUDElement(Chat, 1f);
typingIndicator.enabled = false;
}
}
private void PingScan_performed(InputAction.CallbackContext context)
{
if (!(GameNetworkManager.Instance.localPlayerController == null) && context.performed && CanPlayerScan() && playerPingingScan <= -1f)
{
playerPingingScan = 0.3f;
scanEffectAnimator.transform.position = GameNetworkManager.Instance.localPlayerController.gameplayCamera.transform.position;
scanEffectAnimator.SetTrigger("scan");
UIAudio.PlayOneShot(scanSFX);
}
}
private bool CanPlayerScan()
{
if (!GameNetworkManager.Instance.localPlayerController.inSpecialInteractAnimation)
{
return !GameNetworkManager.Instance.localPlayerController.isPlayerDead;
}
return false;
}
public void UpdateBoxesSpectateUI()
{
PlayerControllerB playerScript;
for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++)
{
playerScript = StartOfRound.Instance.allPlayerScripts[i];
if (!playerScript.isPlayerDead)
{
if (playerScript.isPlayerControlled || !spectatingPlayerBoxes.Values.Contains(playerScript))
{
continue;
}
Debug.Log("Removing player spectate box since they disconnected");
Animator key = spectatingPlayerBoxes.FirstOrDefault((KeyValuePair<Animator, PlayerControllerB> x) => x.Value == playerScript).Key;
if (key.gameObject.activeSelf)
{
for (int j = 0; j < spectatingPlayerBoxes.Count; j++)
{
RectTransform component = spectatingPlayerBoxes.ElementAt(j).Key.gameObject.GetComponent<RectTransform>();
if (component.anchoredPosition.y <= -70f * (float)boxesAdded + 1f)
{
component.anchoredPosition = new Vector2(component.anchoredPosition.x, component.anchoredPosition.y + 70f);
}
}
yOffsetAmount += 70f;
}
spectatingPlayerBoxes.Remove(key);
UnityEngine.Object.Destroy(key.gameObject);
}
else if (spectatingPlayerBoxes.Values.Contains(playerScript))
{
GameObject gameObject = spectatingPlayerBoxes.FirstOrDefault((KeyValuePair<Animator, PlayerControllerB> x) => x.Value == playerScript).Key.gameObject;
if (!gameObject.activeSelf)
{
RectTransform component2 = gameObject.GetComponent<RectTransform>();
component2.anchoredPosition = new Vector2(component2.anchoredPosition.x, yOffsetAmount);
boxesAdded++;
gameObject.SetActive(value: true);
yOffsetAmount -= 70f;
}
}
else
{
GameObject gameObject = UnityEngine.Object.Instantiate(spectatingPlayerBoxPrefab, SpectateBoxesContainer, worldPositionStays: false);
gameObject.SetActive(value: true);
RectTransform component3 = gameObject.GetComponent<RectTransform>();
component3.anchoredPosition = new Vector2(component3.anchoredPosition.x, yOffsetAmount);
yOffsetAmount -= 70f;
boxesAdded++;
spectatingPlayerBoxes.Add(gameObject.GetComponent<Animator>(), playerScript);
gameObject.GetComponentInChildren<TextMeshProUGUI>().text = playerScript.playerUsername;
if (!GameNetworkManager.Instance.disableSteam)
{
FillImageWithSteamProfile(gameObject.GetComponent<RawImage>(), playerScript.playerSteamId);
}
}
}
}
public static async void FillImageWithSteamProfile(RawImage image, SteamId steamId, bool large = true)
{
if (SteamClient.IsValid)
{
if (large)
{
image.texture = GetTextureFromImage(await SteamFriends.GetLargeAvatarAsync(steamId));
}
else
{
image.texture = GetTextureFromImage(await SteamFriends.GetSmallAvatarAsync(steamId));
}
}
}
public static Texture2D GetTextureFromImage(Steamworks.Data.Image? image)
{
Texture2D texture2D = new Texture2D((int)image.Value.Width, (int)image.Value.Height);
Debug.Log("Slot K");
for (int i = 0; i < image.Value.Width; i++)
{
for (int j = 0; j < image.Value.Height; j++)
{
Steamworks.Data.Color pixel = image.Value.GetPixel(i, j);
texture2D.SetPixel(i, (int)image.Value.Height - j, new UnityEngine.Color((float)(int)pixel.r / 255f, (float)(int)pixel.g / 255f, (float)(int)pixel.b / 255f, (float)(int)pixel.a / 255f));
}
}
Debug.Log("Slot L");
texture2D.Apply();
return texture2D;
}
public void RemoveSpectateUI()
{
for (int i = 0; i < spectatingPlayerBoxes.Count; i++)
{
spectatingPlayerBoxes.ElementAt(i).Key.gameObject.SetActive(value: false);
boxesAdded--;
}
yOffsetAmount = 0f;
hasGottenPlayerSteamProfilePictures = false;
hasLoadedSpectateUI = false;
}
private void UpdateSpectateBoxSpeakerIcons()
{
if (StartOfRound.Instance.voiceChatModule == null)
{
return;
}
bool flag = false;
for (int i = 0; i < spectatingPlayerBoxes.Count; i++)
{
PlayerControllerB value = spectatingPlayerBoxes.ElementAt(i).Value;
if (!value.isPlayerControlled && !value.isPlayerDead)
{
continue;
}
if (value == GameNetworkManager.Instance.localPlayerController)
{
if (!string.IsNullOrEmpty(StartOfRound.Instance.voiceChatModule.LocalPlayerName))
{
VoicePlayerState voicePlayerState = StartOfRound.Instance.voiceChatModule.FindPlayer(StartOfRound.Instance.voiceChatModule.LocalPlayerName);
if (voicePlayerState != null)
{
spectatingPlayerBoxes.ElementAt(i).Key.SetBool("speaking", voicePlayerState.IsSpeaking && voicePlayerState.Amplitude > 0.005f);
}
}
}
else if (value.voicePlayerState == null)
{
if (!flag)
{
flag = true;
StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects();
}
}
else
{
VoicePlayerState voicePlayerState = value.voicePlayerState;
spectatingPlayerBoxes.ElementAt(i).Key.SetBool("speaking", voicePlayerState.IsSpeaking && voicePlayerState.Amplitude > 0.005f && !voicePlayerState.IsLocallyMuted);
}
}
}
public void SetSpectatingTextToPlayer(PlayerControllerB playerScript)
{
if (playerScript == null)
{
spectatingPlayerText.text = "";
}
else
{
spectatingPlayerText.text = "(Spectating: " + playerScript.playerUsername + ")";
}
}
private void DisplayScrapItemsOnHud()
{
if (boxesDisplaying < ScrapItemBoxes.Length && itemsToBeDisplayed.Count > 0)
{
DisplayNewScrapFound();
}
if (boxesDisplaying <= 0 || !(ScrapItemBoxes[bottomBoxIndex].UIContainer.anchoredPosition.y < (float)bottomBoxYPosition))
{
return;
}
for (int i = 0; i < ScrapItemBoxes.Length; i++)
{
ScrapItemBoxes[i].UIContainer.anchoredPosition += Vector2.up * (Time.deltaTime * 325f);
}
if (ScrapItemBoxes[bottomBoxIndex].UIContainer.anchoredPosition.y > (float)bottomBoxYPosition)
{
float num = ScrapItemBoxes[bottomBoxIndex].UIContainer.anchoredPosition.y - (float)bottomBoxYPosition;
num -= 0.01f;
for (int j = 0; j < ScrapItemBoxes.Length; j++)
{
ScrapItemBoxes[j].UIContainer.anchoredPosition -= Vector2.up * num;
}
}
}
private void SetScreenFilters()
{
UnderwaterScreenFilters();
drunknessFilter.weight = Mathf.Lerp(drunknessFilter.weight, StartOfRound.Instance.drunknessSideEffect.Evaluate(GameNetworkManager.Instance.localPlayerController.drunkness), 5f * Time.deltaTime);
gasImageAlpha.alpha = drunknessFilter.weight * 1.5f;
if (StartOfRound.Instance.fearLevel > 0.4f)
{
insanityScreenFilter.weight = Mathf.Lerp(insanityScreenFilter.weight, StartOfRound.Instance.fearLevel, 5f * Time.deltaTime);
}
else
{
insanityScreenFilter.weight = Mathf.Lerp(insanityScreenFilter.weight, 0f, 2f * Time.deltaTime);
}
sinkingUnderAnimator.SetBool("cover", sinkingCoveredFace);
if (flashFilter > 0f)
{
flashFilter -= Time.deltaTime * 0.16f;
}
flashbangScreenFilter.weight = Mathf.Min(1f, flashFilter);
HelmetCondensationDrops();
}
private void HelmetCondensationDrops()
{
if (!increaseHelmetCondensation)
{
if (helmetCondensationMaterial.color.a > 0f)
{
UnityEngine.Color color = helmetCondensationMaterial.color;
color.a = Mathf.Clamp(color.a - Time.deltaTime / 2f, 0f, 0.27f);
helmetCondensationMaterial.color = color;
}
}
else
{
if (helmetCondensationMaterial.color.a < 1f)
{
UnityEngine.Color color2 = helmetCondensationMaterial.color;
color2.a = Mathf.Clamp(color2.a + Time.deltaTime / 2f, 0f, 0.27f);
helmetCondensationMaterial.color = color2;
}
increaseHelmetCondensation = false;
}
if ((TimeOfDay.Instance.effects[1].effectEnabled || TimeOfDay.Instance.effects[2].effectEnabled) && !TimeOfDay.Instance.insideLighting && Vector3.Angle(GameNetworkManager.Instance.localPlayerController.gameplayCamera.transform.forward, Vector3.up) < 45f)
{
increaseHelmetCondensation = true;
}
}
private void UnderwaterScreenFilters()
{
bool flag = false;
if (GameNetworkManager.Instance.localPlayerController.isPlayerDead && GameNetworkManager.Instance.localPlayerController.spectatedPlayerScript != null)
{
PlayerControllerB spectatedPlayerScript = GameNetworkManager.Instance.localPlayerController.spectatedPlayerScript;
if (spectatedPlayerScript.underwaterCollider != null && spectatedPlayerScript.underwaterCollider.bounds.Contains(StartOfRound.Instance.spectateCamera.transform.position))
{
flag = true;
}
}
if (setUnderwaterFilter || flag)
{
audioListenerLowPass.enabled = true;
audioListenerLowPass.cutoffFrequency = Mathf.Lerp(audioListenerLowPass.cutoffFrequency, 700f, 10f * Time.deltaTime);
underwaterScreenFilter.weight = 1f;
breathingUnderwaterAudio.volume = Mathf.Lerp(breathingUnderwaterAudio.volume, 1f, 10f * Time.deltaTime);
if (!flag && !breathingUnderwaterAudio.isPlaying)
{
breathingUnderwaterAudio.Play();
}
return;
}
if (audioListenerLowPass.cutoffFrequency >= 19000f)
{
audioListenerLowPass.enabled = false;
}
else
{
audioListenerLowPass.cutoffFrequency = Mathf.Lerp(audioListenerLowPass.cutoffFrequency, 20000f, 10f * Time.deltaTime);
}
if (underwaterScreenFilter.weight < 0.05f)
{
underwaterScreenFilter.weight = 0f;
breathingUnderwaterAudio.Stop();
}
else
{
breathingUnderwaterAudio.volume = Mathf.Lerp(breathingUnderwaterAudio.volume, 0f, 10f * Time.deltaTime);
underwaterScreenFilter.weight = Mathf.Lerp(underwaterScreenFilter.weight, 0f, 10f * Time.deltaTime);
}
}
private void Update()
{
if (GameNetworkManager.Instance == null || GameNetworkManager.Instance.localPlayerController == null || GameNetworkManager.Instance.localPlayerController == null)
{
return;
}
DisplayScrapItemsOnHud();
SetScreenFilters();
if (GameNetworkManager.Instance.localPlayerController.isPlayerDead)
{
if (!hasLoadedSpectateUI)
{
hasLoadedSpectateUI = true;
Debug.Log("Adding boxes");
UpdateBoxesSpectateUI();
}
if (StartOfRound.Instance.shipIsLeaving || !StartOfRound.Instance.currentLevel.planetHasTime)
{
holdButtonToEndGameEarlyHoldTime = 0f;
holdButtonToEndGameEarlyMeter.gameObject.SetActive(value: false);
holdButtonToEndGameEarlyText.text = "";
holdButtonToEndGameEarlyVotesText.text = "";
}
else if (!TimeOfDay.Instance.shipLeavingAlertCalled)
{
holdButtonToEndGameEarlyText.enabled = true;
if (!TimeOfDay.Instance.votedShipToLeaveEarlyThisRound)
{
DisplaySpectatorVoteTip();
if (StartOfRound.Instance.localPlayerUsingController)
{
holdButtonToEndGameEarlyText.text = "Tell autopilot ship to leave early : [R-trigger] (Hold)";
}
else
{
holdButtonToEndGameEarlyText.text = "Tell autopilot ship to leave early : [RMB] (Hold)";
}
if (playerActions.Movement.PingScan.IsPressed())
{
holdButtonToEndGameEarlyHoldTime += Time.deltaTime;
holdButtonToEndGameEarlyMeter.gameObject.SetActive(value: true);
if (holdButtonToEndGameEarlyHoldTime > 3f)
{
TimeOfDay.Instance.VoteShipToLeaveEarly();
holdButtonToEndGameEarlyText.text = "Voted for ship to leave early";
}
}
else
{
holdButtonToEndGameEarlyHoldTime = 0f;
holdButtonToEndGameEarlyMeter.gameObject.SetActive(value: false);
}
holdButtonToEndGameEarlyMeter.fillAmount = holdButtonToEndGameEarlyHoldTime / 3f;
}
else
{
holdButtonToEndGameEarlyText.text = "Voted for ship to leave early";
holdButtonToEndGameEarlyMeter.gameObject.SetActive(value: false);
}
int num = StartOfRound.Instance.connectedPlayersAmount + 1 - StartOfRound.Instance.livingPlayers;
holdButtonToEndGameEarlyText.enabled = true;
holdButtonToEndGameEarlyVotesText.text = $"({TimeOfDay.Instance.votesForShipToLeaveEarly}/{num} Votes)";
}
else
{
holdButtonToEndGameEarlyText.text = "Ship leaving in one hour";
if (TimeOfDay.Instance.votesForShipToLeaveEarly <= 0)
{
holdButtonToEndGameEarlyVotesText.text = "";
}
holdButtonToEndGameEarlyMeter.gameObject.SetActive(value: false);
}
if (updateSpectateBoxesInterval >= 0.35f)
{
updateSpectateBoxesInterval = 0f;
UpdateSpectateBoxSpeakerIcons();
}
else
{
updateSpectateBoxesInterval += Time.deltaTime;
}
}
else
{
float num2 = Mathf.RoundToInt(Mathf.Clamp(GameNetworkManager.Instance.localPlayerController.carryWeight - 1f, 0f, 100f) * 105f);
weightCounter.text = $"{num2} lb";
weightCounterAnimator.SetFloat("weight", num2 / 130f);
}
if (CanPlayerScan())
{
UpdateScanNodes(GameNetworkManager.Instance.localPlayerController);
scanElementsHidden = false;
if (scannedScrapNum >= 2 && totalScrapScannedDisplayNum < totalScrapScanned)
{
addingToDisplayTotal = true;
if (addToDisplayTotalInterval <= 0.03f)
{
addToDisplayTotalInterval += Time.deltaTime;
}
else
{
addToDisplayTotalInterval = 0f;
totalScrapScannedDisplayNum = (int)Mathf.Clamp(Mathf.MoveTowards(totalScrapScannedDisplayNum, totalScrapScanned, 1500f * Time.deltaTime), 20f, 10000f);
totalValueText.text = $"${totalScrapScannedDisplayNum}";
UIAudio.PlayOneShot(addToScrapTotalSFX);
}
}
else if (addingToDisplayTotal)
{
addingToDisplayTotal = false;
UIAudio.PlayOneShot(finishAddingToTotalSFX);
}
}
else if (!scanElementsHidden)
{
scanElementsHidden = true;
DisableAllScanElements();
}
if (playerPingingScan >= -1f)
{
playerPingingScan -= Time.deltaTime;
}
for (int i = 0; i < HUDElements.Length; i++)
{
HUDElements[i].canvasGroup.alpha = Mathf.Lerp(HUDElements[i].canvasGroup.alpha, HUDElements[i].targetAlpha, 10f * Time.deltaTime);
}
if (holdFillAmount > 0f)
{
holdInteractionCanvasGroup.alpha = Mathf.Lerp(holdInteractionCanvasGroup.alpha, 1f, 20f * Time.deltaTime);
}
else
{
holdInteractionCanvasGroup.alpha = Mathf.Lerp(holdInteractionCanvasGroup.alpha, 0f, 20f * Time.deltaTime);
}
if (tutorialArrowState == 0 || !setTutorialArrow)
{
shockTutorialLeftAlpha.alpha = Mathf.Lerp(shockTutorialLeftAlpha.alpha, 0f, 17f * Time.deltaTime);
shockTutorialRightAlpha.alpha = Mathf.Lerp(shockTutorialRightAlpha.alpha, 0f, 17f * Time.deltaTime);
}
else if (tutorialArrowState == 1)
{
shockTutorialLeftAlpha.alpha = Mathf.Lerp(shockTutorialLeftAlpha.alpha, 1f, 17f * Time.deltaTime);
shockTutorialRightAlpha.alpha = Mathf.Lerp(shockTutorialRightAlpha.alpha, 0f, 17f * Time.deltaTime);
}
else
{
shockTutorialRightAlpha.alpha = Mathf.Lerp(shockTutorialRightAlpha.alpha, 1f, 17f * Time.deltaTime);
shockTutorialLeftAlpha.alpha = Mathf.Lerp(shockTutorialLeftAlpha.alpha, 0f, 17f * Time.deltaTime);
}
}
public void SetShipLeaveEarlyVotesText(int votes)
{
int num = StartOfRound.Instance.connectedPlayersAmount + 1 - StartOfRound.Instance.livingPlayers;
holdButtonToEndGameEarlyVotesText.text = $"({votes}/{num} Votes)";
}
private void UpdateScanNodes(PlayerControllerB playerScript)
{
Vector3 zero = Vector3.zero;
if (updateScanInterval <= 0f)
{
updateScanInterval = 0.25f;
AssignNewNodes(playerScript);
}
updateScanInterval -= Time.deltaTime;
bool flag = false;
for (int i = 0; i < scanElements.Length; i++)
{
if (scanNodes.Count > 0 && scanNodes.TryGetValue(scanElements[i], out var value) && value != null)
{
try
{
if (NodeIsNotVisible(value, i))
{
continue;
}
if (!scanElements[i].gameObject.activeSelf)
{
scanElements[i].gameObject.SetActive(value: true);
scanElements[i].GetComponent<Animator>().SetInteger("colorNumber", value.nodeType);
if (value.creatureScanID != -1)
{
AttemptScanNewCreature(value.creatureScanID);
}
}
goto IL_00f7;
}
catch (Exception arg)
{
Debug.LogError($"Error in updatescanNodes A: {arg}");
goto IL_00f7;
}
}
scanNodes.Remove(scanElements[i]);
scanElements[i].gameObject.SetActive(value: false);
continue;
IL_00f7:
try
{
scanElementText = scanElements[i].gameObject.GetComponentsInChildren<TextMeshProUGUI>();
if (scanElementText.Length > 1)
{
scanElementText[0].text = value.headerText;
scanElementText[1].text = value.subText;
}
if (value.nodeType == 2)
{
flag = true;
}
zero = playerScript.gameplayCamera.WorldToScreenPoint(value.transform.position);
scanElements[i].anchoredPosition = new Vector2(zero.x - 439.48f, zero.y - 244.8f);
}
catch (Exception arg2)
{
Debug.LogError($"Error in updatescannodes B: {arg2}");
}
}
try
{
if (!flag)
{
totalScrapScanned = 0;
totalScrapScannedDisplayNum = 0;
addToDisplayTotalInterval = 0.35f;
}
scanInfoAnimator.SetBool("display", scannedScrapNum >= 2 && flag);
}
catch (Exception arg3)
{
Debug.LogError($"Error in updatescannodes C: {arg3}");
}
}
private void AssignNewNodes(PlayerControllerB playerScript)
{
int num = Physics.SphereCastNonAlloc(new Ray(playerScript.gameplayCamera.transform.position + playerScript.gameplayCamera.transform.forward * 20f, playerScript.gameplayCamera.transform.forward), 20f, scanNodesHit, 80f, 4194304);
if (num > scanElements.Length)
{
num = scanElements.Length;
}
nodesOnScreen.Clear();
scannedScrapNum = 0;
if (num > scanElements.Length)
{
for (int i = 0; i < num; i++)
{
ScanNodeProperties component = scanNodesHit[i].transform.gameObject.GetComponent<ScanNodeProperties>();
if (component.nodeType == 1 || component.nodeType == 2)
{
AttemptScanNode(component, i, playerScript);
}
}
}
if (nodesOnScreen.Count < scanElements.Length)
{
for (int j = 0; j < num; j++)
{
ScanNodeProperties component = scanNodesHit[j].transform.gameObject.GetComponent<ScanNodeProperties>();
AttemptScanNode(component, j, playerScript);
}
}
}
private void AttemptScanNode(ScanNodeProperties node, int i, PlayerControllerB playerScript)
{
if (MeetsScanNodeRequirements(node, playerScript))
{
if (node.nodeType == 2)
{
scannedScrapNum++;
}
if (!nodesOnScreen.Contains(node))
{
nodesOnScreen.Add(node);
}
if (playerPingingScan >= 0f)
{
AssignNodeToUIElement(node);
}
}
}
private bool MeetsScanNodeRequirements(ScanNodeProperties node, PlayerControllerB playerScript)
{
if (node == null)
{
return false;
}
float num = Vector3.Distance(playerScript.transform.position, node.transform.position);
if (num < (float)node.maxRange && num > (float)node.minRange)
{
if (node.requiresLineOfSight)
{
return !Physics.Linecast(playerScript.gameplayCamera.transform.position, node.transform.position, 256, QueryTriggerInteraction.Ignore);
}
return true;
}
return false;
}
private bool NodeIsNotVisible(ScanNodeProperties node, int elementIndex)
{
if (!nodesOnScreen.Contains(node))
{
if (scanNodes[scanElements[elementIndex]].nodeType == 2)
{
totalScrapScanned = Mathf.Clamp(totalScrapScanned - scanNodes[scanElements[elementIndex]].scrapValue, 0, 100000);
}
scanElements[elementIndex].gameObject.SetActive(value: false);
scanNodes.Remove(scanElements[elementIndex]);
return true;
}
return false;
}
private void AssignNodeToUIElement(ScanNodeProperties node)
{
if (scanNodes.ContainsValue(node))
{
return;
}
for (int i = 0; i < scanElements.Length; i++)
{
if (scanNodes.TryAdd(scanElements[i], node))
{
if (node.nodeType == 2)
{
totalScrapScanned += node.scrapValue;
addedToScrapCounterThisFrame = true;
}
break;
}
}
}
private void DisableAllScanElements()
{
for (int i = 0; i < scanElements.Length; i++)
{
scanElements[i].gameObject.SetActive(value: false);
totalScrapScanned = 0;
totalScrapScannedDisplayNum = 0;
}
}
private void AttemptScanNewCreature(int enemyID)
{
if (!terminalScript.scannedEnemyIDs.Contains(enemyID))
{
ScanNewCreatureServerRpc(enemyID);
}
}
[ServerRpc(RequireOwnership = false)]
public void ScanNewCreatureServerRpc(int enemyID)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(1944155956u, serverRpcParams, RpcDelivery.Reliable);
BytePacker.WriteValueBitPacked(bufferWriter, enemyID);
__endSendServerRpc(ref bufferWriter, 1944155956u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost) && !terminalScript.scannedEnemyIDs.Contains(enemyID))
{
terminalScript.scannedEnemyIDs.Add(enemyID);
terminalScript.newlyScannedEnemyIDs.Add(enemyID);
DisplayGlobalNotification("New creature data sent to terminal!");
ScanNewCreatureClientRpc(enemyID);
}
}
}
[ClientRpc]
public void ScanNewCreatureClientRpc(int enemyID)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(3039261141u, clientRpcParams, RpcDelivery.Reliable);
BytePacker.WriteValueBitPacked(bufferWriter, enemyID);
__endSendClientRpc(ref bufferWriter, 3039261141u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !terminalScript.scannedEnemyIDs.Contains(enemyID))
{
terminalScript.scannedEnemyIDs.Add(enemyID);
terminalScript.newlyScannedEnemyIDs.Add(enemyID);
DisplayGlobalNotification("New creature data sent to terminal!");
}
}
}
[ServerRpc(RequireOwnership = false)]
public void GetNewStoryLogServerRpc(int logID)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(3153465849u, serverRpcParams, RpcDelivery.Reliable);
BytePacker.WriteValueBitPacked(bufferWriter, logID);
__endSendServerRpc(ref bufferWriter, 3153465849u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost) && !terminalScript.unlockedStoryLogs.Contains(logID))
{
terminalScript.unlockedStoryLogs.Add(logID);
terminalScript.newlyUnlockedStoryLogs.Add(logID);
DisplayGlobalNotification("Found journal entry: '" + terminalScript.logEntryFiles[logID].creatureName);
GetNewStoryLogClientRpc(logID);
}
}
}
[ClientRpc]
public void GetNewStoryLogClientRpc(int logID)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(2416035003u, clientRpcParams, RpcDelivery.Reliable);
BytePacker.WriteValueBitPacked(bufferWriter, logID);
__endSendClientRpc(ref bufferWriter, 2416035003u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !terminalScript.unlockedStoryLogs.Contains(logID))
{
terminalScript.unlockedStoryLogs.Add(logID);
terminalScript.newlyUnlockedStoryLogs.Add(logID);
DisplayGlobalNotification("Found journal entry: '" + terminalScript.logEntryFiles[logID].creatureName + "'");
}
}
}
private void DisplayGlobalNotification(string displayText)
{
globalNotificationAnimator.SetTrigger("TriggerNotif");
globalNotificationText.text = displayText;
UIAudio.PlayOneShot(globalNotificationSFX);
}
public void PingHUDElement(HUDElement element, float delay = 2f, float startAlpha = 1f, float endAlpha = 0.2f)
{
if (delay == 0f && startAlpha == endAlpha)
{
element.targetAlpha = endAlpha;
return;
}
element.targetAlpha = startAlpha;
if (element.fadeCoroutine != null)
{
StopCoroutine(element.fadeCoroutine);
}
element.fadeCoroutine = StartCoroutine(FadeUIElement(element, delay, endAlpha));
}
private IEnumerator FadeUIElement(HUDElement element, float delay, float endAlpha)
{
yield return new WaitForSeconds(delay);
element.targetAlpha = endAlpha;
}
public void HideHUD(bool hide)
{
if (hudHidden != hide)
{
hudHidden = hide;
if (hide)
{
HUDAnimator.SetTrigger("hideHud");
scanInfoAnimator.SetBool("display", value: false);
}
else
{
HUDAnimator.SetTrigger("revealHud");
}
}
}
public void ReadDialogue(DialogueSegment[] dialogueArray)
{
if (readDialogueCoroutine != null)
{
StopCoroutine(readDialogueCoroutine);
}
readDialogueCoroutine = StartCoroutine(ReadOutDialogue(dialogueArray));
}
private IEnumerator ReadOutDialogue(DialogueSegment[] dialogueArray)
{
dialogueBoxAnimator.SetBool("Open", value: true);
for (int i = 0; i < dialogueArray.Length; i++)
{
dialogeBoxHeaderText.text = dialogueArray[i].speakerText;
dialogeBoxText.text = dialogueArray[i].bodyText;
dialogueBoxSFX.PlayOneShot(dialogueBleeps[UnityEngine.Random.Range(0, dialogueBleeps.Length)]);
yield return new WaitForSeconds(dialogueArray[i].waitTime);
}
dialogueBoxAnimator.SetBool("Open", value: false);
}
public void DisplayCreditsEarning(int creditsEarned, GrabbableObject[] objectsSold, int newGroupCredits)
{
Debug.Log($"Earned {creditsEarned}; sold {objectsSold.Length} items; new credits amount: {newGroupCredits}");
List<Item> list = new List<Item>();
for (int i = 0; i < objectsSold.Length; i++)
{
list.Add(objectsSold[i].itemProperties);
}
Item[] array = list.Distinct().ToArray();
string text = "";
int num = 0;
int num2 = 0;
for (int j = 0; j < array.Length; j++)
{
num = 0;
num2 = 0;
for (int k = 0; k < objectsSold.Length; k++)
{
if (objectsSold[k].itemProperties == array[j])
{
num += objectsSold[k].scrapValue;
num2++;
}
}
text += $"{array[j].itemName} (x{num2}) : {num} \n";
}
moneyRewardsListText.text = text;
moneyRewardsTotalText.text = $"TOTAL: ${creditsEarned}";
moneyRewardsAnimator.SetTrigger("showRewards");
rewardsScrollbar.value = 1f;
if (list.Count > 8)
{
if (scrollRewardTextCoroutine != null)
{
StopCoroutine(scrollRewardTextCoroutine);
}
scrollRewardTextCoroutine = StartCoroutine(scrollRewardsListText());
}
}
private IEnumerator scrollRewardsListText()
{
yield return new WaitForSeconds(0.3f);
float num = 3f;
while (num >= 0f)
{
num -= Time.deltaTime;
rewardsScrollbar.value -= Time.deltaTime / num;
}
}
public void DisplayNewDeadline(int overtimeBonus)
{
reachedProfitQuotaAnimator.SetBool("display", value: true);
newProfitQuotaText.text = "$0";
UIAudio.PlayOneShot(reachedQuotaSFX);
displayingNewQuota = true;
if (overtimeBonus < 0)
{
reachedProfitQuotaBonusText.text = "";
}
else
{
reachedProfitQuotaBonusText.text = $"Overtime bonus: ${overtimeBonus}";
}
StartCoroutine(rackUpNewQuotaText());
}
private IEnumerator rackUpNewQuotaText()
{
yield return new WaitForSeconds(3.5f);
int quotaTextAmount = 0;
while (quotaTextAmount < TimeOfDay.Instance.profitQuota)
{
quotaTextAmount = (int)Mathf.Clamp((float)quotaTextAmount + Time.deltaTime * 250f, quotaTextAmount + 3, TimeOfDay.Instance.profitQuota + 10);
newProfitQuotaText.text = "$" + quotaTextAmount;
yield return null;
}
newProfitQuotaText.text = "$" + TimeOfDay.Instance.profitQuota;
TimeOfDay.Instance.UpdateProfitQuotaCurrentTime();
UIAudio.PlayOneShot(newProfitQuotaSFX);
yield return new WaitForSeconds(1.25f);
displayingNewQuota = false;
reachedProfitQuotaAnimator.SetBool("display", value: false);
}
public void DisplayDaysLeft(int daysLeft)
{
if (daysLeft >= 0)
{
string text = ((daysLeft != 1) ? $"{daysLeft} Days Left" : $"{daysLeft} Day Left");
profitQuotaDaysLeftText.text = text;
profitQuotaDaysLeftText2.text = text;
if (daysLeft <= 1)
{
reachedProfitQuotaAnimator.SetTrigger("displayDaysLeft");
UIAudio.PlayOneShot(OneDayToMeetQuotaSFX);
}
else
{
reachedProfitQuotaAnimator.SetTrigger("displayDaysLeftCalm");
UIAudio.PlayOneShot(profitQuotaDaysLeftCalmSFX);
}
}
}
public void ShowPlayersFiredScreen(bool show)
{
playersFiredAnimator.SetBool("gameOver", show);
}
public void ShakeCamera(ScreenShakeType shakeType)
{
switch (shakeType)
{
case ScreenShakeType.Big:
playerScreenShakeAnimator.SetTrigger("bigShake");
break;
case ScreenShakeType.Small:
playerScreenShakeAnimator.SetTrigger("smallShake");
break;
case ScreenShakeType.Long:
playerScreenShakeAnimator.SetTrigger("longShake");
break;
case ScreenShakeType.VeryStrong:
playerScreenShakeAnimator.SetTrigger("veryStrongShake");
break;
}
}
[ServerRpc(RequireOwnership = false)]
public void UseSignalTranslatorServerRpc(string signalMessage)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(2436660286u, serverRpcParams, RpcDelivery.Reliable);
bool value = signalMessage != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(signalMessage);
}
__endSendServerRpc(ref bufferWriter, 2436660286u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost) && (bool)UnityEngine.Object.FindObjectOfType<SignalTranslator>() && !string.IsNullOrEmpty(signalMessage) && signalMessage.Length <= 12)
{
SignalTranslator signalTranslator = UnityEngine.Object.FindObjectOfType<SignalTranslator>();
if (!(Time.realtimeSinceStartup - signalTranslator.timeLastUsingSignalTranslator < 8f))
{
signalTranslator.timeLastUsingSignalTranslator = Time.realtimeSinceStartup;
signalTranslator.timesSendingMessage++;
UseSignalTranslatorClientRpc(signalMessage, signalTranslator.timesSendingMessage);
}
}
}
[ClientRpc]
public void UseSignalTranslatorClientRpc(string signalMessage, int timesSendingMessage)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(1255866175u, clientRpcParams, RpcDelivery.Reliable);
bool value = signalMessage != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(signalMessage);
}
BytePacker.WriteValueBitPacked(bufferWriter, timesSendingMessage);
__endSendClientRpc(ref bufferWriter, 1255866175u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost) && !string.IsNullOrEmpty(signalMessage) && (bool)UnityEngine.Object.FindObjectOfType<SignalTranslator>())
{
SignalTranslator signalTranslator = UnityEngine.Object.FindObjectOfType<SignalTranslator>();
signalTranslator.timeLastUsingSignalTranslator = Time.realtimeSinceStartup;
if (signalTranslator.signalTranslatorCoroutine != null)
{
StopCoroutine(signalTranslator.signalTranslatorCoroutine);
}
string signalMessage2 = signalMessage.Substring(0, Mathf.Min(signalMessage.Length, 10));
signalTranslator.timesSendingMessage = timesSendingMessage;
signalTranslator.signalTranslatorCoroutine = StartCoroutine(DisplaySignalTranslatorMessage(signalMessage2, timesSendingMessage, signalTranslator));
}
}
private IEnumerator DisplaySignalTranslatorMessage(string signalMessage, int seed, SignalTranslator signalTranslator)
{
System.Random signalMessageRandom = new System.Random(seed + StartOfRound.Instance.randomMapSeed);
signalTranslatorAnimator.SetBool("transmitting", value: true);
signalTranslator.localAudio.Play();
UIAudio.PlayOneShot(signalTranslator.startTransmissionSFX, 1f);
signalTranslatorText.text = "";
yield return new WaitForSeconds(1.21f);
for (int i = 0; i < signalMessage.Length; i++)
{
if (signalTranslator == null)
{
break;
}
if (!signalTranslator.gameObject.activeSelf)
{
break;
}
UIAudio.PlayOneShot(signalTranslator.typeTextClips[UnityEngine.Random.Range(0, signalTranslator.typeTextClips.Length)]);
signalTranslatorText.text += signalMessage[i];
float num = Mathf.Min((float)signalMessageRandom.Next(-1, 4) * 0.5f, 0f);
yield return new WaitForSeconds(0.7f + num);
}
if (signalTranslator != null)
{
UIAudio.PlayOneShot(signalTranslator.finishTypingSFX);
signalTranslator.localAudio.Stop();
}
yield return new WaitForSeconds(0.5f);
signalTranslatorAnimator.SetBool("transmitting", value: false);
}
public void ToggleHUD(bool enable)
{
HUDContainer.SetActive(enable);
}
public void FillChallengeResultsStats()
{
statsUIElements.challengeCollectedText.text = $"${StartOfRound.Instance.GetValueOfAllScrap(onlyScrapCollected: false)} Collected";
if (GameNetworkManager.Instance.disableSteam)
{
statsUIElements.challengeRankText.text = "---";
}
else
{
GetRankAndSubmitScore();
}
}
public async void GetRankAndSubmitScore()
{
Debug.Log("GetRankAndSubmitScore called");
if (!StartOfRound.Instance.isChallengeFile)
{
return;
}
Debug.Log("GetRankAndSubmitScore called A");
if (GameNetworkManager.Instance.currentSaveFileName != "LCChallengeFile")
{
return;
}
Debug.Log("GetRankAndSubmitScore called B");
try
{
retrievingSteamLeaderboard = true;
int weekNum = GameNetworkManager.Instance.GetWeekNumber();
Leaderboard? leaderboard = await SteamUserStats.FindOrCreateLeaderboardAsync($"challenge{weekNum}", LeaderboardSort.Descending, LeaderboardDisplay.Numeric);
Debug.Log($"Found or created leaderboard 'challenge{weekNum}'");
if (!ES3.Load("SubmittedScore", "LCChallengeFile", defaultValue: false))
{
Debug.Log("Did not submit score yet...");
LeaderboardUpdate? leaderboardUpdate;
if (StartOfRound.Instance.allPlayersDead)
{
Debug.Log("All players dead");
leaderboardUpdate = await leaderboard.Value.ReplaceScore(StartOfRound.Instance.GetValueOfAllScrap(onlyScrapCollected: false), new int[1] { 3 });
Debug.Log("Replaced score! A");
}
else if (StartOfRound.Instance.connectedPlayersAmount <= 0 && !StartOfRound.Instance.hasPlayerEnteredFactory)
{
leaderboardUpdate = await leaderboard.Value.ReplaceScore(0);
Debug.Log("Replaced score! 0");
}
else
{
leaderboardUpdate = await leaderboard.Value.ReplaceScore(StartOfRound.Instance.GetValueOfAllScrap(onlyScrapCollected: false));
Debug.Log("Replaced score! B");
}
ES3.Save("SubmittedScore", value: true, "LCChallengeFile");
if (leaderboardUpdate.HasValue && leaderboardUpdate.HasValue)
{
ES3.Save("SubmittedScore", value: true, "LCChallengeFile");
statsUIElements.challengeRankText.text = $"#{leaderboardUpdate.Value.NewGlobalRank}";
}
else
{
Debug.Log($"Updated leaderboard returned null, unable to replace score?; {!leaderboardUpdate.HasValue}");
}
}
else
{
Debug.Log("Set cannot overwrite rank");
statsUIElements.challengeRankText.text = "Can't overwrite rank!";
statsUIElements.challengeRankText.fontSize = 20f;
}
}
catch (Exception arg)
{
Debug.LogError($"Error while submitting leaderboard score: {arg}");
}
retrievingSteamLeaderboard = false;
}
public void FillEndGameStats(EndOfGameStats stats, bool isChallenge = false)
{
int num = 0;
int num2 = 0;
for (int i = 0; i < playersManager.allPlayerScripts.Length; i++)
{
PlayerControllerB playerControllerB = playersManager.allPlayerScripts[i];
statsUIElements.playerNamesText[i].text = "";
statsUIElements.playerStates[i].enabled = false;
statsUIElements.playerNotesText[i].text = "Notes: \n";
if (playerControllerB.disconnectedMidGame || playerControllerB.isPlayerDead || playerControllerB.isPlayerControlled)
{
if (playerControllerB.isPlayerDead)
{
num++;
}
else if (playerControllerB.isPlayerControlled)
{
num2++;
}
statsUIElements.playerNamesText[i].text = playersManager.allPlayerScripts[i].playerUsername;
statsUIElements.playerStates[i].enabled = true;
if (playersManager.allPlayerScripts[i].isPlayerDead)
{
if (playersManager.allPlayerScripts[i].causeOfDeath == CauseOfDeath.Abandoned)
{
statsUIElements.playerStates[i].sprite = statsUIElements.missingIcon;
}
else
{
statsUIElements.playerStates[i].sprite = statsUIElements.deceasedIcon;
}
}
else
{
statsUIElements.playerStates[i].sprite = statsUIElements.aliveIcon;
}
for (int j = 0; j < 3 && j < stats.allPlayerStats[i].playerNotes.Count; j++)
{
TextMeshProUGUI obj = statsUIElements.playerNotesText[i];
obj.text = obj.text + "* " + stats.allPlayerStats[i].playerNotes[j] + "\n";
}
}
else
{
statsUIElements.playerNotesText[i].text = "";
}
}
statsUIElements.quotaNumerator.text = RoundManager.Instance.scrapCollectedInLevel.ToString();
statsUIElements.quotaDenominator.text = RoundManager.Instance.totalScrapValueInLevel.ToString();
if (StartOfRound.Instance.allPlayersDead)
{
statsUIElements.allPlayersDeadOverlay.enabled = true;
statsUIElements.gradeLetter.text = "F";
return;
}
statsUIElements.allPlayersDeadOverlay.enabled = false;
int num3 = 0;
float num4 = (float)RoundManager.Instance.scrapCollectedInLevel / RoundManager.Instance.totalScrapValueInLevel;
if (num2 == StartOfRound.Instance.connectedPlayersAmount + 1)
{
num3++;
}
else if (num > 1)
{
num3--;
}
if (num4 >= 0.99f)
{
num3 += 2;
}
else if (num4 >= 0.6f)
{
num3++;
}
else if (num4 <= 0.25f)
{
num3--;
}
switch (num3)
{
case -1:
statsUIElements.gradeLetter.text = "D";
break;
case 0:
statsUIElements.gradeLetter.text = "C";
break;
case 1:
statsUIElements.gradeLetter.text = "B";
break;
case 2:
statsUIElements.gradeLetter.text = "A";
break;
case 3:
statsUIElements.gradeLetter.text = "S";
break;
}
}
[ServerRpc]
public void SyncAllPlayerLevelsServerRpc()
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
if (base.OwnerClientId != networkManager.LocalClientId)
{
if (networkManager.LogLevel <= Unity.Netcode.LogLevel.Normal)
{
Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!");
}
return;
}
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(2352591293u, serverRpcParams, RpcDelivery.Reliable);
__endSendServerRpc(ref bufferWriter, 2352591293u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage != __RpcExecStage.Server || (!networkManager.IsServer && !networkManager.IsHost))
{
return;
}
int[] array = new int[4];
for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++)
{
if (!StartOfRound.Instance.allPlayerScripts[i].isPlayerControlled)
{
array[i] = -1;
}
else
{
array[i] = StartOfRound.Instance.allPlayerScripts[i].playerLevelNumber;
}
}
bool[] array2 = new bool[4];
for (int j = 0; j < StartOfRound.Instance.allPlayerScripts.Length; j++)
{
if (!StartOfRound.Instance.allPlayerScripts[j].isPlayerControlled)
{
array2[j] = false;
}
else
{
array2[j] = StartOfRound.Instance.allPlayerScripts[j].playerBetaBadgeMesh.enabled;
}
}
SyncAllPlayerLevelsClientRpc(array, array2);
}
[ClientRpc]
public void SyncAllPlayerLevelsClientRpc(int[] playerLevelNumbers, bool[] playersHaveBeta)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(1570713893u, clientRpcParams, RpcDelivery.Reliable);
bool value = playerLevelNumbers != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(playerLevelNumbers, default(FastBufferWriter.ForPrimitives));
}
bool value2 = playersHaveBeta != null;
bufferWriter.WriteValueSafe(in value2, default(FastBufferWriter.ForPrimitives));
if (value2)
{
bufferWriter.WriteValueSafe(playersHaveBeta, default(FastBufferWriter.ForPrimitives));
}
__endSendClientRpc(ref bufferWriter, 1570713893u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage != __RpcExecStage.Client || (!networkManager.IsClient && !networkManager.IsHost))
{
return;
}
try
{
for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++)
{
SetLevelOfPlayer(StartOfRound.Instance.allPlayerScripts[i], playerLevelNumbers[i], playersHaveBeta[i]);
}
}
catch (Exception arg)
{
Debug.LogError($"Error while syncing player level from server: {arg}");
}
}
[ServerRpc(RequireOwnership = false)]
public void SyncPlayerLevelServerRpc(int playerId, int playerLevelIndex, bool hasBeta = false)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(1389701054u, serverRpcParams, RpcDelivery.Reliable);
BytePacker.WriteValueBitPacked(bufferWriter, playerId);
BytePacker.WriteValueBitPacked(bufferWriter, playerLevelIndex);
bufferWriter.WriteValueSafe(in hasBeta, default(FastBufferWriter.ForPrimitives));
__endSendServerRpc(ref bufferWriter, 1389701054u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
{
SyncPlayerLevelClientRpc(playerId, playerLevelIndex, hasBeta);
}
}
}
[ServerRpc(RequireOwnership = false)]
public void SyncAllPlayerLevelsServerRpc(int newPlayerLevel, int playerClientId)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(4217433937u, serverRpcParams, RpcDelivery.Reliable);
BytePacker.WriteValueBitPacked(bufferWriter, newPlayerLevel);
BytePacker.WriteValueBitPacked(bufferWriter, playerClientId);
__endSendServerRpc(ref bufferWriter, 4217433937u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage != __RpcExecStage.Server || (!networkManager.IsServer && !networkManager.IsHost))
{
return;
}
List<int> list = new List<int>();
for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++)
{
if (StartOfRound.Instance.allPlayerScripts[i].isPlayerControlled || StartOfRound.Instance.allPlayerScripts[i].isPlayerDead)
{
if (i == playerClientId)
{
list.Add(newPlayerLevel);
}
else
{
list.Add(StartOfRound.Instance.allPlayerScripts[i].playerLevelNumber);
}
}
}
SyncAllPlayerLevelsClientRpc(list.ToArray(), StartOfRound.Instance.connectedPlayersAmount);
}
[ClientRpc]
public void SyncAllPlayerLevelsClientRpc(int[] allPlayerLevels, int connectedPlayers)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(2220027482u, clientRpcParams, RpcDelivery.Reliable);
bool value = allPlayerLevels != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(allPlayerLevels, default(FastBufferWriter.ForPrimitives));
}
BytePacker.WriteValueBitPacked(bufferWriter, connectedPlayers);
__endSendClientRpc(ref bufferWriter, 2220027482u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage != __RpcExecStage.Client || (!networkManager.IsClient && !networkManager.IsHost) || StartOfRound.Instance.connectedPlayersAmount != connectedPlayers)
{
return;
}
int num = 0;
for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++)
{
if (StartOfRound.Instance.allPlayerScripts[i].isPlayerControlled || StartOfRound.Instance.allPlayerScripts[i].isPlayerDead)
{
if (StartOfRound.Instance.allPlayerScripts[i] == GameNetworkManager.Instance.localPlayerController)
{
num++;
continue;
}
SetLevelOfPlayer(StartOfRound.Instance.allPlayerScripts[i], allPlayerLevels[num], hasBeta: true);
num++;
}
}
}
[ClientRpc]
public void SyncPlayerLevelClientRpc(int playerId, int playerLevelIndex, bool hasBeta)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(1676259161u, clientRpcParams, RpcDelivery.Reliable);
BytePacker.WriteValueBitPacked(bufferWriter, playerId);
BytePacker.WriteValueBitPacked(bufferWriter, playerLevelIndex);
bufferWriter.WriteValueSafe(in hasBeta, default(FastBufferWriter.ForPrimitives));
__endSendClientRpc(ref bufferWriter, 1676259161u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage != __RpcExecStage.Client || (!networkManager.IsClient && !networkManager.IsHost))
{
return;
}
try
{
if (!(GameNetworkManager.Instance.localPlayerController == null) && (int)GameNetworkManager.Instance.localPlayerController.playerClientId != playerId)
{
if (playerLevelIndex >= playerLevels.Length)
{
Debug.LogError("Error: Player level synced in client RPC was above the max player level!");
}
else
{
SetLevelOfPlayer(StartOfRound.Instance.allPlayerScripts[playerId], playerLevelIndex, hasBeta);
}
}
}
catch (Exception arg)
{
Debug.LogError($"Error while syncing player level from client #{playerId}: {arg}");
}
}
public void SetLevelOfPlayer(PlayerControllerB playerScript, int playerLevelIndex, bool hasBeta)
{
playerScript.playerLevelNumber = playerLevelIndex;
playerScript.playerBetaBadgeMesh.enabled = hasBeta;
playerScript.playerBadgeMesh.mesh = playerLevels[playerLevelIndex].badgeMesh;
}
public void SetPlayerLevel(bool isDead, bool mostProfitable, bool allPlayersDead)
{
int num = 0;
num = ((!isDead) ? (num + 10) : (num - 3));
if (mostProfitable)
{
num += 15;
}
if (allPlayersDead)
{
num -= 5;
}
if (num > 0)
{
Debug.Log($"XP gain before scaling to scrap returned: {num}");
Debug.Log((float)RoundManager.Instance.scrapCollectedInLevel / RoundManager.Instance.totalScrapValueInLevel);
float num2 = (float)RoundManager.Instance.scrapCollectedInLevel / RoundManager.Instance.totalScrapValueInLevel;
Debug.Log(num2);
num = (int)((float)num * num2);
}
if (num == 0)
{
Debug.Log("Gained no XP");
playerLevelMeter.fillAmount = localPlayerXP / playerLevels[localPlayerLevel].XPMax;
playerLevelXPCounter.text = localPlayerXP.ToString();
playerLevelText.text = playerLevels[localPlayerLevel].levelName;
}
else
{
StartCoroutine(SetPlayerLevelSmoothly(num));
}
}
private IEnumerator SetPlayerLevelSmoothly(int XPGain)
{
float changingPlayerXP = localPlayerXP;
int changingPlayerLevel = localPlayerLevel;
int targetXPLevel = Mathf.Max(localPlayerXP + XPGain, 0);
bool conditionMet = false;
if (XPGain < 0)
{
LevellingAudio.clip = decreaseXPSFX;
}
else
{
LevellingAudio.clip = increaseXPSFX;
}
LevellingAudio.Play();
float timeAtStart = Time.realtimeSinceStartup;
while (!conditionMet && Time.realtimeSinceStartup - timeAtStart < 5f)
{
Debug.Log($"Level up timer: {Time.realtimeSinceStartup - timeAtStart}");
if (XPGain < 0)
{
changingPlayerXP -= Time.deltaTime * 15f;
if (changingPlayerXP < 0f)
{
changingPlayerXP = 0f;
}
if (changingPlayerXP <= (float)targetXPLevel)
{
conditionMet = true;
}
if (changingPlayerLevel - 1 >= 0 && changingPlayerXP < (float)playerLevels[changingPlayerLevel].XPMin)
{
changingPlayerLevel--;
UIAudio.PlayOneShot(levelDecreaseSFX);
playerLevelBoxAnimator.SetTrigger("Shake");
yield return new WaitForSeconds(0.4f);
}
}
else
{
changingPlayerXP += Time.deltaTime * 15f;
if (changingPlayerXP >= (float)targetXPLevel)
{
conditionMet = true;
}
if (changingPlayerLevel + 1 < playerLevels.Length && changingPlayerXP >= (float)playerLevels[changingPlayerLevel].XPMax)
{
changingPlayerLevel++;
UIAudio.PlayOneShot(levelIncreaseSFX);
playerLevelBoxAnimator.SetTrigger("Shake");
yield return new WaitForSeconds(0.4f);
}
}
playerLevelMeter.fillAmount = (changingPlayerXP - (float)playerLevels[changingPlayerLevel].XPMin) / (float)playerLevels[changingPlayerLevel].XPMax;
playerLevelText.text = playerLevels[changingPlayerLevel].levelName;
playerLevelXPCounter.text = $"{Mathf.RoundToInt(changingPlayerXP)} EXP";
yield return null;
}
LevellingAudio.Stop();
int num = 0;
for (int i = 0; i < playerLevels.Length; i++)
{
if (targetXPLevel >= playerLevels[i].XPMin && targetXPLevel < playerLevels[i].XPMax)
{
num = i;
break;
}
if (i == playerLevels.Length - 1)
{
num = i;
}
}
localPlayerXP = targetXPLevel;
localPlayerLevel = num;
playerLevelText.text = playerLevels[localPlayerLevel].levelName;
playerLevelXPCounter.text = $"{Mathf.RoundToInt(localPlayerXP)} EXP";
bool hasBeta = ES3.Load("playedDuringBeta", "LCGeneralSaveData", defaultValue: true);
SyncPlayerLevelServerRpc((int)GameNetworkManager.Instance.localPlayerController.playerClientId, localPlayerLevel, hasBeta);
}
public void ApplyPenalty(int playersDead, int bodiesInsured)
{
float num = 0.2f;
Terminal terminal = UnityEngine.Object.FindObjectOfType<Terminal>();
int groupCredits = terminal.groupCredits;
bodiesInsured = Mathf.Max(bodiesInsured, 0);
for (int i = 0; i < playersDead - bodiesInsured; i++)
{
terminal.groupCredits -= (int)((float)groupCredits * num);
}
for (int j = 0; j < bodiesInsured; j++)
{
terminal.groupCredits -= (int)((float)groupCredits * (num / 2.5f));
}
if (terminal.groupCredits < 0)
{
terminal.groupCredits = 0;
}
statsUIElements.penaltyAddition.text = $"{playersDead} casualties: -{num * 100f * (float)(playersDead - bodiesInsured)}%\n({bodiesInsured} bodies recovered)";
statsUIElements.penaltyTotal.text = $"DUE: ${groupCredits - terminal.groupCredits}";
Debug.Log($"New group credits after penalty: {terminal.groupCredits}");
}
public void SetQuota(int numerator, int denominator = -1)
{
HUDQuotaNumerator.text = numerator.ToString();
if (denominator != -1)
{
HUDQuotaDenominator.text = denominator.ToString();
}
}
public void AddNewScrapFoundToDisplay(GrabbableObject GObject)
{
if (itemsToBeDisplayed.Count <= 16)
{
itemsToBeDisplayed.Add(GObject);
}
}
public void DisplayNewScrapFound()
{
if (itemsToBeDisplayed.Count <= 0)
{
return;
}
if (itemsToBeDisplayed[0] == null || itemsToBeDisplayed[0].itemProperties.spawnPrefab == null)
{
itemsToBeDisplayed.Clear();
return;
}
if (itemsToBeDisplayed[0].scrapValue < 80)
{
UIAudio.PlayOneShot(displayCollectedScrapSFXSmall);
}
else
{
UIAudio.PlayOneShot(displayCollectedScrapSFX);
}
GameObject gameObject = UnityEngine.Object.Instantiate(itemsToBeDisplayed[0].itemProperties.spawnPrefab, ScrapItemBoxes[nextBoxIndex].itemObjectContainer);
UnityEngine.Object.Destroy(gameObject.GetComponent<NetworkObject>());
UnityEngine.Object.Destroy(gameObject.GetComponent<GrabbableObject>());
UnityEngine.Object.Destroy(gameObject.GetComponent<Collider>());
gameObject.transform.localPosition = Vector3.zero;
gameObject.transform.localScale = gameObject.transform.localScale * 4f;
gameObject.transform.rotation = Quaternion.Euler(itemsToBeDisplayed[0].itemProperties.restingRotation);
Renderer[] componentsInChildren = gameObject.GetComponentsInChildren<Renderer>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
if (componentsInChildren[i].gameObject.layer != 22)
{
Material[] sharedMaterials = componentsInChildren[i].sharedMaterials;
componentsInChildren[i].rendererPriority = 70;
for (int j = 0; j < sharedMaterials.Length; j++)
{
sharedMaterials[j] = hologramMaterial;
}
componentsInChildren[i].sharedMaterials = sharedMaterials;
componentsInChildren[i].gameObject.layer = 5;
}
}
ScrapItemBoxes[nextBoxIndex].itemDisplayAnimator.SetTrigger("collect");
if (itemsToBeDisplayed[0] is RagdollGrabbableObject)
{
RagdollGrabbableObject ragdollGrabbableObject = itemsToBeDisplayed[0] as RagdollGrabbableObject;
if (ragdollGrabbableObject != null && ragdollGrabbableObject.ragdoll != null)
{
ScrapItemBoxes[nextBoxIndex].headerText.text = ragdollGrabbableObject.ragdoll.playerScript.playerUsername + " collected!";
}
else
{
ScrapItemBoxes[nextBoxIndex].headerText.text = "Body collected!";
}
}
else
{
ScrapItemBoxes[nextBoxIndex].headerText.text = itemsToBeDisplayed[0].itemProperties.itemName + " collected!";
}
ScrapItemBoxes[nextBoxIndex].valueText.text = $"Value: ${itemsToBeDisplayed[0].scrapValue}";
if (boxesDisplaying > 0)
{
ScrapItemBoxes[nextBoxIndex].UIContainer.anchoredPosition = new Vector2(ScrapItemBoxes[nextBoxIndex].UIContainer.anchoredPosition.x, ScrapItemBoxes[bottomBoxIndex].UIContainer.anchoredPosition.y - 124f);
}
else
{
ScrapItemBoxes[nextBoxIndex].UIContainer.anchoredPosition = new Vector2(ScrapItemBoxes[nextBoxIndex].UIContainer.anchoredPosition.x, bottomBoxYPosition);
}
bottomBoxIndex = nextBoxIndex;
StartCoroutine(displayScrapTimer(gameObject));
playScrapDisplaySFX();
boxesDisplaying++;
nextBoxIndex = (nextBoxIndex + 1) % 3;
itemsToBeDisplayed.RemoveAt(0);
}
private IEnumerator playScrapDisplaySFX()
{
yield return new WaitForSeconds(0.05f * (float)boxesDisplaying);
}
private IEnumerator displayScrapTimer(GameObject displayingObject)
{
yield return new WaitForSeconds(3.5f);
boxesDisplaying--;
UnityEngine.Object.Destroy(displayingObject);
}
public void ChangeControlTip(int toolTipNumber, string changeTo, bool clearAllOther = false)
{
if (StartOfRound.Instance.localPlayerUsingController)
{
StringBuilder stringBuilder = new StringBuilder(changeTo);
stringBuilder.Replace("[E]", "[D-pad up]");
stringBuilder.Replace("[Q]", "[D-pad down]");
stringBuilder.Replace("[LMB]", "[Y]");
stringBuilder.Replace("[RMB]", "[R-Trigger]");
stringBuilder.Replace("[G]", "[B]");
changeTo = stringBuilder.ToString();
}
else
{
changeTo = changeTo.Replace("[RMB]", "[LMB]");
}
controlTipLines[toolTipNumber].text = changeTo;
if (clearAllOther)
{
for (int i = 0; i < controlTipLines.Length; i++)
{
if (i != toolTipNumber)
{
controlTipLines[i].text = "";
}
}
}
if (forceChangeTextCoroutine != null)
{
StopCoroutine(forceChangeTextCoroutine);
}
forceChangeTextCoroutine = StartCoroutine(ForceChangeText(controlTipLines[toolTipNumber], changeTo));
}
private IEnumerator ForceChangeText(TextMeshProUGUI textToChange, string changeTextTo)
{
for (int i = 0; i < 5; i++)
{
yield return null;
textToChange.text = changeTextTo;
}
}
public void ClearControlTips()
{
for (int i = 0; i < controlTipLines.Length; i++)
{
controlTipLines[i].text = "";
}
}
public void ChangeControlTipMultiple(string[] allLines, bool holdingItem = false, Item itemProperties = null)
{
if (holdingItem)
{
controlTipLines[0].text = "Drop " + itemProperties.itemName + " : [G]";
}
if (allLines == null)
{
return;
}
int num = 0;
if (holdingItem)
{
num = 1;
}
for (int i = 0; i < allLines.Length && i + num < controlTipLines.Length; i++)
{
string text = allLines[i];
if (StartOfRound.Instance.localPlayerUsingController)
{
StringBuilder stringBuilder = new StringBuilder(text);
stringBuilder.Replace("[E]", "[D-pad up]");
stringBuilder.Replace("[Q]", "[D-pad down]");
stringBuilder.Replace("[LMB]", "[Y]");
stringBuilder.Replace("[RMB]", "[R-Trigger]");
stringBuilder.Replace("[G]", "[B]");
text = stringBuilder.ToString();
}
else
{
text = text.Replace("[RMB]", "[LMB]");
}
controlTipLines[i + num].text = text;
}
}
public void SetDebugText(string setText)
{
debugText.text = setText;
if (StartOfRound.Instance.testRoom != null)
{
debugText.enabled = true;
}
}
public void DisplayStatusEffect(string statusEffect)
{
statusEffectAnimator.SetTrigger("IndicateStatus");
statusEffectText.text = statusEffect;
}
public void DisplayTip(string headerText, string bodyText, bool isWarning = false, bool useSave = false, string prefsKey = "LC_Tip1")
{
if (!CanTipDisplay(isWarning, useSave, prefsKey))
{
return;
}
if (useSave)
{
if (tipsPanelCoroutine != null)
{
StopCoroutine(tipsPanelCoroutine);
}
tipsPanelCoroutine = StartCoroutine(TipsPanelTimer(prefsKey));
}
tipsPanelHeader.text = headerText;
tipsPanelBody.text = bodyText;
if (isWarning)
{
tipsPanelAnimator.SetTrigger("TriggerWarning");
RoundManager.PlayRandomClip(UIAudio, warningSFX, randomize: false);
}
else
{
tipsPanelAnimator.SetTrigger("TriggerHint");
RoundManager.PlayRandomClip(UIAudio, tipsSFX, randomize: false);
}
}
private void DisplaySpectatorVoteTip()
{
if (displayedSpectatorAFKTip)
{
return;
}
bool flag = false;
for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++)
{
if (!StartOfRound.Instance.allPlayerScripts[i].isPlayerDead && StartOfRound.Instance.allPlayerScripts[i].timeSincePlayerMoving < 10f)
{
flag = true;
}
}
if (!flag)
{
noLivingPlayersAtKeyboardTimer += Time.deltaTime;
if (noLivingPlayersAtKeyboardTimer > 12f)
{
if (StartOfRound.Instance.localPlayerUsingController)
{
DisplaySpectatorTip("TIP!: Hold [R-Trigger] to vote for the autopilot ship to leave early.");
}
else
{
DisplaySpectatorTip("TIP!: Hold [RMB] to vote for the autopilot ship to leave early.");
}
}
}
else
{
noLivingPlayersAtKeyboardTimer = 0f;
}
}
private void DisplaySpectatorTip(string tipText)
{
displayedSpectatorAFKTip = true;
spectatorTipText.text = tipText;
if (!spectatorTipText.enabled)
{
StartCoroutine(displayTipTextTimer());
}
}
private IEnumerator displayTipTextTimer()
{
UIAudio.PlayOneShot(tipsSFX[0], 1f);
spectatorTipText.enabled = true;
yield return new WaitForSeconds(7f);
spectatorTipText.enabled = false;
}
private bool CanTipDisplay(bool isWarning, bool useSave, string prefsKey)
{
if (useSave)
{
return !ES3.Load(prefsKey, "LCGeneralSaveData", defaultValue: false);
}
if (tipsPanelCoroutine != null)
{
if (isWarning && !isDisplayingWarning)
{
return true;
}
return false;
}
return true;
}
private IEnumerator TipsPanelTimer(string prefsKey)
{
yield return new WaitForSeconds(5f);
ES3.Save(prefsKey, value: true, "LCGeneralSaveData");
}
public string SetClock(float timeNormalized, float numberOfHours, bool createNewLine = true)
{
int num = (int)(timeNormalized * (60f * numberOfHours)) + 360;
int num2 = (int)Mathf.Floor(num / 60);
if (!createNewLine)
{
newLine = " ";
}
else
{
newLine = "\n";
}
amPM = newLine + "AM";
if (num2 >= 24)
{
clockNumber.text = "12:00 " + newLine + " AM";
return "12:00\nAM";
}
if (num2 < 12)
{
amPM = newLine + "AM";
}
else
{
amPM = newLine + "PM";
}
if (num2 > 12)
{
num2 %= 12;
}
int num3 = num % 60;
string text = $"{num2:00}:{num3:00}".TrimStart('0') + amPM;
clockNumber.text = text;
return text;
}
public void SetClockIcon(DayMode dayMode)
{
clockIcon.sprite = clockIcons[(int)dayMode];
}
public void SetClockVisible(bool visible)
{
if (visible)
{
Clock.targetAlpha = 1f;
}
else
{
Clock.targetAlpha = 0f;
}
}
public void TriggerAlarmHornEffect()
{
if (!(UnityEngine.Object.FindObjectOfType<AlarmButton>() == null))
{
AlarmHornServerRpc();
}
}
[ServerRpc]
public void AlarmHornServerRpc()
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
if (base.OwnerClientId != networkManager.LocalClientId)
{
if (networkManager.LogLevel <= Unity.Netcode.LogLevel.Normal)
{
Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!");
}
return;
}
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(1616150480u, serverRpcParams, RpcDelivery.Reliable);
__endSendServerRpc(ref bufferWriter, 1616150480u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost))
{
AlarmButton alarmButton = UnityEngine.Object.FindObjectOfType<AlarmButton>();
if (!(alarmButton == null) && !(alarmButton.timeSincePushing < 1f))
{
alarmButton.timeSincePushing = 0f;
AlarmHornClientRpc();
}
}
}
[ClientRpc]
public void AlarmHornClientRpc()
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(840104050u, clientRpcParams, RpcDelivery.Reliable);
__endSendClientRpc(ref bufferWriter, 840104050u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
{
AlarmButton alarmButton = UnityEngine.Object.FindObjectOfType<AlarmButton>();
if (!(alarmButton == null))
{
alarmButton.timeSincePushing = 0f;
alarmHornEffect.SetTrigger("triggerAlarm");
UIAudio.PlayOneShot(shipAlarmHornSFX, 1f);
}
}
}
public void RadiationWarningHUD()
{
radiationGraphicAnimator.SetTrigger("RadiationWarning");
UIAudio.PlayOneShot(radiationWarningAudio, 1f);
}
public void UpdateInstabilityPercentage(int percentage)
{
if (previousInstability != percentage)
{
UpdateInstabilityClientRpc(percentage);
}
}
[ClientRpc]
public void UpdateInstabilityClientRpc(int percentage)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
if (__rpc_exec_stage != __RpcExecStage.Client && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams clientRpcParams = default(ClientRpcParams);
FastBufferWriter bufferWriter = __beginSendClientRpc(551948140u, clientRpcParams, RpcDelivery.Reliable);
BytePacker.WriteValueBitPacked(bufferWriter, percentage);
__endSendClientRpc(ref bufferWriter, 551948140u, clientRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Client && (networkManager.IsClient || networkManager.IsHost))
{
instabilityCounterNumber.text = $"{percentage}%";
PingHUDElement(InstabilityCounter, 2f, 1f, 0.7f);
}
}
}
public void SetTutorialArrow(int state)
{
tutorialArrowState = state;
}
public bool HoldInteractionFill(float timeToHold, float speedMultiplier = 1f)
{
if (timeToHold == -1f)
{
return false;
}
holdFillAmount += Time.deltaTime * speedMultiplier;
holdInteractionFillAmount.fillAmount = holdFillAmount / timeToHold;
if (holdFillAmount > timeToHold)
{
holdFillAmount = 0f;
return true;
}
return false;
}
public void ToggleErrorConsole()
{
errorLogPanel.SetActive(!Instance.errorLogPanel.activeSelf);
}
[ServerRpc(RequireOwnership = false)]
public void SendErrorMessageServerRpc(string errorMessage, int sentByPlayerNum)
{
NetworkManager networkManager = base.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (__rpc_exec_stage != __RpcExecStage.Server && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams serverRpcParams = default(ServerRpcParams);
FastBufferWriter bufferWriter = __beginSendServerRpc(1043384750u, serverRpcParams, RpcDelivery.Reliable);
bool value = errorMessage != null;
bufferWriter.WriteValueSafe(in value, default(FastBufferWriter.ForPrimitives));
if (value)
{
bufferWriter.WriteValueSafe(errorMessage);
}
BytePacker.WriteValueBitPacked(bufferWriter, sentByPlayerNum);
__endSendServerRpc(ref bufferWriter, 1043384750u, serverRpcParams, RpcDelivery.Reliable);
}
if (__rpc_exec_stage == __RpcExecStage.Server && (networkManager.IsServer || networkManager.IsHost) && GameNetworkManager.Instance.SendExceptionsToServer && !(Instance == null))
{
AddToErrorLog(errorMessage, sentByPlayerNum);
}
}
public void AddToErrorLog(string errorMessage, int sentByPlayerNum)
{
if (!(errorMessage == previousErrorReceived))
{
previousErrorReceived = errorMessage;
string playerUsername = StartOfRound.Instance.allPlayerScripts[sentByPlayerNum].playerUsername;
playerUsername = playerUsername.Substring(0, Mathf.Clamp(5, 1, playerUsername.Length));
Instance.errorLogText.text = (Instance.errorLogText.text + "\n\n" + playerUsername + ": " + errorMessage).Substring(Mathf.Max(0, Instance.errorLogText.text.Length - 1000));
}
}
protected override void __initializeVariables()
{
base.__initializeVariables();
}
[RuntimeInitializeOnLoadMethod]
internal static void InitializeRPCS_HUDManager()
{
NetworkManager.__rpc_func_table.Add(2930587515u, __rpc_handler_2930587515);
NetworkManager.__rpc_func_table.Add(168728662u, __rpc_handler_168728662);
NetworkManager.__rpc_func_table.Add(2787681914u, __rpc_handler_2787681914);
NetworkManager.__rpc_func_table.Add(1568596901u, __rpc_handler_1568596901);
NetworkManager.__rpc_func_table.Add(1944155956u, __rpc_handler_1944155956);
NetworkManager.__rpc_func_table.Add(3039261141u, __rpc_handler_3039261141);
NetworkManager.__rpc_func_table.Add(3153465849u, __rpc_handler_3153465849);
NetworkManager.__rpc_func_table.Add(2416035003u, __rpc_handler_2416035003);
NetworkManager.__rpc_func_table.Add(2436660286u, __rpc_handler_2436660286);
NetworkManager.__rpc_func_table.Add(1255866175u, __rpc_handler_1255866175);
NetworkManager.__rpc_func_table.Add(2352591293u, __rpc_handler_2352591293);
NetworkManager.__rpc_func_table.Add(1570713893u, __rpc_handler_1570713893);
NetworkManager.__rpc_func_table.Add(1389701054u, __rpc_handler_1389701054);
NetworkManager.__rpc_func_table.Add(4217433937u, __rpc_handler_4217433937);
NetworkManager.__rpc_func_table.Add(2220027482u, __rpc_handler_2220027482);
NetworkManager.__rpc_func_table.Add(1676259161u, __rpc_handler_1676259161);
NetworkManager.__rpc_func_table.Add(1616150480u, __rpc_handler_1616150480);
NetworkManager.__rpc_func_table.Add(840104050u, __rpc_handler_840104050);
NetworkManager.__rpc_func_table.Add(551948140u, __rpc_handler_551948140);
NetworkManager.__rpc_func_table.Add(1043384750u, __rpc_handler_1043384750);
}
private static void __rpc_handler_2930587515(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
string s = null;
if (value)
{
reader.ReadValueSafe(out s, oneByteChars: false);
}
ByteUnpacker.ReadValueBitPacked(reader, out int value2);
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).AddPlayerChatMessageServerRpc(s, value2);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_168728662(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
string s = null;
if (value)
{
reader.ReadValueSafe(out s, oneByteChars: false);
}
ByteUnpacker.ReadValueBitPacked(reader, out int value2);
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).AddPlayerChatMessageClientRpc(s, value2);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_2787681914(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
string s = null;
if (value)
{
reader.ReadValueSafe(out s, oneByteChars: false);
}
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).AddTextMessageServerRpc(s);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_1568596901(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
string s = null;
if (value)
{
reader.ReadValueSafe(out s, oneByteChars: false);
}
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).AddTextMessageClientRpc(s);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_1944155956(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
ByteUnpacker.ReadValueBitPacked(reader, out int value);
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).ScanNewCreatureServerRpc(value);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_3039261141(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
ByteUnpacker.ReadValueBitPacked(reader, out int value);
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).ScanNewCreatureClientRpc(value);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_3153465849(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
ByteUnpacker.ReadValueBitPacked(reader, out int value);
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).GetNewStoryLogServerRpc(value);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_2416035003(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
ByteUnpacker.ReadValueBitPacked(reader, out int value);
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).GetNewStoryLogClientRpc(value);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_2436660286(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
string s = null;
if (value)
{
reader.ReadValueSafe(out s, oneByteChars: false);
}
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).UseSignalTranslatorServerRpc(s);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_1255866175(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
string s = null;
if (value)
{
reader.ReadValueSafe(out s, oneByteChars: false);
}
ByteUnpacker.ReadValueBitPacked(reader, out int value2);
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).UseSignalTranslatorClientRpc(s, value2);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_2352591293(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
{
if (networkManager.LogLevel <= Unity.Netcode.LogLevel.Normal)
{
Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!");
}
}
else
{
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).SyncAllPlayerLevelsServerRpc();
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_1570713893(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
int[] value2 = null;
if (value)
{
reader.ReadValueSafe(out value2, default(FastBufferWriter.ForPrimitives));
}
reader.ReadValueSafe(out bool value3, default(FastBufferWriter.ForPrimitives));
bool[] value4 = null;
if (value3)
{
reader.ReadValueSafe(out value4, default(FastBufferWriter.ForPrimitives));
}
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).SyncAllPlayerLevelsClientRpc(value2, value4);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_1389701054(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
ByteUnpacker.ReadValueBitPacked(reader, out int value);
ByteUnpacker.ReadValueBitPacked(reader, out int value2);
reader.ReadValueSafe(out bool value3, default(FastBufferWriter.ForPrimitives));
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).SyncPlayerLevelServerRpc(value, value2, value3);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_4217433937(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
ByteUnpacker.ReadValueBitPacked(reader, out int value);
ByteUnpacker.ReadValueBitPacked(reader, out int value2);
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).SyncAllPlayerLevelsServerRpc(value, value2);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_2220027482(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
int[] value2 = null;
if (value)
{
reader.ReadValueSafe(out value2, default(FastBufferWriter.ForPrimitives));
}
ByteUnpacker.ReadValueBitPacked(reader, out int value3);
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).SyncAllPlayerLevelsClientRpc(value2, value3);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_1676259161(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
ByteUnpacker.ReadValueBitPacked(reader, out int value);
ByteUnpacker.ReadValueBitPacked(reader, out int value2);
reader.ReadValueSafe(out bool value3, default(FastBufferWriter.ForPrimitives));
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).SyncPlayerLevelClientRpc(value, value2, value3);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_1616150480(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager == null || !networkManager.IsListening)
{
return;
}
if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
{
if (networkManager.LogLevel <= Unity.Netcode.LogLevel.Normal)
{
Debug.LogError("Only the owner can invoke a ServerRpc that requires ownership!");
}
}
else
{
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).AlarmHornServerRpc();
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_840104050(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).AlarmHornClientRpc();
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_551948140(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
ByteUnpacker.ReadValueBitPacked(reader, out int value);
target.__rpc_exec_stage = __RpcExecStage.Client;
((HUDManager)target).UpdateInstabilityClientRpc(value);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
private static void __rpc_handler_1043384750(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
NetworkManager networkManager = target.NetworkManager;
if ((object)networkManager != null && networkManager.IsListening)
{
reader.ReadValueSafe(out bool value, default(FastBufferWriter.ForPrimitives));
string s = null;
if (value)
{
reader.ReadValueSafe(out s, oneByteChars: false);
}
ByteUnpacker.ReadValueBitPacked(reader, out int value2);
target.__rpc_exec_stage = __RpcExecStage.Server;
((HUDManager)target).SendErrorMessageServerRpc(s, value2);
target.__rpc_exec_stage = __RpcExecStage.None;
}
}
protected internal override string __getTypeName()
{
return "HUDManager";
}
}