using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using InControl;
using Jotunn.Utils;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using Sonigon;
using TMPro;
using TabInfo.Extensions;
using TabInfo.Utils;
using UnboundLib;
using UnboundLib.Extensions;
using UnboundLib.GameModes;
using UnboundLib.Utils;
using UnboundLib.Utils.UI;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace ItemShops.Patches
{
[HarmonyPatch(typeof(EscapeMenuHandler))]
internal class EscMenu_Patch
{
[HarmonyPrefix]
[HarmonyPatch("ToggleEsc")]
private static bool CheckShopStatus()
{
bool isLockingInput = TabInfoManager.IsLockingInput;
if (isLockingInput)
{
TabFrame tabFrame = TabInfoManager.TabFrame;
((Component)TabInfoManager.TabFrame).gameObject.SetActive(false);
TabInfoManager.TabFrame.toggled = false;
}
return !isLockingInput;
}
}
}
namespace TabInfo
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.willuwontu.rounds.tabinfo", "Tab Info", "0.0.4")]
[BepInProcess("Rounds.exe")]
public class TabInfo : BaseUnityPlugin
{
public static class WaitFor
{
public static IEnumerator Frames(int frameCount)
{
if (frameCount <= 0)
{
throw new ArgumentOutOfRangeException("frameCount", "Cannot wait for less that 1 frame");
}
while (frameCount > 0)
{
frameCount--;
yield return null;
}
}
}
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static UnityAction <>9__24_0;
public static UnityAction <>9__28_0;
public static Func<AudioClip, bool> <>9__28_3;
public static Func<AudioClip, bool> <>9__28_4;
internal void <NewGUI>b__24_0()
{
}
internal void <Start>b__28_0()
{
}
internal bool <Start>b__28_3(AudioClip clip)
{
return ((Object)clip).name.Contains("UI_Button_Click");
}
internal bool <Start>b__28_4(AudioClip clip)
{
return ((Object)clip).name.Contains("UI_Button_Hover");
}
}
private const string ModId = "com.willuwontu.rounds.tabinfo";
private const string ModName = "Tab Info";
public const string Version = "0.0.4";
public const string ModInitials = "TI";
public List<AudioClip> click;
public List<AudioClip> hover;
public List<SoundEvent> clickSounds = new List<SoundEvent>();
public List<SoundEvent> hoverSounds = new List<SoundEvent>();
private bool ready = false;
public static TabInfo instance { get; private set; }
public AssetBundle Assets { get; private set; }
private static void CycleArt()
{
ArtHandler.instance.NextArt();
ArtHandler.instance.NextArt();
}
internal static string ConfigKey(string name)
{
return "com.willuwontu.rounds.tabinfo_" + name.ToLower();
}
internal static bool GetBool(StatCategory category, bool defaultValue = true)
{
return PlayerPrefs.GetInt(ConfigKey(category.name), defaultValue ? 1 : 0) == 1;
}
internal static void SetBool(StatCategory category, bool value)
{
PlayerPrefs.SetInt(ConfigKey(category.name), value ? 1 : 0);
}
internal static bool GetBool(Stat stat, bool defaultValue = true)
{
return PlayerPrefs.GetInt(ConfigKey(stat.category.name + " " + stat.name), defaultValue ? 1 : 0) == 1;
}
internal static void SetBool(Stat stat, bool value)
{
PlayerPrefs.SetInt(ConfigKey(stat.category.name + " " + stat.name), value ? 1 : 0);
}
private IEnumerator SetupGUI(GameObject menu)
{
yield return (object)new WaitUntil((Func<bool>)(() => ready));
yield return (object)new WaitForSecondsRealtime(0.1f);
NewGUI(menu);
}
private void NewGUI(GameObject menu)
{
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Expected O, but got Unknown
TextMeshProUGUI val = default(TextMeshProUGUI);
MenuHandler.CreateText("Tab Info", menu, ref val, 90, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateText("Categories", menu, ref val, 75, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateText(" ", menu, ref val, 60, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
foreach (StatCategory value in TabInfoManager.Categories.Values)
{
string name = value.name;
object obj = <>c.<>9__24_0;
if (obj == null)
{
UnityAction val2 = delegate
{
};
<>c.<>9__24_0 = val2;
obj = (object)val2;
}
ModGUI(MenuHandler.CreateMenu(name, (UnityAction)obj, menu, 60, true, true, ((Component)menu.transform.parent).gameObject, true, -1), value);
}
}
private void ModGUI(GameObject menu, StatCategory category)
{
TextMeshProUGUI val = default(TextMeshProUGUI);
MenuHandler.CreateText(category.name.ToUpper(), menu, ref val, 90, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateText(" ", menu, ref val, 30, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateText("Toggle Category", menu, ref val, 60, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateText(" ", menu, ref val, 30, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateToggle(GetBool(category), category.name ?? "", menu, (UnityAction<bool>)ChangeCategoryToggleValue, 60, true, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateText(" ", menu, ref val, 30, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateText("Toggle Stats ", menu, ref val, 60, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
MenuHandler.CreateText(" ", menu, ref val, 30, false, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
foreach (Stat value in category.Stats.Values)
{
ModGUI(menu, value);
}
void ChangeCategoryToggleValue(bool value)
{
SetBool(category, value);
CycleArt();
}
}
private void ModGUI(GameObject menu, Stat stat)
{
MenuHandler.CreateToggle(GetBool(stat), stat.category.name + " " + stat.name, menu, (UnityAction<bool>)ChangeStatToggleValue, 60, true, (Color?)null, (TMP_FontAsset)null, (Material)null, (TextAlignmentOptions?)null);
void ChangeStatToggleValue(bool value)
{
SetBool(stat, value);
CycleArt();
}
}
private void Awake()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
Harmony val = new Harmony("com.willuwontu.rounds.tabinfo");
val.PatchAll();
}
private void Start()
{
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Expected O, but got Unknown
//IL_028a: Unknown result type (might be due to invalid IL or missing references)
//IL_0488: Unknown result type (might be due to invalid IL or missing references)
//IL_0492: Expected O, but got Unknown
//IL_049b: Unknown result type (might be due to invalid IL or missing references)
//IL_04a5: Expected O, but got Unknown
Unbound.RegisterClientSideMod("com.willuwontu.rounds.tabinfo");
Unbound.RegisterCredits("Tab Info", new string[1] { "willuwontu" }, new string[2] { "github", "Ko-Fi" }, new string[2] { "https://github.com/willuwontu/wills-wacky-cards", "https://ko-fi.com/willuwontu" });
object obj = <>c.<>9__28_0;
if (obj == null)
{
UnityAction val = delegate
{
};
<>c.<>9__28_0 = val;
obj = (object)val;
}
Unbound.RegisterMenu("Tab Info", (UnityAction)obj, (Action<GameObject>)delegate(GameObject menu)
{
((MonoBehaviour)Unbound.Instance).StartCoroutine(SetupGUI(menu));
}, (GameObject)null, false);
ExtensionMethods.ExecuteAfterFrames((MonoBehaviour)(object)Unbound.Instance, 60, (Action)delegate
{
ready = true;
});
instance = this;
Assets = AssetUtils.LoadAssetBundleFromResources("tabinfo", typeof(TabInfo).Assembly);
click = (from clip in Assets.LoadAllAssets<AudioClip>().ToList()
where ((Object)clip).name.Contains("UI_Button_Click")
select clip).ToList();
hover = (from clip in Assets.LoadAllAssets<AudioClip>().ToList()
where ((Object)clip).name.Contains("UI_Button_Hover")
select clip).ToList();
try
{
foreach (AudioClip item in click)
{
SoundContainer val2 = ScriptableObject.CreateInstance<SoundContainer>();
val2.setting.volumeIntensityEnable = true;
val2.setting.volumeDecibel = 10f;
val2.audioClip[0] = item;
SoundEvent val3 = ScriptableObject.CreateInstance<SoundEvent>();
val3.soundContainerArray[0] = val2;
clickSounds.Add(val3);
}
foreach (AudioClip item2 in hover)
{
SoundContainer val4 = ScriptableObject.CreateInstance<SoundContainer>();
val4.setting.volumeIntensityEnable = true;
val4.setting.volumeDecibel = 10f;
val4.audioClip[0] = item2;
SoundEvent val5 = ScriptableObject.CreateInstance<SoundEvent>();
val5.soundContainerArray[0] = val4;
hoverSounds.Add(val5);
}
}
catch (Exception ex)
{
Debug.LogException(ex);
}
TabInfoManager.canvas = Object.Instantiate<GameObject>(instance.Assets.LoadAsset<GameObject>("Info Canvas"));
RectTransform component = TabInfoManager.canvas.GetComponent<RectTransform>();
((Transform)component).localScale = Vector3.one;
TabInfoManager.canvas.GetComponent<Canvas>().worldCamera = Camera.current;
Object.DontDestroyOnLoad((Object)(object)TabInfoManager.canvas);
TabInfoManager.canvas.AddComponent<TabListener>();
TabInfoManager.tabFrameTemplate = instance.Assets.LoadAsset<GameObject>("Info Container");
TabInfoManager.teamFrameTemplate = instance.Assets.LoadAsset<GameObject>("Team Frame");
TabInfoManager.playerFrameTemplate = instance.Assets.LoadAsset<GameObject>("Player Frame");
TabInfoManager.cardButtonTemplate = instance.Assets.LoadAsset<GameObject>("Card Button");
TabInfoManager.statSectionTemplate = instance.Assets.LoadAsset<GameObject>("Stat Section");
TabInfoManager.statObjectTemplate = instance.Assets.LoadAsset<GameObject>("Stat Object");
TabInfoManager.cardHolderTemplate = instance.Assets.LoadAsset<GameObject>("Card Holder");
TabFrame tabFrame = TabInfoManager.TabFrame;
GameModeManager.AddHook("GameEnd", (Func<IGameModeHandler, IEnumerator>)GameEnd);
GameModeManager.AddHook("GameStart", (Func<IGameModeHandler, IEnumerator>)GameStart);
GameModeManager.AddHook("BattleStart", (Func<IGameModeHandler, IEnumerator>)BattleStart);
GameModeManager.AddHook("PlayerPickStart", (Func<IGameModeHandler, IEnumerator>)PlayerPickStart);
GameModeManager.AddHook("PlayerPickEnd", (Func<IGameModeHandler, IEnumerator>)PlayerPickEnd);
GameModeManager.AddHook("PointStart", (Func<IGameModeHandler, IEnumerator>)PointStart);
GameModeManager.AddHook("PointEnd", (Func<IGameModeHandler, IEnumerator>)PointEnd);
GameModeManager.AddHook("PickStart", (Func<IGameModeHandler, IEnumerator>)PickStart);
GameModeManager.AddHook("PickEnd", (Func<IGameModeHandler, IEnumerator>)PickEnd);
GameModeManager.AddHook("RoundStart", (Func<IGameModeHandler, IEnumerator>)RoundStart);
GameModeManager.AddHook("RoundEnd", (Func<IGameModeHandler, IEnumerator>)RoundEnd);
NetworkEventCallbacks val6 = ((Component)this).gameObject.AddComponent<NetworkEventCallbacks>();
val6.OnJoinedRoomEvent += new NetworkEvent(OnJoinedRoomAction);
val6.OnLeftRoomEvent += new NetworkEvent(OnLeftRoomAction);
}
private void OnJoinedRoomAction()
{
}
private void OnLeftRoomAction()
{
TabFrame tabFrame = TabInfoManager.TabFrame;
TabInfoManager.TabFrame.toggled = false;
((Component)TabInfoManager.TabFrame).gameObject.SetActive(TabInfoManager.TabFrame.toggled);
}
private IEnumerator RoundStart(IGameModeHandler gm)
{
TabInfoManager.CurrentRound++;
TabInfoManager.CurrentPoint = 0;
yield break;
}
private IEnumerator RoundEnd(IGameModeHandler gm)
{
yield break;
}
private IEnumerator PointStart(IGameModeHandler gm)
{
TabInfoManager.CurrentPoint++;
yield break;
}
private IEnumerator PointEnd(IGameModeHandler gm)
{
yield break;
}
private IEnumerator PlayerPickStart(IGameModeHandler gm)
{
yield break;
}
private IEnumerator PlayerPickEnd(IGameModeHandler gm)
{
yield break;
}
private IEnumerator PickStart(IGameModeHandler gm)
{
yield break;
}
private IEnumerator PickEnd(IGameModeHandler gm)
{
yield break;
}
private IEnumerator BattleStart(IGameModeHandler gm)
{
yield break;
}
private IEnumerator GameStart(IGameModeHandler gm)
{
_ = TabInfoManager.TabFrame;
TabInfoManager.TabFrame.toggled = false;
((Component)TabInfoManager.TabFrame).gameObject.SetActive(TabInfoManager.TabFrame.toggled);
TabInfoManager.CurrentRound = 0;
TabInfoManager.CurrentPoint = 0;
yield break;
}
private IEnumerator GameEnd(IGameModeHandler gm)
{
yield break;
}
private void DestroyAll<T>() where T : Object
{
T[] array = Object.FindObjectsOfType<T>();
for (int num = array.Length - 1; num >= 0; num--)
{
Debug.Log((object)$"Attempting to Destroy {((object)array[num]).GetType().Name} number {num}");
Object.Destroy((Object)(object)array[num]);
}
}
}
}
namespace TabInfo.Utils
{
public class ColorManager
{
public static float RelativeLuminance(Color color)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
float num = ColorPartValue(color.r);
float num2 = ColorPartValue(color.g);
float num3 = ColorPartValue(color.b);
return 0.2126f * num + 0.7152f * num2 + 0.0722f * num3;
static float ColorPartValue(float part)
{
return (part <= 0.03928f) ? (part / 12.92f) : Mathf.Pow((part + 0.055f) / 1.055f, 2.4f);
}
}
public static float ColorContrast(Color a, Color b)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
float num = 0f;
float num2 = RelativeLuminance(a) + 0.05f;
float num3 = RelativeLuminance(b) + 0.05f;
return Mathf.Max(num2, num3) / Mathf.Min(num2, num3);
}
public static Color[] GetContrastingColors(Color backgroundColor, Color textColor, float ratio)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_016b: Unknown result type (might be due to invalid IL or missing references)
//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
//IL_0188: Unknown result type (might be due to invalid IL or missing references)
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_019f: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
Color[] array = (Color[])(object)new Color[2];
float num = RelativeLuminance(backgroundColor);
float num2 = RelativeLuminance(textColor);
if (num2 > num)
{
array[0] = textColor;
array[1] = backgroundColor;
}
else
{
array[1] = textColor;
array[0] = backgroundColor;
}
if (!(ColorContrast(backgroundColor, textColor) < ratio))
{
return array;
}
float num3 = default(float);
float num4 = default(float);
float num5 = default(float);
Color.RGBToHSV(array[0], ref num3, ref num4, ref num5);
float num6 = default(float);
float num7 = default(float);
float num8 = default(float);
Color.RGBToHSV(array[1], ref num6, ref num7, ref num8);
if (ColorContrast(Color.HSVToRGB(num6, num7, 0f), Color.HSVToRGB(num3, num4, 1f)) >= ratio)
{
float num9 = 1f - num5;
float num10 = num8;
float[] array2 = new float[9] { 0.12f, 0.1f, 0.08f, 0.05f, 0.04f, 0.03f, 0.02f, 0.01f, 0.005f };
int i = 0;
float num11 = num9 / (num9 + num10);
float num12 = num10 / (num9 + num10);
while (ColorContrast(Color.HSVToRGB(num3, num4, num5), Color.HSVToRGB(num6, num7, num8)) < ratio)
{
for (; ColorContrast(Color.HSVToRGB(num3, num4, num5 + num11 * array2[i]), Color.HSVToRGB(num6, num7, num8 - num12 * array2[i])) > ratio && i < array2.Length - 1; i++)
{
}
num5 += num11 * array2[i];
num8 -= num12 * array2[i];
}
array[0] = Color.HSVToRGB(num3, num4, num5);
array[1] = Color.HSVToRGB(num6, num7, num8);
}
else
{
array[0] = Color.white;
while (ColorContrast(Color.white, Color.HSVToRGB(num6, num7, num8)) < ratio)
{
num8 -= 0.01f;
}
array[1] = Color.HSVToRGB(num6, num7, num8);
}
return array;
}
}
public class PlayerCardBar : MonoBehaviour
{
public PlayerFrame playerFrame;
private Dictionary<int, PlayerCardButton> cardButtons = new Dictionary<int, PlayerCardButton>();
private void Start()
{
for (int i = 0; i < playerFrame.player.data.currentCards.Count(); i++)
{
CardInfo card = playerFrame.player.data.currentCards[i];
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.cardButtonTemplate, ((Component)this).transform);
PlayerCardButton playerCardButton = val.AddComponent<PlayerCardButton>();
playerCardButton.card = card;
playerCardButton.cardBar = this;
((TMP_Text)playerCardButton.Text).text = playerCardButton.CardInitials(card);
cardButtons.Add(i, playerCardButton);
}
}
private void Update()
{
if (cardButtons.Count() < playerFrame.player.data.currentCards.Count())
{
for (int i = cardButtons.Count(); i < playerFrame.player.data.currentCards.Count(); i++)
{
CardInfo card = playerFrame.player.data.currentCards[i];
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.cardButtonTemplate, ((Component)this).transform);
PlayerCardButton playerCardButton = val.AddComponent<PlayerCardButton>();
playerCardButton.card = card;
playerCardButton.cardBar = this;
((TMP_Text)playerCardButton.Text).text = playerCardButton.CardInitials(card);
cardButtons.Add(i, playerCardButton);
}
}
else if (cardButtons.Count() > playerFrame.player.data.currentCards.Count())
{
for (int num = cardButtons.Count(); num >= playerFrame.player.data.currentCards.Count(); num--)
{
PlayerCardButton playerCardButton2 = cardButtons[num];
Object.Destroy((Object)(object)((Component)playerCardButton2).gameObject);
cardButtons.Remove(num);
}
}
for (int j = 0; j < playerFrame.player.data.currentCards.Count(); j++)
{
CardInfo card2 = playerFrame.player.data.currentCards[j];
PlayerCardButton playerCardButton3 = cardButtons[j];
playerCardButton3.card = card2;
((TMP_Text)playerCardButton3.Text).text = playerCardButton3.CardInitials(card2);
}
}
}
public class PlayerCardButton : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler
{
public PlayerCardBar cardBar;
public CardInfo card;
private TextMeshProUGUI _text = null;
private GameObject displayedCard;
public TextMeshProUGUI Text
{
get
{
if (_text == null)
{
_text = ((Component)((Component)this).transform.Find("Text (TMP)")).GetComponent<TextMeshProUGUI>();
}
return _text;
}
}
private void Start()
{
((TMP_Text)Text).text = CardInitials(card);
}
internal string CardInitials(CardInfo card)
{
string cardName = card.cardName;
cardName = cardName.Substring(0, 2);
string text = cardName[0].ToString().ToUpper();
if (cardName.Length > 1)
{
string text2 = cardName[1].ToString().ToLower();
return text + text2;
}
return text;
}
public void OnPointerEnter(PointerEventData eventData)
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)displayedCard != (Object)null)
{
Object.Destroy((Object)(object)displayedCard);
}
displayedCard = Object.Instantiate<GameObject>(TabInfoManager.cardHolderTemplate, TabInfoManager.canvas.transform);
displayedCard.transform.position = ((Component)this).gameObject.transform.position;
GameObject cardObj = Object.Instantiate<GameObject>(((Component)card).gameObject, displayedCard.transform);
CardVisuals componentInChildren = cardObj.GetComponentInChildren<CardVisuals>();
componentInChildren.firstValueToSet = true;
cardObj.transform.localPosition = Vector3.zero;
Collider2D[] componentsInChildren = displayedCard.GetComponentsInChildren<Collider2D>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
((Behaviour)componentsInChildren[i]).enabled = false;
}
cardObj.GetComponentInChildren<Canvas>().sortingLayerName = "MostFront";
((Behaviour)cardObj.GetComponentInChildren<GraphicRaycaster>()).enabled = false;
((Behaviour)cardObj.GetComponentInChildren<SetScaleToZero>()).enabled = false;
((Component)cardObj.GetComponentInChildren<SetScaleToZero>()).transform.localScale = Vector3.one * 1.15f;
ExtensionMethods.ExecuteAfterFrames((MonoBehaviour)(object)this, 1, (Action)delegate
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
cardObj.transform.localScale = Vector3.one * 25f;
});
}
public void OnPointerExit(PointerEventData eventData)
{
if ((Object)(object)displayedCard != (Object)null)
{
Object.Destroy((Object)(object)displayedCard);
}
}
private void OnDisable()
{
if ((Object)(object)displayedCard != (Object)null)
{
Object.Destroy((Object)(object)displayedCard);
}
}
}
public class PlayerFrame : MonoBehaviour
{
public TeamFrame teamFrame;
public PlayerCardBar cardBar;
public Player player;
private GameObject _cardBar;
private GameObject _cardBarFrame;
private TextMeshProUGUI _nameText;
private bool toggled = true;
private Button _button;
private GameObject _statHolder;
private TextMeshProUGUI _kda = null;
private List<StatSection> statSections = new List<StatSection>();
public GameObject CardBar
{
get
{
if (!((Object)(object)_cardBar != (Object)null))
{
_cardBar = ((Component)((Component)this).transform.Find("Player Cards/Scroll View/Viewport/Content")).gameObject;
}
return _cardBar;
}
}
public GameObject CardBarFrame
{
get
{
if (!((Object)(object)_cardBarFrame != (Object)null))
{
_cardBarFrame = ((Component)((Component)this).transform.Find("Player Cards")).gameObject;
}
return _cardBarFrame;
}
}
public TextMeshProUGUI NameText
{
get
{
if (!((Object)(object)_nameText != (Object)null))
{
_nameText = ((Component)((Component)this).transform.Find("Player Header/Player Name")).gameObject.GetComponent<TextMeshProUGUI>();
}
return _nameText;
}
}
public Button Button
{
get
{
if (!((Object)(object)_button != (Object)null))
{
_button = ((Component)((Component)this).transform.Find("Player Header")).gameObject.GetComponent<Button>();
}
return _button;
}
}
public GameObject StatHolder
{
get
{
if (!((Object)(object)_statHolder != (Object)null))
{
_statHolder = ((Component)((Component)this).transform.Find("Player Stats")).gameObject;
}
return _statHolder;
}
}
public TextMeshProUGUI KDA
{
get
{
if (_kda == null)
{
_kda = ((Component)((Component)this).transform.Find("Player Header/KDA")).gameObject.GetComponent<TextMeshProUGUI>();
}
return _kda;
}
}
public TextMeshProUGUI Spacer => ((Component)((Component)this).transform.Find("Player Header/Spacer")).gameObject.GetComponent<TextMeshProUGUI>();
private void OnHeaderClicked()
{
toggled = !toggled;
CardBarFrame.SetActive(toggled);
StatHolder.SetActive(toggled);
}
private void Start()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
cardBar = CardBar.AddComponent<PlayerCardBar>();
cardBar.playerFrame = this;
((UnityEvent)Button.onClick).AddListener(new UnityAction(OnHeaderClicked));
((TMP_Text)NameText).text = player.data.view.Owner.NickName;
((Component)Spacer).gameObject.SetActive(false);
((Component)KDA).gameObject.SetActive(false);
foreach (StatCategory item in from c in TabInfoManager.Categories.Values
orderby c.priority, c.name.ToLower()
select c)
{
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.statSectionTemplate, StatHolder.transform);
StatSection statSection = val.AddComponent<StatSection>();
statSection.playerFrame = this;
statSection.category = item;
statSections.Add(statSection);
}
}
private void Update()
{
if (statSections.Count() != TabInfoManager.Categories.Values.Count)
{
StatCategory[] extraCategories = statSections.Select((StatSection section) => section.category).Except(TabInfoManager.Categories.Values).ToArray();
StatSection[] array = statSections.Where((StatSection section) => extraCategories.Contains(section.category)).ToArray();
StatSection[] array2 = array;
foreach (StatSection statSection in array2)
{
Object.Destroy((Object)(object)((Component)statSection).gameObject);
statSections.Remove(statSection);
}
StatCategory[] array3 = TabInfoManager.Categories.Values.Except(statSections.Select((StatSection section) => section.category)).ToArray();
StatCategory[] array4 = array3;
foreach (StatCategory category in array4)
{
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.statSectionTemplate, StatHolder.transform);
StatSection statSection2 = val.AddComponent<StatSection>();
statSection2.playerFrame = this;
statSection2.category = category;
statSections.Add(statSection2);
}
StatCategory[] sectionOrder = (from c in TabInfoManager.Categories.Values
orderby c.priority, c.name.ToLower()
select c).ToArray();
int i;
for (i = 0; i < sectionOrder.Length; i++)
{
((Component)statSections.Where((StatSection section) => section.category == sectionOrder[i]).First()).transform.SetSiblingIndex(i);
}
}
foreach (StatSection statSection3 in statSections)
{
if (((Component)statSection3).gameObject.activeSelf != statSection3.category.DisplayCondition(player))
{
((Component)statSection3).gameObject.SetActive(statSection3.category.DisplayCondition(player));
}
}
}
}
internal class StatObject : MonoBehaviour
{
public StatSection section;
public Stat stat;
private TextMeshProUGUI _statName = null;
private TextMeshProUGUI _statValue = null;
public TextMeshProUGUI StatName
{
get
{
if (_statName == null)
{
_statName = ((Component)((Component)this).transform.Find("Name")).GetComponent<TextMeshProUGUI>();
}
return _statName;
}
}
public TextMeshProUGUI StatValue
{
get
{
if (_statValue == null)
{
_statValue = ((Component)((Component)this).transform.Find("Value")).GetComponent<TextMeshProUGUI>();
}
return _statValue;
}
}
private void Update()
{
((TMP_Text)StatName).text = stat.name + ":";
((TMP_Text)StatValue).text = stat.DisplayValue(section.playerFrame.player);
}
}
internal class StatSection : MonoBehaviour
{
public PlayerFrame playerFrame;
public StatCategory category;
private TextMeshProUGUI _title = null;
private GameObject _statHolder = null;
private Button _button = null;
private bool toggled = true;
private List<StatObject> statObjects = new List<StatObject>();
public TextMeshProUGUI Title
{
get
{
if (_title == null)
{
_title = ((Component)((Component)this).transform.Find("Stat Section Header/Section Name")).GetComponent<TextMeshProUGUI>();
}
return _title;
}
}
public GameObject StatHolder
{
get
{
if (_statHolder == null)
{
_statHolder = ((Component)((Component)this).transform.Find("Stat Section Stats Holder")).gameObject;
}
return _statHolder;
}
}
public Button Button
{
get
{
if (_button == null)
{
_button = ((Component)((Component)this).transform.Find("Stat Section Header")).GetComponent<Button>();
}
return _button;
}
}
private void OnHeaderClicked()
{
toggled = !toggled;
StatHolder.SetActive(toggled);
}
public void Start()
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
((UnityEvent)Button.onClick).AddListener(new UnityAction(OnHeaderClicked));
foreach (Stat item in category.Stats.Values.OrderBy((Stat stat) => stat.name))
{
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.statObjectTemplate, StatHolder.transform);
StatObject statObject = val.AddComponent<StatObject>();
statObject.stat = item;
statObject.section = this;
statObjects.Add(statObject);
}
}
public void Update()
{
((TMP_Text)Title).text = category.name;
if (statObjects.Count() != category.Stats.Values.Count())
{
Stat[] extraStats = statObjects.Select((StatObject stat) => stat.stat).Except(category.Stats.Values).ToArray();
StatObject[] array = statObjects.Where((StatObject stat) => extraStats.Contains(stat.stat)).ToArray();
StatObject[] array2 = array;
foreach (StatObject statObject in array2)
{
Object.Destroy((Object)(object)((Component)statObject).gameObject);
statObjects.Remove(statObject);
}
Stat[] array3 = category.Stats.Values.Except(statObjects.Select((StatObject stat) => stat.stat)).ToArray();
Stat[] array4 = array3;
foreach (Stat stat2 in array4)
{
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.statObjectTemplate, StatHolder.transform);
StatObject statObject2 = val.AddComponent<StatObject>();
statObject2.stat = stat2;
statObject2.section = this;
statObjects.Add(statObject2);
}
Stat[] statOrder = category.Stats.Values.OrderBy((Stat stat) => stat.name).ToArray();
int i;
for (i = 0; i < statOrder.Length; i++)
{
((Component)statObjects.Where((StatObject statObj) => statObj.stat == statOrder[i]).First()).gameObject.transform.SetSiblingIndex(i);
}
}
foreach (StatObject statObject3 in statObjects)
{
if (((Component)statObject3).gameObject.activeSelf != statObject3.stat.DisplayCondition(playerFrame.player))
{
((Component)statObject3).gameObject.SetActive(statObject3.stat.DisplayCondition(playerFrame.player));
}
}
}
}
public class TabFrame : MonoBehaviour
{
private TextMeshProUGUI _title = null;
private Button _closeButton = null;
private GameObject _teamHolder = null;
private List<TeamFrame> teamFrames = new List<TeamFrame>();
internal bool toggled;
public TextMeshProUGUI Title
{
get
{
if (_title == null)
{
_title = ((Component)((Component)this).transform.Find("Title Bar/Title")).gameObject.GetComponent<TextMeshProUGUI>();
}
return _title;
}
}
public Button CloseButton
{
get
{
if (_closeButton == null)
{
_closeButton = ((Component)((Component)this).transform.Find("Title Bar/Close")).GetComponent<Button>();
}
return _closeButton;
}
}
public GameObject TeamHolder
{
get
{
if (_teamHolder == null)
{
_teamHolder = ((Component)((Component)this).transform.Find("Scroll View/Viewport/Content")).gameObject;
}
return _teamHolder;
}
}
public CanvasGroup CanvasGroup => ((Component)this).GetComponent<CanvasGroup>();
private void Start()
{
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Expected O, but got Unknown
foreach (int item in from team in PlayerManager.instance.players.Select((Player player) => player.teamID).Distinct()
orderby team
select team)
{
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.teamFrameTemplate, TeamHolder.transform);
TeamFrame teamFrame = val.AddComponent<TeamFrame>();
teamFrame.team = item;
teamFrames.Add(teamFrame);
}
((UnityEvent)CloseButton.onClick).AddListener((UnityAction)delegate
{
toggled = false;
((Component)this).gameObject.SetActive(false);
});
}
private void Update()
{
if (teamFrames.Count() != PlayerManager.instance.players.Select((Player player) => player.teamID).Distinct().Count())
{
IEnumerable<int> extraTeams = teamFrames.Select((TeamFrame teamFrame) => teamFrame.team).Except(PlayerManager.instance.players.Select((Player player) => player.teamID).Distinct());
IEnumerable<TeamFrame> enumerable = teamFrames.Where((TeamFrame teamFrame) => extraTeams.Contains(teamFrame.team));
foreach (TeamFrame item in enumerable)
{
Object.Destroy((Object)(object)item);
teamFrames.Remove(item);
}
IEnumerable<int> enumerable2 = PlayerManager.instance.players.Select((Player player) => player.teamID).Distinct().Except(teamFrames.Select((TeamFrame teamFrame) => teamFrame.team));
foreach (int item2 in enumerable2)
{
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.teamFrameTemplate, TeamHolder.transform);
TeamFrame teamFrame2 = val.AddComponent<TeamFrame>();
teamFrame2.team = item2;
teamFrames.Add(teamFrame2);
}
int[] teamOrder = (from team in PlayerManager.instance.players.Select((Player player) => player.teamID).Distinct()
orderby team
select team).ToArray();
int i;
for (i = 0; i < teamOrder.Length; i++)
{
((Component)teamFrames.Where((TeamFrame teamframe) => teamframe.team == teamOrder[i]).First()).gameObject.transform.SetSiblingIndex(i);
}
}
((TMP_Text)Title).text = $"{GameModeManager.CurrentHandler.Name} - Round {TabInfoManager.CurrentRound} - Point {TabInfoManager.CurrentPoint} - {PlayerManager.instance.players.Count()} Players";
LayoutRebuilder.ForceRebuildLayoutImmediate(((Component)this).GetComponent<RectTransform>());
}
}
public static class TabInfoManager
{
private static Dictionary<string, StatCategory> _categories;
public static readonly StatCategory basicStats;
internal static GameObject canvas;
internal static GameObject tabFrameTemplate;
internal static GameObject teamFrameTemplate;
internal static GameObject playerFrameTemplate;
internal static GameObject cardButtonTemplate;
internal static GameObject statSectionTemplate;
internal static GameObject statObjectTemplate;
internal static GameObject cardHolderTemplate;
internal static TabFrame tabFrame;
private static List<string> hiddenGameModes;
public static ReadOnlyDictionary<string, StatCategory> Categories => new ReadOnlyDictionary<string, StatCategory>(_categories);
internal static TabFrame TabFrame
{
get
{
if ((Object)(object)tabFrame == (Object)null)
{
GameObject val = Object.Instantiate<GameObject>(tabFrameTemplate, canvas.transform);
tabFrame = val.AddComponent<TabFrame>();
val.SetActive(false);
}
return tabFrame;
}
}
public static int RoundsToWin
{
get
{
try
{
return (int)GameModeManager.CurrentHandler.Settings["roundsToWinGame"];
}
catch
{
return 0;
}
}
}
public static int PointsToWin
{
get
{
try
{
return (int)GameModeManager.CurrentHandler.Settings["pointsToWinRound"];
}
catch
{
return 0;
}
}
}
public static int CurrentRound { get; internal set; }
public static int CurrentPoint { get; internal set; }
public static bool IsLockingInput
{
get
{
if ((Object)(object)TabFrame != (Object)null)
{
return ((Component)TabFrame).gameObject.activeSelf;
}
return false;
}
}
public static StatCategory RegisterCategory(string name, int priority)
{
if (_categories.Keys.Contains(name.ToLower()))
{
throw new ArgumentException("Category name must be unique.");
}
if (priority < 0)
{
throw new ArgumentException("Category priority cannot be less than 0.");
}
StatCategory statCategory = new StatCategory(name, priority);
_categories.Add(name.ToLower(), statCategory);
return statCategory;
}
public static Stat RegisterStat(StatCategory category, string name, Func<Player, bool> displayCondition, Func<Player, string> displayValue)
{
if (category.Stats.ContainsKey(name.ToLower()))
{
throw new ArgumentException("Stat Names must be unique for the category that they're in.");
}
return category.RegisterStat(name, displayCondition, displayValue);
}
static TabInfoManager()
{
_categories = new Dictionary<string, StatCategory>();
tabFrame = null;
hiddenGameModes = new List<string>();
basicStats = new StatCategory("Basic Stats", -1);
_categories.Add(basicStats.name.ToLower(), basicStats);
basicStats.RegisterStat("HP", (Player value) => true, (Player player) => $"{player.data.health:F0}/{player.data.maxHealth:F0}");
basicStats.RegisterStat("Damage", (Player value) => true, (Player player) => $"{player.data.weaponHandler.gun.damage * player.data.weaponHandler.gun.bulletDamageMultiplier * player.data.weaponHandler.gun.projectiles[0].objectToSpawn.GetComponent<ProjectileHit>().damage:F0}");
basicStats.RegisterStat("Block Cooldown", (Player value) => true, (Player player) => $"{player.data.block.Cooldown():F2}s");
basicStats.RegisterStat("Reload Time", (Player value) => true, (Player player) => string.Format("{0:F2}s", (float)ExtensionMethods.InvokeMethod((object)((Component)player.data.weaponHandler.gun).GetComponentInChildren<GunAmmo>(), "ReloadTime", Array.Empty<object>())));
basicStats.RegisterStat("Ammo", (Player value) => true, (Player player) => $"{((Component)player.data.weaponHandler.gun).GetComponentInChildren<GunAmmo>().maxAmmo:F0}");
basicStats.RegisterStat("Movespeed", (Player value) => true, (Player player) => $"{player.data.stats.movementSpeed:F2}");
}
public static void RegisterHiddenGameMode(string gameModeID)
{
hiddenGameModes.Add(gameModeID);
}
public static void ToggleTabFrame()
{
if (!hiddenGameModes.Contains(GameModeManager.CurrentHandlerID))
{
TabFrame tabFrame = TabFrame;
TabFrame.toggled = !TabFrame.toggled;
((Component)TabFrame).gameObject.SetActive(TabFrame.toggled);
if (!TabFrame.toggled)
{
Object.Destroy((Object)(object)((Component)TabFrame).gameObject);
}
}
}
}
internal class TabListener : MonoBehaviour
{
private void Update()
{
if (Object.op_Implicit((Object)(object)PlayerManager.instance) && PlayerManager.instance.players != null && PlayerManager.instance.players.Count > 0 && PlayerManager.instance.LocalPlayers().Length != 0 && PlayerManager.instance.LocalPlayers().Any((Player player) => player.data.playerActions != null && ((OneAxisInputControl)player.data.playerActions.GetAdditionalData().toggleTab).WasPressed))
{
TabInfoManager.ToggleTabFrame();
}
}
}
public class StatCategory
{
public readonly string name;
public readonly int priority;
private Dictionary<string, Stat> _stats = new Dictionary<string, Stat>();
public ReadOnlyDictionary<string, Stat> Stats => new ReadOnlyDictionary<string, Stat>(_stats);
internal Stat RegisterStat(string name, Func<Player, bool> condition, Func<Player, string> value)
{
if (_stats.ContainsKey(name.ToLower()))
{
throw new ArgumentException("Stat Names must be unique.");
}
Stat stat = new Stat(name, this, condition, value);
_stats.Add(name.ToLower(), stat);
return stat;
}
internal StatCategory(string name, int priority)
{
this.name = name;
this.priority = priority;
}
internal bool DisplayCondition(Player player)
{
bool flag = TabInfo.GetBool(this);
if (flag)
{
flag = Stats.Values.Any((Stat stat) => stat.DisplayCondition(player));
}
return flag;
}
}
public class Stat
{
public readonly string name;
internal StatCategory category;
private Func<Player, string> displayValue;
private Func<Player, bool> displayCondition;
internal Stat(string name, StatCategory category, Func<Player, bool> condition, Func<Player, string> value)
{
this.name = name;
this.category = category;
displayCondition = condition;
displayValue = value;
}
internal bool DisplayCondition(Player player)
{
bool flag = TabInfo.GetBool(this);
if (flag)
{
try
{
flag = displayCondition(player);
}
catch (Exception ex)
{
Debug.LogError((object)("[Tab Info] Error thrown when fetching the display condition for Stat '" + name + "' in Category '" + category.name + "', see log below for details:"));
Debug.LogException(ex);
}
}
return flag;
}
internal string DisplayValue(Player player)
{
string result = "";
try
{
result = displayValue(player);
}
catch (Exception ex)
{
Debug.LogError((object)("[Tab Info] Error thrown when fetching the display value for Stat '" + name + "' in Category '" + category.name + "', see log below for details:"));
Debug.LogException(ex);
}
return result;
}
}
public class TeamFrame : MonoBehaviour
{
public int team;
private Image _bg = null;
private GameObject _playerHolder = null;
private TextMeshProUGUI _teamName = null;
private TextMeshProUGUI _teamScore = null;
private List<PlayerFrame> playerFrames = new List<PlayerFrame>();
private PlayerSkin teamSkin;
private Color[] colors;
private bool toggled = true;
public Image HeaderBG
{
get
{
if (_bg == null)
{
_bg = ((Component)((Component)this).transform.Find("Team Header")).GetComponent<Image>();
}
return _bg;
}
}
public GameObject PlayerHolder
{
get
{
if (_playerHolder == null)
{
_playerHolder = ((Component)((Component)this).transform.Find("Players")).gameObject;
}
return _playerHolder;
}
}
public TextMeshProUGUI TeamName
{
get
{
if (_teamName == null)
{
_teamName = ((Component)((Component)this).transform.Find("Team Header/Team Name")).gameObject.GetComponent<TextMeshProUGUI>();
}
return _teamName;
}
}
public TextMeshProUGUI TeamScore
{
get
{
if (_teamScore == null)
{
_teamScore = ((Component)((Component)this).transform.Find("Team Header/Score")).gameObject.GetComponent<TextMeshProUGUI>();
}
return _teamScore;
}
}
public TextMeshProUGUI Spacer => ((Component)((Component)this).transform.Find("Team Header/Spacer")).gameObject.GetComponent<TextMeshProUGUI>();
private void OnHeaderClicked()
{
toggled = !toggled;
PlayerHolder.SetActive(toggled);
}
private void Start()
{
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Expected O, but got Unknown
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_0152: Unknown result type (might be due to invalid IL or missing references)
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
foreach (Player item in from player in PlayerManager.instance.GetPlayersInTeam(team)
orderby player.playerID
select player)
{
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.playerFrameTemplate, PlayerHolder.transform);
PlayerFrame playerFrame = val.AddComponent<PlayerFrame>();
playerFrame.player = item;
playerFrame.teamFrame = this;
playerFrames.Add(playerFrame);
}
if (playerFrames.Count() > 0)
{
teamSkin = playerFrames[0].player.GetTeamColors();
((TMP_Text)TeamName).text = ExtraPlayerSkins.GetTeamColorName(PlayerExtensions.colorID(playerFrames[0].player));
colors = ColorManager.GetContrastingColors(teamSkin.winText, teamSkin.particleEffect, 3.5f);
((Graphic)HeaderBG).color = colors[1];
((Graphic)TeamName).color = colors[0];
((Graphic)TeamScore).color = colors[0];
((Graphic)Spacer).color = colors[0];
}
((UnityEvent)((Component)HeaderBG).GetComponent<Button>().onClick).AddListener(new UnityAction(OnHeaderClicked));
}
private void Update()
{
//IL_0254: Unknown result type (might be due to invalid IL or missing references)
//IL_0259: Unknown result type (might be due to invalid IL or missing references)
//IL_026d: Unknown result type (might be due to invalid IL or missing references)
//IL_0288: Unknown result type (might be due to invalid IL or missing references)
//IL_0332: Unknown result type (might be due to invalid IL or missing references)
//IL_033d: Unknown result type (might be due to invalid IL or missing references)
//IL_035e: Unknown result type (might be due to invalid IL or missing references)
//IL_0376: Unknown result type (might be due to invalid IL or missing references)
//IL_038e: Unknown result type (might be due to invalid IL or missing references)
//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
if (playerFrames.Count() != PlayerManager.instance.GetPlayersInTeam(team).Count())
{
IEnumerable<Player> extraPlayers = playerFrames.Select((PlayerFrame playerFrame) => playerFrame.player).Except(PlayerManager.instance.GetPlayersInTeam(team));
IEnumerable<PlayerFrame> enumerable = playerFrames.Where((PlayerFrame playerFrame) => extraPlayers.Contains(playerFrame.player));
foreach (PlayerFrame item in enumerable)
{
Object.Destroy((Object)(object)((Component)item).gameObject);
playerFrames.Remove(item);
}
IEnumerable<Player> enumerable2 = PlayerManager.instance.GetPlayersInTeam(team).Except(playerFrames.Select((PlayerFrame playerFrame) => playerFrame.player));
foreach (Player item2 in enumerable2)
{
GameObject val = Object.Instantiate<GameObject>(TabInfoManager.playerFrameTemplate, PlayerHolder.transform);
PlayerFrame playerFrame2 = val.AddComponent<PlayerFrame>();
playerFrame2.player = item2;
playerFrame2.teamFrame = this;
playerFrames.Add(playerFrame2);
}
Player[] playerOrder = (from player in PlayerManager.instance.GetPlayersInTeam(team)
orderby player.playerID
select player).ToArray();
int i;
for (i = 0; i < playerOrder.Length; i++)
{
((Component)playerFrames.Where((PlayerFrame playerFrame) => (Object)(object)playerFrame.player == (Object)(object)playerOrder[i]).First()).gameObject.transform.SetSiblingIndex(i);
}
}
TeamScore teamScore = GameModeManager.CurrentHandler.GetTeamScore(team);
((TMP_Text)TeamScore).text = $"{teamScore.rounds}/{TabInfoManager.RoundsToWin} Rounds {teamScore.points}/{TabInfoManager.PointsToWin} Points";
if (playerFrames.Count() > 0 && (Object)(object)teamSkin != (Object)(object)playerFrames[0].player.GetTeamColors())
{
teamSkin = playerFrames[0].player.GetTeamColors();
((TMP_Text)TeamName).text = ExtraPlayerSkins.GetTeamColorName(PlayerExtensions.colorID(playerFrames[0].player));
colors = ColorManager.GetContrastingColors(teamSkin.winText, teamSkin.particleEffect, 3.5f);
((Graphic)HeaderBG).color = colors[1];
((Graphic)TeamName).color = colors[0];
((Graphic)TeamScore).color = colors[0];
((Graphic)Spacer).color = colors[0];
}
}
}
}
namespace TabInfo.Patches
{
[HarmonyPatch(typeof(PlayerActions))]
internal class PlayerActions_Patch
{
[HarmonyPatch(typeof(PlayerActions))]
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
[HarmonyPatch(new Type[] { })]
[HarmonyPostfix]
private static void CreateAction(PlayerActions __instance)
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
__instance.GetAdditionalData().toggleTab = (PlayerAction)typeof(PlayerActions).InvokeMember("CreatePlayerAction", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, __instance, new object[1] { "(TabInfo) Toggle Tab" });
}
[HarmonyPostfix]
[HarmonyPatch("CreateWithControllerBindings")]
private static void SetControllerBinding(ref PlayerActions __result)
{
}
[HarmonyPostfix]
[HarmonyPatch(typeof(PlayerActions), "CreateWithKeyboardBindings")]
private static void SetKeyboardBinding(ref PlayerActions __result)
{
__result.GetAdditionalData().toggleTab.AddDefaultBinding((Key[])(object)new Key[1] { (Key)66 });
}
}
}
namespace TabInfo.Monobehaviours
{
public class ButtonInteraction : MonoBehaviour, IPointerClickHandler, IEventSystemHandler, IPointerEnterHandler, IPointerExitHandler
{
public UnityEvent mouseClick = new UnityEvent();
public UnityEvent mouseEnter = new UnityEvent();
public UnityEvent mouseExit = new UnityEvent();
public Button button;
public AudioSource source;
private Random random = new Random();
private void Start()
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Expected O, but got Unknown
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Expected O, but got Unknown
button = ((Component)this).gameObject.GetComponent<Button>();
source = ExtensionMethods.GetOrAddComponent<AudioSource>(((Component)this).gameObject, false);
mouseEnter.AddListener(new UnityAction(OnEnter));
mouseExit.AddListener(new UnityAction(OnExit));
mouseClick.AddListener(new UnityAction(OnClick));
}
public void OnEnter()
{
if (((Selectable)button).interactable)
{
source.PlayOneShot(TabInfo.instance.hover[random.Next(TabInfo.instance.hover.Count)]);
}
}
public void OnExit()
{
if (((Selectable)button).interactable)
{
source.PlayOneShot(TabInfo.instance.hover[random.Next(TabInfo.instance.hover.Count)]);
}
}
public void OnClick()
{
if (((Selectable)button).interactable)
{
source.PlayOneShot(TabInfo.instance.click[random.Next(TabInfo.instance.click.Count)]);
EventSystem.current.SetSelectedGameObject((GameObject)null);
}
}
public void OnPointerEnter(PointerEventData eventData)
{
if (((Selectable)button).interactable)
{
UnityEvent obj = mouseEnter;
if (obj != null)
{
obj.Invoke();
}
}
}
public void OnPointerExit(PointerEventData eventData)
{
if (((Selectable)button).interactable)
{
UnityEvent obj = mouseExit;
if (obj != null)
{
obj.Invoke();
}
}
}
public void OnPointerClick(PointerEventData eventData)
{
if (((Selectable)button).interactable)
{
UnityEvent obj = mouseClick;
if (obj != null)
{
obj.Invoke();
}
}
}
}
}
namespace TabInfo.Extensions
{
[Serializable]
public class PlayerActionsAdditionalData
{
public PlayerAction toggleTab;
public PlayerActionsAdditionalData()
{
toggleTab = null;
}
}
public static class PlayerActionsExtension
{
public static readonly ConditionalWeakTable<PlayerActions, PlayerActionsAdditionalData> data = new ConditionalWeakTable<PlayerActions, PlayerActionsAdditionalData>();
public static PlayerActionsAdditionalData GetAdditionalData(this PlayerActions playerActions)
{
return data.GetOrCreateValue(playerActions);
}
public static void AddData(this PlayerActions playerActions, PlayerActionsAdditionalData value)
{
try
{
data.Add(playerActions, value);
}
catch (Exception)
{
}
}
}
public static class PlayerManagerExtension
{
public static Player GetPlayerWithID(this PlayerManager playerManager, int playerID)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
return (Player)typeof(PlayerManager).InvokeMember("GetPlayerWithID", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, playerManager, new object[1] { playerID });
}
public static Player[] LocalPlayers(this PlayerManager playerManager)
{
if (playerManager.players == null || playerManager.players.Count() == 0)
{
return (Player[])(object)new Player[0];
}
return playerManager.players.Where((Player player) => PhotonNetwork.OfflineMode || player.data.view.IsMine).ToArray();
}
}
}