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 Skill Bar Visibility v0.1.1
SkillBarVisibility.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using HarmonyLib; using Jotunn; using Jotunn.Entities; using Jotunn.Managers; using UnityEngine; 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: AssemblyTitle("SkillBarVisibility")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("SkillBarVisibility")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("0.0.1")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.1.0")] namespace SkillBarVisibility; [BepInPlugin("Lisonna.SkillBarVisibility", "SkillBarVisibility", "0.0.1")] [BepInProcess("valheim.exe")] [BepInDependency(/*Could not decode attribute arguments.*/)] internal class SkillBarVisibility : BaseUnityPlugin { public class SkillBarContainer : MonoBehaviour { private GameObject m_container = new GameObject("SkillBarContainer", new Type[1] { typeof(RectTransform) }); private Dictionary<SkillType, GameObject> m_skillBars = new Dictionary<SkillType, GameObject>(); private GameObject[] m_activeBars = (GameObject[])(object)new GameObject[30]; public SkillBarContainer() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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_0128: Unknown result type (might be due to invalid IL or missing references) //IL_013e: 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_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected O, but got Unknown //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) m_container.transform.SetParent(GUIManager.CustomGUIBack.transform, false); m_container.GetComponent<RectTransform>().anchoredPosition = new Vector2(s_containerXOffset, s_containerYOffset); foreach (SkillType value2 in Enum.GetValues(typeof(SkillType))) { SkillType val = value2; if (s_iconSpriteNames.TryGetValue(val, out var value)) { Sprite prefab = Cache.GetPrefab<Sprite>(value); UIExtensions.ProgressBarConfig config = new UIExtensions.ProgressBarConfig { icon = prefab, name = ((object)(SkillType)(ref val)).ToString(), height = s_barHeight, width = s_barWidth, enableIcon = true, valueScale = 10f, bgColor = new Color(0f, 0f, 0f, 0.7f), bgSprite = s_skillBarBkg, fgColor = GUIManager.Instance.ValheimBeige, fgSprite = s_skillBarFrg }; GameObject val2 = new GameObject("SkillBar " + value); SkillBar skillBar = val2.AddComponent<SkillBar>(); skillBar.Init(m_container.transform, config, val, this); val2.SetActive(false); m_skillBars.Add(val, val2); } } m_container.SetActive(true); } public void InitializeSkillBars(Player player) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) Skills skills = ((Character)player).GetSkills(); foreach (GameObject value in m_skillBars.Values) { Logger.LogInfo((object)"test1"); SkillBar component = value.GetComponent<SkillBar>(); Logger.LogInfo((object)"test2"); Skill skill = skills.GetSkill(component.m_skillType); Logger.LogInfo((object)"test3"); if (skill != null) { component.UpdateSkill(skill, suppressShow: true); } else { component.ResetBar(); } } } public void UpdateSkill(SkillType skillType) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) if (m_skillBars.TryGetValue(skillType, out var value)) { value.GetComponent<SkillBar>().UpdateSkill(); } } public GameObject GetSkillBar(SkillType skillType) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) m_skillBars.TryGetValue(skillType, out var value); return value; } public void BarEnabled(GameObject bar) { if (m_activeBars.Contains(bar)) { return; } for (int i = 0; i < m_activeBars.Count(); i++) { if ((Object)(object)m_activeBars[i] == (Object)null) { m_activeBars[i] = bar; bar.GetComponent<SkillBar>().SetYOffset((s_barHeight + s_barPadding) * (float)i * -1f); break; } } } public void BarDisabled(GameObject bar) { for (int i = 0; i < m_activeBars.Count(); i++) { if ((Object)(object)m_activeBars[i] == (Object)(object)bar) { m_activeBars[i] = null; break; } } } public void OnDestroy() { Logger.LogInfo((object)"skillbarcontainer destroyed?"); s_skillBarContainer = null; } } public class SkillBar : UIExtensions.ProgressBar { public SkillType m_skillType; public Skill m_skill; private SkillBarContainer m_container; private float m_level; private bool m_suppressDisable; public void Init(Transform parent, UIExtensions.ProgressBarConfig config, SkillType skillType, SkillBarContainer sbc, float startingValue = 0f) { //IL_000d: 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) base.Init(parent, config, startingValue); m_skillType = skillType; m_container = sbc; m_suppressDisable = true; } public void Init(Transform parent, UIExtensions.ProgressBarConfig config, SkillType skillType, float startingValue = 0f) { //IL_000d: 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) base.Init(parent, config, startingValue); m_skillType = skillType; m_suppressDisable = true; } public void UpdateSkill(Skill skill, bool suppressShow = false) { m_skill = skill; UpdateValues(suppressShow); } public void UpdateSkill(bool suppressShow = false) { UpdateValues(suppressShow); } private void UpdateValues(bool suppressShow = false) { //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) float level = m_level; m_level = m_skill.m_level; float currentValue = GetCurrentValue(); float num = GetTotalValue() - currentValue; SetCenterText(((int)m_skill.m_level).ToString()); SetCurrentValue(m_skill.m_accumulator); SetTotal(m_skill.GetNextLevelRequirement()); if (!suppressShow) { EnableSkillBar(); if (s_showGainText && level <= m_level) { ((Component)this).gameObject.AddComponent<UIExtensions.MovingText>().Init(new UIExtensions.MovingTextConfig { duration = 3f, relativeEndFromStart = new Vector2(125f, 0f), disableTextOnEnd = true, deactivateGameObjectAfter = false }, new UIExtensions.TextObjectConfig { text = "+" + FormatValueText((level < m_level) ? num : (m_skill.m_accumulator - currentValue)), fontSize = 16, color = Color.green, xOffset = -75f }); } } } private void EnableSkillBar() { ((Component)this).gameObject.SetActive(true); ((Behaviour)this).enabled = true; SetAlpha(1f); UIExtensions.UIAnimation.StartFaderAfterTime(((Component)this).gameObject, s_barVisibilityDuration, s_fadeoutDuration); m_container?.BarEnabled(((Component)this).gameObject); } public void ResetBar() { SetCurrentValue(0f); SetTotal(1f); SetCenterText("1"); } public void OnDisable() { if (!m_suppressDisable) { m_container?.BarDisabled(((Component)this).gameObject); } else { m_suppressDisable = false; } } } [HarmonyPatch(typeof(Skill), "Raise")] private class Skill_Patches { [HarmonyPostfix] private static void Postfix(Skill __instance) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) UpdateSkillBar(__instance.m_info.m_skill); } } [HarmonyPatch(typeof(Skills), "LowerAllSkills")] private class Skills_Patches { [HarmonyPostfix] private static void Postfix(Skills __instance) { if ((Object)(object)Player.m_localPlayer == (Object)(object)__instance.m_player) { s_skillBarContainer.InitializeSkillBars(__instance.m_player); } } } [HarmonyPatch(typeof(Player), "Load")] private class PlayerLoad_Patches { [HarmonyPostfix] private static void Postfix(Player __instance) { if ((Object)(object)Player.m_localPlayer == (Object)(object)__instance) { int width = Screen.width; int height = Screen.height; Logger.LogInfo((object)("Current resolution: " + width + "x" + height)); if ((Object)(object)s_skillBarContainer == (Object)null) { s_skillBarContainer = new SkillBarContainer(); s_skillBarContainer.InitializeSkillBars(__instance); } } } } public const string PluginGUID = "Lisonna.SkillBarVisibility"; public const string PluginName = "SkillBarVisibility"; public const string PluginVersion = "0.0.1"; public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); private readonly Harmony harmony = new Harmony("Lisonna.SkillBarVisibility"); public static SkillBarContainer s_skillBarContainer; private static Dictionary<SkillType, string> s_iconSpriteNames = new Dictionary<SkillType, string> { { (SkillType)1, "SwordIron" }, { (SkillType)2, "knife_flint" }, { (SkillType)3, "club" }, { (SkillType)4, "AtgeirBronze" }, { (SkillType)5, "SpearFlint" }, { (SkillType)6, "shield_banded1" }, { (SkillType)7, "axe_iron" }, { (SkillType)8, "bow" }, { (SkillType)9, "elemental_magic" }, { (SkillType)10, "blood_magic" }, { (SkillType)11, "hands" }, { (SkillType)12, "pickaxe_stone" }, { (SkillType)13, "skill_woodcutting" }, { (SkillType)14, "crossbow_arbalest" }, { (SkillType)100, "skill_jump" }, { (SkillType)101, "skill_sneak" }, { (SkillType)102, "skill_run" }, { (SkillType)103, "skill_swim" }, { (SkillType)104, "fishingrod" }, { (SkillType)105, "meat_cooked" }, { (SkillType)106, "cultivator_bronze" }, { (SkillType)107, "hammer" }, { (SkillType)108, "skill_dodge" }, { (SkillType)110, "SadleLox" } }; private static Dictionary<SkillType, Sprite> s_skillSprites = new Dictionary<SkillType, Sprite>(); private static Sprite s_skillBarBkg; private static Sprite s_skillBarFrg; public static float s_containerXOffset = -800f; public static float s_containerYOffset = 0f; public static float s_barWidth = 250f; public static float s_barHeight = 20f; public static float s_barPadding = 4f; public static float s_barVisibilityDuration = 5f; public static float s_fadeoutDuration = 2f; public static bool s_showGainText = true; private void Awake() { PrefabManager.OnVanillaPrefabsAvailable += OnPrefabsAvail; harmony.PatchAll(); } private void OnPrefabsAvail() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) foreach (KeyValuePair<SkillType, string> s_iconSpriteName in s_iconSpriteNames) { Sprite prefab = Cache.GetPrefab<Sprite>(s_iconSpriteName.Value); if ((Object)(object)prefab != (Object)null) { s_skillSprites.Add(s_iconSpriteName.Key, prefab); } } s_skillBarBkg = Cache.GetPrefab<Sprite>("skill_bkg"); s_skillBarFrg = Cache.GetPrefab<Sprite>("bar_food_8"); PrefabManager.OnVanillaPrefabsAvailable -= OnPrefabsAvail; } private void OnDestroy() { harmony.UnpatchSelf(); } public static void UpdateSkillBar(SkillType skillType) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) s_skillBarContainer.UpdateSkill(skillType); } } public static class RectTransformExtensions { public static void SetElementSize(this RectTransform rtf, float width, float height) { rtf.SetSizeWithCurrentAnchors((Axis)0, width); rtf.SetSizeWithCurrentAnchors((Axis)1, height); } } internal class UIExtensions { public static class AnchorPoint { public static readonly Vector2 TopLeft = new Vector2(0f, 1f); public static readonly Vector2 Top = new Vector2(0.5f, 1f); public static readonly Vector2 TopRight = new Vector2(1f, 1f); public static readonly Vector2 Left = new Vector2(0f, 0.5f); public static readonly Vector2 Center = new Vector2(0.5f, 0.5f); public static readonly Vector2 Right = new Vector2(1f, 0.5f); public static readonly Vector2 BottomLeft = new Vector2(0f, 0f); public static readonly Vector2 Bottom = new Vector2(0.5f, 0f); public static readonly Vector2 BottomRight = new Vector2(1f, 0f); public static Vector2 Reverse(Vector2 vector) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) return new Vector2(1f - vector.x, 1f - vector.y); } public static void SetChildPointToParentPoint(RectTransform rtf, Vector2 childPoint, Vector2 parentPoint, float xOffset = 0f, float yOffset = 0f) { //IL_0002: 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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) rtf.anchorMin = parentPoint; rtf.anchorMax = rtf.anchorMin; rtf.pivot = childPoint; rtf.anchoredPosition = new Vector2(xOffset, yOffset); } public static void SetChildToFillParent(RectTransform rtf) { //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) //IL_0026: 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) rtf.anchorMin = BottomLeft; rtf.anchorMax = TopRight; rtf.pivot = Center; rtf.sizeDelta = Vector2.zero; rtf.anchoredPosition = Vector2.zero; } public static GameObject CreateGOAndSetParentPoint(string name, Transform parent, Vector2 childPoint, Vector2 parentPoint, float xOffset = 0f, float yOffset = 0f, params Type[] components) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name, components); val.transform.SetParent(parent, false); SetChildPointToParentPoint(ExposedGameObjectExtension.GetOrAddComponent<RectTransform>(val), childPoint, parentPoint, xOffset, yOffset); return val; } public static GameObject CreateGOAndSetChildFillParent(string name, Transform parent, params Type[] components) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateGOAndSetParentPoint(name, parent, Center, Center, 0f, 0f, components); SetChildToFillParent(val.GetComponent<RectTransform>()); return val; } } public class RectangleConfig { } public class TextObjectConfig { public string text = ""; private int _fontSize = 16; public bool outline = true; public Color color; public Font font = GUIManager.Instance.AveriaSerif; public float xOffset = 0f; public float yOffset = 0f; public int fontSize { get { return _fontSize; } set { if (value > 0) { _fontSize = value; return; } throw new ArgumentOutOfRangeException("value", "Fontsize must be a positive, non-zero value"); } } } public class ProgressBarConfig { private float _height = 20f; private float _width = 200f; public float xOffset = 0f; public float yOffset = 0f; private float _total = 100f; public Sprite icon; public bool enableIcon = false; public bool flipIconPosition = false; public Color bgColor = Color.black; public Color fgColor = Color.white; public Sprite bgSprite; public Sprite fgSprite; public Direction direction = (Direction)0; public bool inverse = false; public string name = ""; public string centerText = ""; public int fontSize = 16; public int valueTextDecimals = 0; public float valueScale = 1f; public float height { get { return _height; } set { if (value > 0f) { _height = value; return; } throw new ArgumentOutOfRangeException("value", "Height must be a positive, non-zero value"); } } public float width { get { return _width; } set { if (value > 0f) { _width = value; return; } throw new ArgumentOutOfRangeException("value", "Width must be a positive, non-zero value"); } } public float total { get { return _total; } set { if (value > 0f) { _total = value; return; } throw new ArgumentOutOfRangeException("value", "Total must be a positive, non-zero value"); } } } public class ProgressBar : MonoBehaviour { public ProgressBarConfig m_config; protected GameObject m_barsContainer; protected GameObject m_backgroundBar; protected GameObject m_foregroundBar; protected Slider m_sliderBar; protected GameObject m_iconContainer; protected GameObject m_icon; protected GameObject m_textsContainer; protected GameObject m_valueText; protected GameObject m_totalText; protected GameObject m_centerText; public virtual void Init(Transform parent, ProgressBarConfig config, float startingValue) { m_config = config; SetupContainer(parent); SetupIcon(); SetupBars(); SetupSlider(startingValue); SetupTexts(); ((Component)this).gameObject.SetActive(true); } private void SetupContainer(Transform parent) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) RectTransform orAddComponent = ExposedGameObjectExtension.GetOrAddComponent<RectTransform>(((Component)this).gameObject); ((Component)this).gameObject.transform.SetParent(parent, false); orAddComponent.SetElementSize(m_config.width, m_config.height); AnchorPoint.SetChildPointToParentPoint(orAddComponent, AnchorPoint.Center, AnchorPoint.Center, m_config.xOffset, m_config.yOffset); ((Component)this).gameObject.AddComponent<CanvasGroup>(); } public void SetName(string name) { m_config.name = name; } public void SetAlpha(float alpha) { alpha = Mathf.Clamp01(alpha); ((Component)this).gameObject.GetComponent<CanvasGroup>().alpha = alpha; } public void SetXOffset(float x, bool relative = false) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) RectTransform component = ((Component)this).gameObject.GetComponent<RectTransform>(); if (relative) { component.anchoredPosition += new Vector2(x, 0f); } else { component.anchoredPosition = new Vector2(x, component.anchoredPosition.y); } m_config.xOffset = component.anchoredPosition.x; } public void SetYOffset(float y, bool relative = false) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) RectTransform component = ((Component)this).gameObject.GetComponent<RectTransform>(); if (relative) { component.anchoredPosition += new Vector2(0f, y); } else { component.anchoredPosition = new Vector2(component.anchoredPosition.x, y); } m_config.yOffset = component.anchoredPosition.y; } public void SetHeight(float height) { m_config.height = height; ((Component)this).gameObject.GetComponent<RectTransform>().SetElementSize(m_config.width, m_config.height); SetIconSize(); } public void SetWidth(float width) { m_config.width = width; ((Component)this).gameObject.GetComponent<RectTransform>().SetElementSize(m_config.width, m_config.height); SetIconSize(); } private void SetupIcon() { //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) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) m_iconContainer = AnchorPoint.CreateGOAndSetParentPoint("ProgressBarIconContainer", ((Component)this).gameObject.transform, GetIconAnchor(), AnchorPoint.Reverse(GetIconAnchor()), 0f, 0f, typeof(RectTransform)); ((Graphic)m_iconContainer.AddComponent<Image>()).color = Color.black; m_icon = AnchorPoint.CreateGOAndSetChildFillParent("ProgressBarIcon", m_iconContainer.transform, typeof(RectTransform)); m_icon.AddComponent<Image>().sprite = m_config.icon; SetIconSize(); m_iconContainer.SetActive(m_config.enableIcon); } private void SetIconSize() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) if (GetIconAnchor().y == 0.5f) { m_iconContainer.GetComponent<RectTransform>().SetElementSize(m_config.height, m_config.height); } else { m_iconContainer.GetComponent<RectTransform>().SetElementSize(m_config.width, m_config.width); } } private Vector2 GetIconAnchor() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_0021: 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) return m_config.flipIconPosition ? AnchorPoint.Reverse(GetFilledEndPoint()) : GetFilledEndPoint(); } public void SetIcon(Sprite icon) { m_config.icon = icon; m_icon.GetComponent<Image>().sprite = icon; } public void EnableIcon() { m_config.enableIcon = true; m_iconContainer.SetActive(true); } public void DisableIcon() { m_config.enableIcon = false; m_iconContainer.SetActive(false); } public void SetFlipIconPosition(bool flip) { m_config.flipIconPosition = flip; SetIconAnchors(); } private void SetIconAnchors() { //IL_000d: 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_0018: Unknown result type (might be due to invalid IL or missing references) AnchorPoint.SetChildPointToParentPoint(((Component)this).gameObject.GetComponent<RectTransform>(), GetIconAnchor(), AnchorPoint.Reverse(GetIconAnchor())); } private void SetupBars() { //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) m_barsContainer = AnchorPoint.CreateGOAndSetChildFillParent("ProgressBarBars", ((Component)this).gameObject.transform, typeof(RectTransform)); m_backgroundBar = AnchorPoint.CreateGOAndSetChildFillParent("ProgressBarBgBar", m_barsContainer.transform, typeof(RectTransform)); ((Graphic)m_backgroundBar.AddComponent<Image>()).color = m_config.bgColor; m_backgroundBar.GetComponent<Image>().sprite = m_config.bgSprite; m_foregroundBar = AnchorPoint.CreateGOAndSetChildFillParent("ProgressBarFgBar", m_barsContainer.transform, typeof(RectTransform)); ((Graphic)m_foregroundBar.AddComponent<Image>()).color = m_config.fgColor; m_foregroundBar.GetComponent<Image>().sprite = m_config.fgSprite; } private void SetupSlider(float startingValue) { //IL_0077: Unknown result type (might be due to invalid IL or missing references) m_sliderBar = m_barsContainer.AddComponent<Slider>(); m_sliderBar.fillRect = m_foregroundBar.GetComponent<RectTransform>(); ((Selectable)m_sliderBar).targetGraphic = (Graphic)(object)m_foregroundBar.GetComponent<Image>(); ((Selectable)m_sliderBar).transition = (Transition)0; ((Selectable)m_sliderBar).interactable = false; m_sliderBar.minValue = 0f; m_sliderBar.direction = m_config.direction; m_sliderBar.maxValue = m_config.total; m_sliderBar.SetValueWithoutNotify(startingValue); } public void SetBackgroundColor(Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: 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) m_config.bgColor = color; ((Graphic)m_backgroundBar.GetComponent<Image>()).color = color; } public void SetForegroundColor(Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: 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) m_config.fgColor = color; ((Graphic)m_foregroundBar.GetComponent<Image>()).color = color; } public void SetBackgroundSprite(Sprite sprite) { m_config.bgSprite = sprite; m_backgroundBar.GetComponent<Image>().sprite = sprite; } public void SetForegroundSprite(Sprite sprite) { m_config.fgSprite = sprite; m_foregroundBar.GetComponent<Image>().sprite = sprite; } public void SetDirection(Direction direction) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: 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) m_config.direction = direction; m_sliderBar.direction = direction; SetIconAnchors(); SetIconSize(); } private Vector2 GetFilledEndPoint() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected I4, but got Unknown //IL_0028: 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_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003a: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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) Direction direction = m_config.direction; Direction val = direction; return (Vector2)((int)val switch { 0 => AnchorPoint.Right, 1 => AnchorPoint.Left, 2 => AnchorPoint.Top, 3 => AnchorPoint.Bottom, _ => AnchorPoint.Right, }); } public void SetInverse(bool inverse) { m_config.inverse = inverse; SetCurrentValue(GetCurrentValue()); } private void SetupTexts() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) m_textsContainer = AnchorPoint.CreateGOAndSetChildFillParent("ProgressBarTextContainer", ((Component)this).gameObject.transform, typeof(RectTransform)); Vector2 filledEndPoint = GetFilledEndPoint(); m_totalText = CreateTextObject(m_textsContainer.transform, filledEndPoint, filledEndPoint, new TextObjectConfig { color = Color.white, fontSize = 18, text = FormatValueText(m_sliderBar.maxValue) }); m_valueText = CreateTextObject(m_textsContainer.transform, AnchorPoint.Reverse(filledEndPoint), AnchorPoint.Reverse(filledEndPoint), new TextObjectConfig { color = Color.white, fontSize = 18, text = FormatValueText(m_sliderBar.value) }); m_centerText = CreateTextObject(m_textsContainer.transform, AnchorPoint.Center, AnchorPoint.Center, new TextObjectConfig { color = Color.white, fontSize = 18, text = m_config.centerText }); } private void UpdateValueText() { m_valueText.GetComponent<Text>().text = FormatValueText(m_sliderBar.value); } private void UpdateTotalText() { m_totalText.GetComponent<Text>().text = FormatValueText(m_sliderBar.maxValue); } private void UpdateCenterText() { m_centerText.GetComponent<Text>().text = m_config.centerText; } protected string FormatValueText(float value) { return Math.Round(value * m_config.valueScale, m_config.valueTextDecimals, MidpointRounding.AwayFromZero).ToString(); } public void SetCenterText(string text) { m_config.centerText = text; UpdateCenterText(); } public float GetCurrentValue() { return m_sliderBar.value; } public float GetTotalValue() { return m_sliderBar.maxValue; } public ProgressBarConfig GetConfig() { return m_config; } public void SetTotal(float total) { m_config.total = total; m_sliderBar.maxValue = total; UpdateTotalText(); } public float SetCurrentValue(float value) { float value2 = m_sliderBar.value; m_sliderBar.SetValueWithoutNotify(m_config.inverse ? (m_config.total - value) : value); UpdateValueText(); return value2; } public void SetValueTextDecimalPlaces(int decimalPlaces) { m_config.valueTextDecimals = decimalPlaces; UpdateValueText(); } public void SetValueScale(float scale) { m_config.valueScale = scale; UpdateValueText(); UpdateTotalText(); } } public class UIAnimationConfig { public bool deactivateGameObjectAfter = false; private float _duration = 1f; public float duration { get { return _duration; } set { if (value >= 0f) { _duration = value; return; } throw new ArgumentOutOfRangeException("value", "Duration must not be negative."); } } } public abstract class UIAnimation : MonoBehaviour { public float m_duration; public float m_startTime; public bool m_disableGameObjOnEnd = true; public bool m_isCanceled = false; public bool m_isPaused = false; public static void StartFaderAfterTime(GameObject obj, float faderStart, float faderDuration, bool disableGameObjAfterFade = true) { obj.GetComponent<UITimedFunctionRun>()?.Cancel(); obj.GetComponent<UIFader>()?.Cancel(); obj.AddComponent<UITimedFunctionRun>().Init(new UITimedFunctionConfig { duration = faderStart, action = startFader }); void startFader() { obj.AddComponent<UIFader>().Init(new UIFaderConfig { duration = faderDuration, deactivateGameObjectAfter = disableGameObjAfterFade }); } } public virtual void Awake() { m_startTime = Time.time; } protected void Init(UIAnimationConfig config) { m_duration = config.duration; m_disableGameObjOnEnd = config.deactivateGameObjectAfter; } public virtual void Pause() { m_isPaused = true; } public virtual void Resume() { m_isPaused = false; } public virtual void Cancel() { m_isCanceled = true; ((Behaviour)this).enabled = false; } public virtual void Update() { if (!m_isPaused) { UpdateFunction(Time.time - m_startTime); if (m_duration > 0f && Time.time > m_startTime + m_duration) { ((Behaviour)this).enabled = false; } } else { m_startTime += Time.deltaTime; } } public virtual void UpdateFunction(float t) { } public virtual void OnDisable() { if (m_disableGameObjOnEnd && !m_isCanceled) { ((Component)this).gameObject.SetActive(false); } Object.Destroy((Object)(object)this); } } public class UITimedFunctionConfig : UIAnimationConfig { public Action action; } public class UITimedFunctionRun : UIAnimation { public UITimedFunctionConfig m_config; public void Init(UITimedFunctionConfig config) { Init((UIAnimationConfig)config); if (config.action == null) { ((Behaviour)this).enabled = false; Logger.LogWarning((object)"TimedFunction called without a function. Nothing will happen."); } m_config = config; } public override void OnDisable() { m_config.action?.Invoke(); base.OnDisable(); } } public class UIFaderConfig : UIAnimationConfig { } public class UIFader : UIAnimation { private CanvasGroup m_canvasGroup; public UIFaderConfig m_config; public override void Awake() { base.Awake(); m_canvasGroup = ExposedGameObjectExtension.GetOrAddComponent<CanvasGroup>(((Component)this).gameObject); } public void Init(UIFaderConfig config) { Init((UIAnimationConfig)config); m_config = config; } public override void Cancel() { m_canvasGroup.alpha = 1f; base.Cancel(); } public override void UpdateFunction(float t) { m_canvasGroup.alpha = GetAlpha(t); } public override void OnDisable() { m_canvasGroup.alpha = 1f; base.OnDisable(); } private float GetAlpha(float t) { return 1f - t / m_duration; } } public class MovingTextConfig : UIAnimationConfig { public Vector2 relativeEndFromStart = Vector2.zero; public bool disableTextOnEnd = true; } public class MovingText : UIAnimation { public GameObject m_textObject; private Vector2 m_endPosition; public MovingTextConfig m_config; public override void Awake() { base.Awake(); } public GameObject Init(MovingTextConfig config, TextObjectConfig textConfig) { //IL_0015: 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) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) Init(config); m_textObject = CreateTextObject(((Component)this).gameObject.transform, AnchorPoint.Center, AnchorPoint.Center, textConfig); m_config = config; m_endPosition = new Vector2(textConfig.xOffset + config.relativeEndFromStart.x, textConfig.yOffset + config.relativeEndFromStart.y); return m_textObject; } public override void UpdateFunction(float t) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_textObject != (Object)null && (Object)(object)m_textObject.GetComponent<RectTransform>() != (Object)null) { m_textObject.GetComponent<RectTransform>().anchoredPosition = Vector2.Lerp(m_textObject.GetComponent<RectTransform>().anchoredPosition, m_endPosition, Time.deltaTime); } } public override void OnDisable() { base.OnDisable(); if (m_config.disableTextOnEnd) { m_textObject.SetActive(false); } } } public static GameObject CreateTextObject(Transform parent, Vector2 childPoint, Vector2 parentPoint, TextObjectConfig config) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) GameObject val = AnchorPoint.CreateGOAndSetParentPoint("ProgressBarText", parent, childPoint, parentPoint, config.xOffset, config.yOffset, typeof(RectTransform), typeof(Text)); val.AddComponent<ContentSizeFitter>().horizontalFit = (FitMode)2; val.GetComponent<ContentSizeFitter>().verticalFit = (FitMode)2; Text component = val.GetComponent<Text>(); component.text = config.text; ((Graphic)component).color = config.color; component.font = config.font; component.fontSize = config.fontSize; if (config.outline) { Outline val2 = val.AddComponent<Outline>(); ((Shadow)val2).effectColor = Color.black; } return val; } }