Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of EulersRuler v1.9.0
EulersRuler.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using ComfyLib; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("EulersRuler")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("EulersRuler")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("86a1824a-1bbe-404b-a4e3-f619d06ca938")] [assembly: AssemblyFileVersion("1.9.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.9.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 EulersRuler { public static class PanelUtils { public static readonly Gradient HealthPercentGradient = CreateHealthPercentGradient(); public static readonly Gradient StabilityPercentGradient = CreateStabilityPercentGradient(); public static void CreatePanels(Hud hud) { HoverPiecePanel.CreatePanel(hud); PlacementGhostPanel.CreatePanel(hud); } public static void TogglePanels(bool toggleOn) { HoverPiecePanel.DestroyPanel(); PlacementGhostPanel.DestroyPanel(); if (toggleOn && Object.op_Implicit((Object)(object)Hud.m_instance)) { CreatePanels(Hud.m_instance); } } public static IEnumerator UpdatePropertiesCoroutine() { WaitForSeconds waitInterval = new WaitForSeconds(0.25f); while (true) { yield return waitInterval; if (PluginConfig.IsModEnabled.Value && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { HoverPiecePanel.UpdateProperties(Player.m_localPlayer.m_hoveringPiece, PluginConfig.HoverPiecePanelEnabledRows.Value); PlacementGhostPanel.UpdateProperties(Player.m_localPlayer.m_placementGhost, PluginConfig.PlacementGhostPanelEnabledRows.Value); } } } public static Gradient CreateHealthPercentGradient() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) Gradient val = new Gradient(); val.SetKeys((GradientColorKey[])(object)new GradientColorKey[3] { new GradientColorKey(new Color(0.937f, 0.325f, 0.314f, 1f), 0.25f), new GradientColorKey(new Color(1f, 0.933f, 0.345f, 1f), 0.5f), new GradientColorKey(new Color(0.612f, 0.8f, 0.396f, 1f), 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) }); return val; } public static Gradient CreateStabilityPercentGradient() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) Gradient val = new Gradient(); val.SetKeys((GradientColorKey[])(object)new GradientColorKey[3] { new GradientColorKey(new Color(0.937f, 0.325f, 0.314f, 1f), 0.25f), new GradientColorKey(new Color(1f, 0.933f, 0.345f, 1f), 0.5f), new GradientColorKey(new Color(0.392f, 0.71f, 0.965f, 1f), 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) }); return val; } } [BepInPlugin("redseiko.valheim.eulersruler", "EulersRuler", "1.9.0")] public sealed class EulersRuler : BaseUnityPlugin { public const string PluginGUID = "redseiko.valheim.eulersruler"; public const string PluginName = "EulersRuler"; public const string PluginVersion = "1.9.0"; private void Awake() { PluginConfig.BindConfig(((BaseUnityPlugin)this).Config); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "redseiko.valheim.eulersruler"); } } public static class PluginConfig { [Flags] public enum HoverPiecePanelRow { None = 0, Name = 1, Health = 2, Stability = 4, Euler = 8, Quaternion = 0x10, PieceName = 0x20 } [Flags] public enum PlacementGhostPanelRow { None = 0, Name = 1, Euler = 2, Quaternion = 4, PieceName = 0x20, Distance = 0x40, Position = 0x80 } public static ConfigEntry<bool> IsModEnabled { get; private set; } public static ConfigEntry<Vector2> HoverPiecePanelPosition { get; private set; } public static ConfigEntry<HoverPiecePanelRow> HoverPiecePanelEnabledRows { get; private set; } public static ConfigEntry<int> HoverPiecePanelFontSize { get; private set; } public static ConfigEntry<bool> ShowHoverPieceHealthBar { get; private set; } public static ConfigEntry<Vector2> PlacementGhostPanelPosition { get; private set; } public static ConfigEntry<PlacementGhostPanelRow> PlacementGhostPanelEnabledRows { get; private set; } public static ConfigEntry<int> PlacementGhostPanelFontSize { get; private set; } public static void BindConfig(ConfigFile config) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) IsModEnabled = config.BindInOrder("_Global", "isModEnabled", defaultValue: true, "Globally enable or disable this mod."); IsModEnabled.OnSettingChanged<bool>(PanelUtils.TogglePanels); HoverPiecePanelPosition = config.BindInOrder<Vector2>("HoverPiece.Panel", "hoverPiecePanelPosition", new Vector2(0f, 150f), "Position of the HoverPiece properties panel."); HoverPiecePanelPosition.OnSettingChanged((Action<Vector2>)HoverPiecePanel.SetPosition); HoverPiecePanelEnabledRows = config.BindInOrder("HoverPiece.Panel", "hoverPiecePanelEnabledRows", HoverPiecePanelRow.Name | HoverPiecePanelRow.Health | HoverPiecePanelRow.Stability, "Which rows to display on the HoverPiece properties panel."); HoverPiecePanelFontSize = config.BindInOrder("HoverPiece.Panel", "hoverPiecePanelFontSize", 18, "Font size for the HoverPiece properties panel.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(6, 32)); HoverPiecePanelFontSize.OnSettingChanged<int>(HoverPiecePanel.SetFontSize); ShowHoverPieceHealthBar = config.BindInOrder("HoverPiece.HealthBar", "showHoverPieceHealthBar", defaultValue: true, "Show the vanilla hover piece HealthBar."); PlacementGhostPanelPosition = config.BindInOrder<Vector2>("PlacementGhost.Panel", "placementGhostPanelPosition", new Vector2(150f, 0f), "Position of the PlacementGhost properties panel."); PlacementGhostPanelPosition.OnSettingChanged((Action<Vector2>)PlacementGhostPanel.SetPosition); PlacementGhostPanelEnabledRows = config.BindInOrder("PlacementGhost.Panel", "placementGhostPanelEnabledRows", PlacementGhostPanelRow.Name | PlacementGhostPanelRow.Euler | PlacementGhostPanelRow.Quaternion, "Which rows to display on the PlacementGhost properties panel."); PlacementGhostPanelFontSize = config.BindInOrder("PlacementGhost.Panel", "placementGhostPanelFontSize", 18, "Font size for the PlacementGhost properties panel.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(6, 32)); PlacementGhostPanelFontSize.OnSettingChanged<int>(PlacementGhostPanel.SetFontSize); } } [HarmonyPatch(typeof(Hud))] internal static class HudPatch { private static GameObject _pieceHealthRoot; private static GuiBar _pieceHealthBar; [HarmonyPostfix] [HarmonyPatch("Awake")] private static void AwakePostfix(ref Hud __instance) { if (PluginConfig.IsModEnabled.Value) { PanelUtils.CreatePanels(__instance); } _pieceHealthRoot = ((Component)__instance.m_pieceHealthRoot).gameObject; _pieceHealthBar = __instance.m_pieceHealthBar; ((MonoBehaviour)__instance).StartCoroutine(PanelUtils.UpdatePropertiesCoroutine()); } [HarmonyPostfix] [HarmonyPatch("UpdateCrosshair")] private static void UpdateCrosshairPostfix(Hud __instance) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (PluginConfig.IsModEnabled.Value && _pieceHealthRoot.activeSelf) { if (PluginConfig.ShowHoverPieceHealthBar.Value) { _pieceHealthBar.SetColor(PanelUtils.HealthPercentGradient.Evaluate(_pieceHealthBar.m_value)); } else { _pieceHealthRoot.SetActive(false); } } } } public static class HoverPiecePanel { private static TwoColumnPanel _hoverPiecePanel; private static TMP_Text _pieceNameTextLabel; private static TMP_Text _pieceNameTextValue; private static TMP_Text _pieceHealthTextLabel; private static TMP_Text _pieceHealthTextValue; private static TMP_Text _pieceStabilityTextLabel; private static TMP_Text _pieceStabilityTextValue; private static TMP_Text _pieceEulerTextLabel; private static TMP_Text _pieceEulerTextValue; private static TMP_Text _pieceQuaternionTextLabel; private static TMP_Text _pieceQuaternionTextValue; public static void CreatePanel(Hud hud) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) _hoverPiecePanel = new TwoColumnPanel(((Component)hud.m_crosshair).transform).AddPanelRow(out _pieceNameTextLabel, out _pieceNameTextValue).AddPanelRow(out _pieceHealthTextLabel, out _pieceHealthTextValue).AddPanelRow(out _pieceStabilityTextLabel, out _pieceStabilityTextValue) .AddPanelRow(out _pieceEulerTextLabel, out _pieceEulerTextValue) .AddPanelRow(out _pieceQuaternionTextLabel, out _pieceQuaternionTextValue) .SetPosition(PluginConfig.HoverPiecePanelPosition.Value) .SetAnchors(new Vector2(0.5f, 0f), new Vector2(0.5f, 0f), new Vector2(0.5f, 0f)) .SetFontSize(PluginConfig.HoverPiecePanelFontSize.Value); _pieceNameTextLabel.text = "Piece ◈"; _pieceHealthTextLabel.text = "Health ♡"; _pieceStabilityTextLabel.text = "Stability ☖"; _pieceEulerTextLabel.text = "Euler ⦿"; _pieceQuaternionTextLabel.text = "Quaternion ⌘"; } public static void DestroyPanel() { _hoverPiecePanel?.DestroyPanel(); } public static void SetPosition(Vector2 position) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) _hoverPiecePanel?.SetPosition(position); } public static void SetFontSize(int fontSize) { _hoverPiecePanel?.SetFontSize(fontSize); } public static void UpdateProperties(Piece piece, PluginConfig.HoverPiecePanelRow enabledRows) { if (Object.op_Implicit((Object)(object)_hoverPiecePanel?.Panel)) { WearNTear wearNTear = default(WearNTear); if (!Object.op_Implicit((Object)(object)piece) || !Object.op_Implicit((Object)(object)piece.m_nview) || !piece.m_nview.IsValid() || !((Component)piece).TryGetComponent<WearNTear>(ref wearNTear)) { _hoverPiecePanel?.SetActive(active: false); return; } _hoverPiecePanel.SetActive(active: true); UpdateHoverPieceNameRow(piece, enabledRows.HasFlag(PluginConfig.HoverPiecePanelRow.Name), enabledRows.HasFlag(PluginConfig.HoverPiecePanelRow.PieceName)); UpdateHoverPieceHealthRow(wearNTear, enabledRows.HasFlag(PluginConfig.HoverPiecePanelRow.Health)); UpdateHoverPieceStabilityRow(wearNTear, enabledRows.HasFlag(PluginConfig.HoverPiecePanelRow.Stability)); UpdateHoverPieceEulerRow(wearNTear, enabledRows.HasFlag(PluginConfig.HoverPiecePanelRow.Euler)); UpdateHoverPieceQuaternionRow(wearNTear, enabledRows.HasFlag(PluginConfig.HoverPiecePanelRow.Quaternion)); } } private static void UpdateHoverPieceNameRow(Piece piece, bool isRowEnabled, bool isPieceNameEnabled) { ((Component)_pieceNameTextLabel).gameObject.SetActive(isRowEnabled); ((Component)_pieceNameTextValue).gameObject.SetActive(isRowEnabled); if (isRowEnabled) { _pieceNameTextValue.text = "<color=#FFCA28>" + Localization.instance.Localize(piece.m_name) + "</color>"; if (isPieceNameEnabled) { TMP_Text pieceNameTextValue = _pieceNameTextValue; pieceNameTextValue.text = pieceNameTextValue.text + " (<color=#FFCA28>" + Utils.GetPrefabName(((Component)piece).gameObject) + "</color>)"; } } } private static void UpdateHoverPieceHealthRow(WearNTear wearNTear, bool isRowEnabled) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) ((Component)_pieceHealthTextLabel).gameObject.SetActive(isRowEnabled); ((Component)_pieceHealthTextValue).gameObject.SetActive(isRowEnabled); if (isRowEnabled) { float @float = wearNTear.m_nview.m_zdo.GetFloat(ZDOVars.s_health, wearNTear.m_health); float num = Mathf.Clamp01(@float / wearNTear.m_health); _pieceHealthTextValue.text = string.Format("<color=#{0}>{1}</color> /<color={2}>{3}</color> (<color=#{0}>{4:0%}</color>)", ColorUtility.ToHtmlStringRGB(PanelUtils.HealthPercentGradient.Evaluate(num)), ((double)Mathf.Abs(@float) > 1000000000.0) ? @float.ToString("G5") : @float.ToString("N0"), "#FAFAFA", wearNTear.m_health, num); } } private static void UpdateHoverPieceStabilityRow(WearNTear wearNTear, bool isRowEnabled) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) ((Component)_pieceStabilityTextLabel).gameObject.SetActive(isRowEnabled); ((Component)_pieceStabilityTextValue).gameObject.SetActive(isRowEnabled); if (isRowEnabled) { float support = wearNTear.GetSupport(); float maxSupport = wearNTear.GetMaxSupport(); float num = Mathf.Clamp01(support / maxSupport); _pieceStabilityTextValue.text = string.Format("<color=#{0}>{1:N0}</color> /<color={2}>{3}</color> (<color=#{0}>{4:0%}</color>)", ColorUtility.ToHtmlStringRGB(PanelUtils.StabilityPercentGradient.Evaluate(num)), support, "#FAFAFA", maxSupport, num); } } private static void UpdateHoverPieceEulerRow(WearNTear wearNTear, bool isRowEnabled) { //IL_0033: 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_003b: Unknown result type (might be due to invalid IL or missing references) ((Component)_pieceEulerTextLabel).gameObject.SetActive(isRowEnabled); ((Component)_pieceEulerTextValue).gameObject.SetActive(isRowEnabled); if (isRowEnabled) { TMP_Text pieceEulerTextValue = _pieceEulerTextValue; Quaternion rotation = ((Component)wearNTear).transform.rotation; pieceEulerTextValue.text = $"<color=#CFD8DC>{((Quaternion)(ref rotation)).eulerAngles}</color>"; } } private static void UpdateHoverPieceQuaternionRow(WearNTear wearNTear, bool isRowEnabled) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) ((Component)_pieceQuaternionTextLabel).gameObject.SetActive(isRowEnabled); ((Component)_pieceQuaternionTextValue).gameObject.SetActive(isRowEnabled); if (isRowEnabled) { _pieceQuaternionTextValue.text = $"<color=#D7CCC8>{((Component)wearNTear).transform.rotation:N2}</color>"; } } } public static class PlacementGhostPanel { private static TwoColumnPanel _placementGhostPanel; private static PluginConfig.PlacementGhostPanelRow _lastEnabledRows; public static TwoColumnPanel.LabelRow GhostNameRow { get; private set; } public static TwoColumnPanel.LabelRow GhostEulerRow { get; private set; } public static TwoColumnPanel.LabelRow GhostQuaternionRow { get; private set; } public static TwoColumnPanel.LabelRow GhostDistanceRow { get; private set; } public static void CreatePanel(Hud hud) { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) _placementGhostPanel = new TwoColumnPanel(((Component)hud.m_crosshair).transform); GhostNameRow = _placementGhostPanel.AddLabelRow(); ((TMP_Text)GhostNameRow.LeftLabel).text = "Placing ▥"; ((Graphic)GhostNameRow.RightLabel).color = new Color(1f, 0.79f, 0.15f); GhostEulerRow = _placementGhostPanel.AddLabelRow(); ((TMP_Text)GhostEulerRow.LeftLabel).text = "Euler ⦿"; ((Graphic)GhostEulerRow.RightLabel).color = new Color(0.81f, 0.84f, 0.86f); GhostQuaternionRow = _placementGhostPanel.AddLabelRow(); ((TMP_Text)GhostQuaternionRow.LeftLabel).text = "Quaternion ⌘"; ((Graphic)GhostQuaternionRow.RightLabel).color = new Color(0.84f, 0.8f, 0.78f); GhostDistanceRow = _placementGhostPanel.AddLabelRow(); ((TMP_Text)GhostDistanceRow.LeftLabel).text = "Distance ➡"; ((Graphic)GhostDistanceRow.RightLabel).color = new Color(1f, 0.79f, 0.15f); _placementGhostPanel.SetPosition(PluginConfig.PlacementGhostPanelPosition.Value).SetAnchors(new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(0f, 0.5f)).SetFontSize(PluginConfig.PlacementGhostPanelFontSize.Value); } public static void DestroyPanel() { _placementGhostPanel?.DestroyPanel(); } public static void SetPosition(Vector2 position) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) _placementGhostPanel?.SetPosition(position); } public static void SetFontSize(int fontSize) { _placementGhostPanel?.SetFontSize(fontSize); } public static void UpdateProperties(GameObject placementGhost, PluginConfig.PlacementGhostPanelRow enabledRows) { if (Object.op_Implicit((Object)(object)_placementGhostPanel?.Panel)) { Piece piece = default(Piece); if (!Object.op_Implicit((Object)(object)placementGhost) || enabledRows == PluginConfig.PlacementGhostPanelRow.None || !placementGhost.TryGetComponent<Piece>(ref piece)) { _placementGhostPanel.SetActive(active: false); return; } _placementGhostPanel.SetActive(active: true); SetupGhostRows(enabledRows); UpdateGhostRows(placementGhost, piece, enabledRows); } } private static void SetupGhostRows(PluginConfig.PlacementGhostPanelRow enabledRows) { if (enabledRows != _lastEnabledRows) { GhostNameRow.SetActive(enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Name)); GhostEulerRow.SetActive(enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Euler)); GhostQuaternionRow.SetActive(enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Quaternion)); GhostDistanceRow.SetActive(enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Distance)); _lastEnabledRows = enabledRows; } } private static void UpdateGhostRows(GameObject placementGhost, Piece piece, PluginConfig.PlacementGhostPanelRow enabledRows) { if (enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Name)) { UpdateGhostNameRow(piece, enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.PieceName)); } if (enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Euler)) { UpdateGhostEulerRow(placementGhost); } if (enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Quaternion)) { UpdateGhostQuaternionRow(placementGhost); } if (enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Distance)) { UpdateGhostDistanceRow(placementGhost, enabledRows.HasFlag(PluginConfig.PlacementGhostPanelRow.Position)); } } private static void UpdateGhostNameRow(Piece piece, bool showPrefabName) { if (showPrefabName) { ((TMP_Text)GhostNameRow.RightLabel).text = Localization.instance.Localize(piece.m_name) + " (" + Utils.GetPrefabName(((Component)piece).gameObject) + ")"; } else { ((TMP_Text)GhostNameRow.RightLabel).text = Localization.instance.Localize(piece.m_name); } } private static void UpdateGhostEulerRow(GameObject placementGhost) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) TextMeshProUGUI rightLabel = GhostEulerRow.RightLabel; Quaternion rotation = placementGhost.transform.rotation; Vector3 eulerAngles = ((Quaternion)(ref rotation)).eulerAngles; ((TMP_Text)rightLabel).text = ((object)(Vector3)(ref eulerAngles)).ToString(); } private static void UpdateGhostQuaternionRow(GameObject placementGhost) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) TextMeshProUGUI rightLabel = GhostQuaternionRow.RightLabel; Quaternion rotation = placementGhost.transform.rotation; ((TMP_Text)rightLabel).text = ((Quaternion)(ref rotation)).ToString("N2"); } private static void UpdateGhostDistanceRow(GameObject placementGhost, bool showPosition) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) float num = (Object.op_Implicit((Object)(object)Player.m_localPlayer) ? Vector3.Distance(((Component)Player.m_localPlayer).transform.position, placementGhost.transform.position) : 0f); if (showPosition) { ((TMP_Text)GhostDistanceRow.RightLabel).text = $"{num:N2} • {placementGhost.transform.position:F0}"; } else { ((TMP_Text)GhostDistanceRow.RightLabel).text = num.ToString("N2"); } } } public class TwoColumnPanel { public sealed class LabelRow { public TextMeshProUGUI LeftLabel { get; } public TextMeshProUGUI RightLabel { get; } public LabelRow(Transform leftParentTransform, Transform rightParentTransform) { LeftLabel = UIBuilder.CreateTMPLabel(leftParentTransform); ((Object)LeftLabel).name = "LeftLabel"; RightLabel = UIBuilder.CreateTMPLabel(rightParentTransform); ((Object)RightLabel).name = "RightLabel"; } public void SetActive(bool active) { ((Component)LeftLabel).gameObject.SetActive(active); ((Component)RightLabel).gameObject.SetActive(active); } } private int _textFontSize = 18; private GameObject _leftColumn; private GameObject _rightColumn; public GameObject Panel { get; private set; } internal TwoColumnPanel(Transform parent) { CreatePanel(parent); } internal void DestroyPanel() { Object.Destroy((Object)(object)Panel); } internal void SetActive(bool active) { if (Object.op_Implicit((Object)(object)Panel) && Panel.activeSelf != active) { Panel.SetActive(active); } } internal TwoColumnPanel SetPosition(Vector2 position) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) Panel.GetComponent<RectTransform>().anchoredPosition = position; return this; } internal TwoColumnPanel SetAnchors(Vector2 anchorMin, Vector2 anchorMax, Vector2 pivot) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) RectTransform component = Panel.GetComponent<RectTransform>(); component.anchorMin = anchorMin; component.anchorMax = anchorMax; component.pivot = pivot; return this; } public TwoColumnPanel SetFontSize(int fontSize) { _textFontSize = fontSize; TMP_Text[] componentsInChildren = Panel.GetComponentsInChildren<TMP_Text>(); for (int i = 0; i < componentsInChildren.Length; i++) { SetFontSize(componentsInChildren[i], fontSize); } return this; } private static void SetFontSize(TMP_Text label, int fontSize) { //IL_0014: 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_0028: Unknown result type (might be due to invalid IL or missing references) label.fontSize = fontSize; label.rectTransform.sizeDelta = label.GetPreferredValues("123") + new Vector2(0f, 4f); } private void CreatePanel(Transform parent) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Expected O, but got Unknown //IL_0174: Unknown result type (might be due to invalid IL or missing references) Panel = new GameObject("TwoColumnPanel", new Type[1] { typeof(RectTransform) }); Panel.transform.SetParent(parent, false); Panel.GetComponent<RectTransform>().SetSizeDelta(Vector2.zero); Panel.AddComponent<HorizontalLayoutGroup>().SetSpacing<HorizontalLayoutGroup>(6f).SetChildAlignment<HorizontalLayoutGroup>((TextAnchor)1); Panel.AddComponent<ContentSizeFitter>().SetHorizontalFit((FitMode)2).SetVerticalFit((FitMode)2); _leftColumn = new GameObject("LeftColumn", new Type[1] { typeof(RectTransform) }); _leftColumn.transform.SetParent(Panel.transform, false); _leftColumn.GetComponent<RectTransform>().SetSizeDelta(Vector2.zero); _leftColumn.AddComponent<VerticalLayoutGroup>().SetChildControl<VerticalLayoutGroup>((bool?)true, (bool?)false).SetChildForceExpand<VerticalLayoutGroup>((bool?)true, (bool?)false) .SetChildAlignment<VerticalLayoutGroup>((TextAnchor)3) .SetSpacing<VerticalLayoutGroup>(6f); _leftColumn.AddComponent<ContentSizeFitter>().SetHorizontalFit((FitMode)2).SetVerticalFit((FitMode)2); _rightColumn = new GameObject("RightColumn", new Type[1] { typeof(RectTransform) }); _rightColumn.transform.SetParent(Panel.transform, false); _rightColumn.GetComponent<RectTransform>().SetSizeDelta(Vector2.zero); _rightColumn.AddComponent<VerticalLayoutGroup>().SetChildControl<VerticalLayoutGroup>((bool?)true, (bool?)false).SetChildForceExpand<VerticalLayoutGroup>((bool?)true, (bool?)false) .SetChildAlignment<VerticalLayoutGroup>((TextAnchor)3) .SetSpacing<VerticalLayoutGroup>(6f); _rightColumn.AddComponent<ContentSizeFitter>().SetHorizontalFit((FitMode)2).SetVerticalFit((FitMode)2); } public TwoColumnPanel AddPanelRow(out TMP_Text leftText, out TMP_Text rightText) { leftText = (TMP_Text)(object)UIBuilder.CreateTMPLabel(_leftColumn.transform); ((Object)leftText).name = "LeftText"; leftText.alignment = (TextAlignmentOptions)516; SetFontSize(leftText, _textFontSize); rightText = (TMP_Text)(object)UIBuilder.CreateTMPLabel(_rightColumn.transform); ((Object)rightText).name = "RightText"; rightText.alignment = (TextAlignmentOptions)513; SetFontSize(rightText, _textFontSize); return this; } public LabelRow AddLabelRow() { LabelRow labelRow = new LabelRow(_leftColumn.transform, _rightColumn.transform); ((TMP_Text)labelRow.LeftLabel).alignment = (TextAlignmentOptions)516; SetFontSize((TMP_Text)(object)labelRow.LeftLabel, _textFontSize); ((TMP_Text)labelRow.RightLabel).alignment = (TextAlignmentOptions)513; SetFontSize((TMP_Text)(object)labelRow.RightLabel, _textFontSize); return labelRow; } } } namespace ComfyLib { public static class ObjectExtensions { public static T FirstByNameOrThrow<T>(this IEnumerable<T> unityObjects, string name) where T : Object { foreach (T unityObject in unityObjects) { if (((Object)unityObject).name == name) { return unityObject; } } throw new InvalidOperationException($"Could not find Unity object of type {typeof(T)} with name: {name}"); } public static T Ref<T>(this T unityObject) where T : Object { if (!Object.op_Implicit((Object)(object)unityObject)) { return default(T); } return unityObject; } } public static class ConfigFileExtensions { internal sealed class ConfigurationManagerAttributes { public Action<ConfigEntryBase> CustomDrawer; public bool? Browsable; public bool? HideDefaultButton; public bool? HideSettingName; public bool? IsAdvanced; public int? Order; public bool? ReadOnly; } private static readonly Dictionary<string, int> _sectionToSettingOrder = new Dictionary<string, int>(); private static int GetSettingOrder(string section) { if (!_sectionToSettingOrder.TryGetValue(section, out var value)) { value = 0; } _sectionToSettingOrder[section] = value - 1; return value; } public static ConfigEntry<T> BindInOrder<T>(this ConfigFile config, string section, string key, T defaultValue, string description, AcceptableValueBase acceptableValues, bool browsable = true, bool hideDefaultButton = false, bool hideSettingName = false, bool isAdvanced = false, bool readOnly = false) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown return config.Bind<T>(section, key, defaultValue, new ConfigDescription(description, acceptableValues, new object[1] { new ConfigurationManagerAttributes { Browsable = browsable, CustomDrawer = null, HideDefaultButton = hideDefaultButton, HideSettingName = hideSettingName, IsAdvanced = isAdvanced, Order = GetSettingOrder(section), ReadOnly = readOnly } })); } public static ConfigEntry<T> BindInOrder<T>(this ConfigFile config, string section, string key, T defaultValue, string description, Action<ConfigEntryBase> customDrawer = null, bool browsable = true, bool hideDefaultButton = false, bool hideSettingName = false, bool isAdvanced = false, bool readOnly = false) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown return config.Bind<T>(section, key, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Browsable = browsable, CustomDrawer = customDrawer, HideDefaultButton = hideDefaultButton, HideSettingName = hideSettingName, IsAdvanced = isAdvanced, Order = GetSettingOrder(section), ReadOnly = readOnly } })); } public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action settingChangedHandler) { configEntry.SettingChanged += delegate { settingChangedHandler(); }; } public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action<T> settingChangedHandler) { configEntry.SettingChanged += delegate(object _, EventArgs eventArgs) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) settingChangedHandler((T)((SettingChangedEventArgs)eventArgs).ChangedSetting.BoxedValue); }; } public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action<ConfigEntry<T>> settingChangedHandler) { configEntry.SettingChanged += delegate(object _, EventArgs eventArgs) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) settingChangedHandler((ConfigEntry<T>)((SettingChangedEventArgs)eventArgs).ChangedSetting.BoxedValue); }; } } public static class UIBuilder { public static TextMeshProUGUI CreateTMPLabel(Transform parentTransform) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) TextMeshProUGUI obj = Object.Instantiate<TextMeshProUGUI>(UnifiedPopup.instance.bodyText, parentTransform, false); ((Object)obj).name = "Label"; ((TMP_Text)obj).fontSize = 16f; ((TMP_Text)obj).richText = true; ((Graphic)obj).color = Color.white; ((TMP_Text)obj).enableAutoSizing = false; ((TMP_Text)obj).textWrappingMode = (TextWrappingModes)0; ((TMP_Text)obj).overflowMode = (TextOverflowModes)0; ((TMP_Text)obj).text = string.Empty; return obj; } } public static class CanvasGroupExtensions { public static CanvasGroup SetAlpha(this CanvasGroup canvasGroup, float alpha) { canvasGroup.alpha = alpha; return canvasGroup; } public static CanvasGroup SetBlocksRaycasts(this CanvasGroup canvasGroup, bool blocksRaycasts) { canvasGroup.blocksRaycasts = blocksRaycasts; return canvasGroup; } } public static class ColorExtensions { public static Color SetAlpha(this Color color, float alpha) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) color.a = alpha; return color; } } public static class ContentSizeFitterExtensions { public static ContentSizeFitter SetHorizontalFit(this ContentSizeFitter fitter, FitMode fitMode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) fitter.horizontalFit = fitMode; return fitter; } public static ContentSizeFitter SetVerticalFit(this ContentSizeFitter fitter, FitMode fitMode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) fitter.verticalFit = fitMode; return fitter; } } public static class LayoutGroupExtensions { public static T SetChildAlignment<T>(this T layoutGroup, TextAnchor alignment) where T : HorizontalOrVerticalLayoutGroup { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((LayoutGroup)(object)layoutGroup).childAlignment = alignment; return layoutGroup; } public static T SetChildControl<T>(this T layoutGroup, bool? width = null, bool? height = null) where T : HorizontalOrVerticalLayoutGroup { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childControlWidth = width.Value; } if (height.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childControlHeight = height.Value; } return layoutGroup; } public static T SetChildForceExpand<T>(this T layoutGroup, bool? width = null, bool? height = null) where T : HorizontalOrVerticalLayoutGroup { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childForceExpandWidth = width.Value; } if (height.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childForceExpandHeight = height.Value; } return layoutGroup; } public static T SetPadding<T>(this T layoutGroup, int? left = null, int? right = null, int? top = null, int? bottom = null) where T : HorizontalOrVerticalLayoutGroup { if (!left.HasValue && !right.HasValue && !top.HasValue && !bottom.HasValue) { throw new ArgumentException("Value for left, right, top or bottom must be provided."); } if (left.HasValue) { ((LayoutGroup)(object)layoutGroup).padding.left = left.Value; } if (right.HasValue) { ((LayoutGroup)(object)layoutGroup).padding.right = right.Value; } if (top.HasValue) { ((LayoutGroup)(object)layoutGroup).padding.top = top.Value; } if (bottom.HasValue) { ((LayoutGroup)(object)layoutGroup).padding.bottom = bottom.Value; } return layoutGroup; } public static T SetSpacing<T>(this T layoutGroup, float spacing) where T : HorizontalOrVerticalLayoutGroup { ((HorizontalOrVerticalLayoutGroup)layoutGroup).spacing = spacing; return layoutGroup; } } public static class ImageExtensions { public static Image SetColor(this Image image, Color color) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Graphic)image).color = color; return image; } public static Image SetFillAmount(this Image image, float amount) { image.fillAmount = amount; return image; } public static Image SetFillCenter(this Image image, bool fillCenter) { image.fillCenter = fillCenter; return image; } public static Image SetFillMethod(this Image image, FillMethod fillMethod) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) image.fillMethod = fillMethod; return image; } public static Image SetFillOrigin(this Image image, OriginHorizontal origin) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected I4, but got Unknown image.fillOrigin = (int)origin; return image; } public static Image SetFillOrigin(this Image image, OriginVertical origin) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected I4, but got Unknown image.fillOrigin = (int)origin; return image; } public static Image SetMaskable(this Image image, bool maskable) { ((MaskableGraphic)image).maskable = maskable; return image; } public static Image SetMaterial(this Image image, Material material) { ((Graphic)image).material = material; return image; } public static Image SetPixelsPerUnitMultiplier(this Image image, float pixelsPerUnitMultiplier) { image.pixelsPerUnitMultiplier = pixelsPerUnitMultiplier; return image; } public static Image SetPreserveAspect(this Image image, bool preserveAspect) { image.preserveAspect = preserveAspect; return image; } public static Image SetRaycastTarget(this Image image, bool raycastTarget) { ((Graphic)image).raycastTarget = raycastTarget; return image; } public static Image SetSprite(this Image image, Sprite sprite) { image.sprite = sprite; return image; } public static Image SetType(this Image image, Type type) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) image.type = type; return image; } } public static class LayoutElementExtensions { public static LayoutElement SetFlexible(this LayoutElement layoutElement, float? width = null, float? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { layoutElement.flexibleWidth = width.Value; } if (height.HasValue) { layoutElement.flexibleHeight = height.Value; } return layoutElement; } public static LayoutElement SetIgnoreLayout(this LayoutElement layoutElement, bool ignoreLayout) { layoutElement.ignoreLayout = ignoreLayout; return layoutElement; } public static LayoutElement SetMinimum(this LayoutElement layoutElement, float? width = null, float? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { layoutElement.minWidth = width.Value; } if (height.HasValue) { layoutElement.minHeight = height.Value; } return layoutElement; } public static LayoutElement SetPreferred(this LayoutElement layoutElement, float? width = null, float? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { layoutElement.preferredWidth = width.Value; } if (height.HasValue) { layoutElement.preferredHeight = height.Value; } return layoutElement; } } public static class RectMask2DExtensions { public static RectMask2D SetSoftness(this RectMask2D rectMask2d, Vector2Int softness) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectMask2d.softness = softness; return rectMask2d; } } public static class RectTransformExtensions { public static RectTransform SetAnchorMin(this RectTransform rectTransform, Vector2 anchorMin) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.anchorMin = anchorMin; return rectTransform; } public static RectTransform SetAnchorMax(this RectTransform rectTransform, Vector2 anchorMax) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.anchorMax = anchorMax; return rectTransform; } public static RectTransform SetPivot(this RectTransform rectTransform, Vector2 pivot) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.pivot = pivot; return rectTransform; } public static RectTransform SetPosition(this RectTransform rectTransform, Vector2 position) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.anchoredPosition = position; return rectTransform; } public static RectTransform SetSizeDelta(this RectTransform rectTransform, Vector2 sizeDelta) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.sizeDelta = sizeDelta; return rectTransform; } } public static class ScrollbarExtensions { public static T SetDirection<T>(this T scrollbar, Direction direction) where T : Scrollbar { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((Scrollbar)scrollbar).direction = direction; return scrollbar; } public static T SetHandleRect<T>(this T scrollbar, RectTransform handleRect) where T : Scrollbar { ((Scrollbar)scrollbar).handleRect = handleRect; return scrollbar; } } public static class SelectableExtensions { public static T SetColors<T>(this T selectable, ColorBlock colors) where T : Selectable { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((Selectable)selectable).colors = colors; return selectable; } public static T SetImage<T>(this T selectable, Image image) where T : Selectable { ((Selectable)selectable).image = image; return selectable; } public static T SetInteractable<T>(this T selectable, bool interactable) where T : Selectable { ((Selectable)selectable).interactable = interactable; return selectable; } public static T SetSpriteState<T>(this T selectable, SpriteState spriteState) where T : Selectable { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((Selectable)selectable).spriteState = spriteState; return selectable; } public static T SetTargetGraphic<T>(this T selectable, Graphic graphic) where T : Selectable { ((Selectable)selectable).targetGraphic = graphic; return selectable; } public static T SetTransition<T>(this T selectable, Transition transition) where T : Selectable { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((Selectable)selectable).transition = transition; return selectable; } public static T SetNavigationMode<T>(this T selectable, Mode mode) where T : Selectable { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: 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) Navigation navigation = ((Selectable)selectable).navigation; ((Navigation)(ref navigation)).mode = mode; ((Selectable)selectable).navigation = navigation; return selectable; } } public static class SliderExtensions { public static T SetDirection<T>(this T slider, Direction direction) where T : Slider { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((Slider)slider).direction = direction; return slider; } public static T SetFillRect<T>(this T slider, RectTransform fillRect) where T : Slider { ((Slider)slider).fillRect = fillRect; return slider; } public static T SetHandleRect<T>(this T slider, RectTransform handleRect) where T : Slider { ((Slider)slider).handleRect = handleRect; return slider; } public static T SetMaxValue<T>(this T slider, float maxValue) where T : Slider { ((Slider)slider).maxValue = maxValue; return slider; } public static T SetMinValue<T>(this T slider, float minValue) where T : Slider { ((Slider)slider).minValue = minValue; return slider; } public static T SetWholeNumbers<T>(this T slider, bool wholeNumbers) where T : Slider { ((Slider)slider).wholeNumbers = wholeNumbers; return slider; } } public static class ScrollRectExtensions { public static T SetContent<T>(this T scrollRect, RectTransform content) where T : ScrollRect { ((ScrollRect)scrollRect).content = content; return scrollRect; } public static T SetHorizontal<T>(this T scrollRect, bool horizontal) where T : ScrollRect { ((ScrollRect)scrollRect).horizontal = horizontal; return scrollRect; } public static T SetMovementType<T>(this T scrollRect, MovementType movementType) where T : ScrollRect { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((ScrollRect)scrollRect).movementType = movementType; return scrollRect; } public static T SetScrollSensitivity<T>(this T scrollRect, float sensitivity) where T : ScrollRect { ((ScrollRect)scrollRect).scrollSensitivity = sensitivity; return scrollRect; } public static T SetVertical<T>(this T scrollRect, bool vertical) where T : ScrollRect { ((ScrollRect)scrollRect).vertical = vertical; return scrollRect; } public static T SetVerticalScrollbar<T>(this T scrollRect, Scrollbar verticalScrollbar) where T : ScrollRect { ((ScrollRect)scrollRect).verticalScrollbar = verticalScrollbar; return scrollRect; } public static T SetVerticalScrollPosition<T>(this T scrollRect, float position) where T : ScrollRect { ((ScrollRect)scrollRect).verticalNormalizedPosition = position; return scrollRect; } public static T SetVerticalScrollbarVisibility<T>(this T scrollRect, ScrollbarVisibility visibility) where T : ScrollRect { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((ScrollRect)scrollRect).verticalScrollbarVisibility = visibility; return scrollRect; } public static T SetViewport<T>(this T scrollRect, RectTransform viewport) where T : ScrollRect { ((ScrollRect)scrollRect).viewport = viewport; return scrollRect; } } public static class TextMeshProExtensions { public static T SetAlignment<T>(this T tmpText, TextAlignmentOptions alignment) where T : TMP_Text { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((TMP_Text)tmpText).alignment = alignment; return tmpText; } public static T SetColor<T>(this T tmpText, Color color) where T : TMP_Text { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((Graphic)(object)tmpText).color = color; return tmpText; } public static T SetEnableAutoSizing<T>(this T tmpText, bool enableAutoSizing) where T : TMP_Text { ((TMP_Text)tmpText).enableAutoSizing = enableAutoSizing; return tmpText; } public static T SetFont<T>(this T tmpText, TMP_FontAsset font) where T : TMP_Text { ((TMP_Text)tmpText).font = font; return tmpText; } public static T SetFontSize<T>(this T tmpText, float fontSize) where T : TMP_Text { ((TMP_Text)tmpText).fontSize = fontSize; return tmpText; } public static T SetFontMaterial<T>(this T tmpText, Material fontMaterial) where T : TMP_Text { ((TMP_Text)tmpText).fontMaterial = fontMaterial; return tmpText; } public static T SetMargin<T>(this T tmpText, Vector4 margin) where T : TMP_Text { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((TMP_Text)tmpText).margin = margin; return tmpText; } public static T SetOverflowMode<T>(this T tmpText, TextOverflowModes overflowMode) where T : TMP_Text { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((TMP_Text)tmpText).overflowMode = overflowMode; return tmpText; } public static T SetRichText<T>(this T tmpText, bool richText) where T : TMP_Text { ((TMP_Text)tmpText).richText = richText; return tmpText; } public static T SetTextWrappingMode<T>(this T tmpText, TextWrappingModes textWrappingMode) where T : TMP_Text { //IL_0006: Unknown result type (might be due to invalid IL or missing references) ((TMP_Text)tmpText).textWrappingMode = textWrappingMode; return tmpText; } } public static class Texture2DExtensions { public static Texture2D SetFilterMode(this Texture2D texture, FilterMode filterMode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Texture)texture).filterMode = filterMode; return texture; } public static Texture2D SetWrapMode(this Texture2D texture, TextureWrapMode wrapMode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Texture)texture).wrapMode = wrapMode; return texture; } } public static class ToggleExtensions { public static T SetGraphic<T>(this T toggle, Graphic graphic) where T : Toggle { ((Toggle)toggle).graphic = graphic; return toggle; } public static T SetToggleTransition<T>(this T toggle, ToggleTransition toggleTransition) where T : Toggle { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) ((Toggle)toggle).toggleTransition = toggleTransition; return toggle; } } public static class UIResources { public static readonly ResourceCache<Sprite> SpriteCache = new ResourceCache<Sprite>(); public static readonly ResourceCache<Material> MaterialCache = new ResourceCache<Material>(); public static Sprite GetSprite(string spriteName) { return SpriteCache.GetResource(spriteName); } public static Material GetMaterial(string materialName) { return MaterialCache.GetResource(materialName); } } public sealed class ResourceCache<T> where T : Object { private readonly Dictionary<string, T> _cache = new Dictionary<string, T>(); public T GetResource(string resourceName) { if (!_cache.TryGetValue(resourceName, out var value)) { value = Resources.FindObjectsOfTypeAll<T>().FirstByNameOrThrow(resourceName); _cache[resourceName] = value; } return value; } } }