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 GoopUpgrades v1.0.1
GoopUpgrades.dll
Decompiled 5 months agousing System; using System.Diagnostics; using System.IO; 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 ExitGames.Client.Photon; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using REPOLib; using REPOLib.Modules; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("GoopUpgrades")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("GoopUpgrades")] [assembly: AssemblyCopyright("Copyright © GoopSwagger 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("809fa50d-9398-446b-86a3-eaa45523ae0b")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 GoopUpgrades { [BepInPlugin("GoopSwagger.GoopUpgrades", "GoopUpgrades", "1.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class GoopUpgradesPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(PlayerTumble))] public static class Patch_PlayerTumble { [HarmonyPatch("HitEnemy")] [HarmonyPostfix] private static void HitEnemyPostfix(PlayerTumble __instance) { //IL_0057: 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_00b1: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.IsMasterClientOrSingleplayer() || instance.upgradeTumbleBlast == null) { return; } int level = instance.upgradeTumbleBlast.GetLevel(SemiFunc.PlayerGetSteamID(__instance.playerAvatar)); if (level > 0) { TumbleBlastExplosion(level, __instance.playerAvatar.playerAvatarVisuals.colorIndex, ((Component)__instance.playerAvatar).transform.position); if (GameManager.Multiplayer()) { tumbleBlastExplosionEvent.RaiseEvent((object)new object[3] { level, __instance.playerAvatar.playerAvatarVisuals.colorIndex, ((Component)__instance.playerAvatar).transform.position }, NetworkingEvents.RaiseOthers, SendOptions.SendReliable); } } } } [HarmonyPatch(typeof(SemiFunc))] public static class Patch_SemiFunc { [HarmonyPatch("UIHideHealth")] [HarmonyPostfix] private static void UIHideHealthPostfix() { if ((Object)(object)ShieldUI.instance != (Object)null) { ((SemiUI)ShieldUI.instance).Hide(); } } } [HarmonyPatch(typeof(PlayerHealth))] public static class Patch_PlayerHealth { [HarmonyPatch("Awake")] [HarmonyPostfix] public static void AwakePostfix(PlayerHealth __instance) { if ((Object)(object)((Component)__instance).GetComponent<PlayerShield>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<PlayerShield>(); } } [HarmonyPatch("Start")] [HarmonyPostfix] public static void StartPostfix(PlayerHealth __instance) { PlayerShield component = ((Component)__instance).GetComponent<PlayerShield>(); try { if ((Object)(object)component != (Object)null && instance.upgradeShield != null && (Object)(object)__instance.playerAvatar != (Object)null) { int num = (component.shieldMax = (component.shieldValue = 10 * instance.upgradeShield.GetLevel(SemiFunc.PlayerGetSteamID(__instance.playerAvatar)))); if (GameManager.Multiplayer()) { __instance.photonView.RPC("UpdateShieldRPC", (RpcTarget)1, new object[3] { num, num, false }); } } } catch (NullReferenceException) { } } [HarmonyPatch("Hurt")] [HarmonyPrefix] private static void HurtPrefix(PlayerHealth __instance, ref int damage, bool savingGrace, int enemyIndex = -1) { if (damage > 0) { PlayerShield component = ((Component)__instance).GetComponent<PlayerShield>(); component.regenerationTimer = 15f; if (savingGrace && component.shieldValue > 0 && __instance.health > 0) { damage = component.DamageShield(__instance, damage); } } } [HarmonyPatch("HurtOther")] [HarmonyPrefix] private static void HurtOtherPrefix(PlayerHealth __instance, ref int damage, bool savingGrace, int enemyIndex = -1) { if (damage > 0) { ((Component)__instance).GetComponent<PlayerShield>().regenerationTimer = 15f; } } } [HarmonyPatch(typeof(PlayerAvatar))] public static class Patch_PlayerAvatar { [HarmonyPatch("Revive")] [HarmonyPostfix] public static void RevivePostfix(PlayerAvatar __instance) { PlayerShield component = ((Component)((Component)__instance).GetComponent<PlayerHealth>()).GetComponent<PlayerShield>(); if (instance.upgradeShield != null && (Object)(object)__instance != (Object)null) { component.regenerationTimer = 15f; component.shieldValue = 0; } } } [HarmonyPatch(typeof(EnergyUI))] public static class Patch_EnergyUI { private static bool offset; [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPostfix(EnergyUI __instance) { offset = false; } [HarmonyPatch("Update")] [HarmonyPostfix] private static void UpdatePostfix(EnergyUI __instance) { //IL_004d: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)PlayerController.instance == (Object)null) && PlayerController.instance.playerSteamID != null && instance.upgradeShield != null) { int level = instance.upgradeShield.GetLevel(PlayerController.instance.playerSteamID); if (level > 0 && !offset) { ((SemiUI)__instance).showPosition = ((SemiUI)__instance).showPosition + new Vector2(0f, -31f); ((SemiUI)__instance).hidePosition = ((SemiUI)__instance).hidePosition + new Vector2(0f, -31f); offset = true; } else if (level <= 0 && offset) { ((SemiUI)__instance).showPosition = ((SemiUI)__instance).showPosition - new Vector2(0f, -31f); ((SemiUI)__instance).hidePosition = ((SemiUI)__instance).hidePosition - new Vector2(0f, -31f); offset = false; } } } } [HarmonyPatch(typeof(OverchargeUI))] public static class Patch_OverchargeUI { private static bool offset; [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPostfix(OverchargeUI __instance) { offset = false; } [HarmonyPatch("Update")] [HarmonyPostfix] private static void UpdatePostfix(OverchargeUI __instance) { //IL_004d: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)PlayerController.instance == (Object)null) && PlayerController.instance.playerSteamID != null && instance.upgradeShield != null) { int level = instance.upgradeShield.GetLevel(PlayerController.instance.playerSteamID); if (level > 0 && !offset) { ((SemiUI)__instance).showPosition = ((SemiUI)__instance).showPosition + new Vector2(0f, -31f); ((SemiUI)__instance).hidePosition = ((SemiUI)__instance).hidePosition + new Vector2(0f, -31f); offset = true; } else if (level <= 0 && offset) { ((SemiUI)__instance).showPosition = ((SemiUI)__instance).showPosition - new Vector2(0f, -31f); ((SemiUI)__instance).hidePosition = ((SemiUI)__instance).hidePosition - new Vector2(0f, -31f); offset = false; } } } } public static GoopUpgradesPlugin instance; public const string PluginGUID = "GoopSwagger.GoopUpgrades"; public const string PluginName = "GoopUpgrades"; public const string PluginAuthor = "GoopSwagger"; public const string PluginVersion = "1.0.1"; public const float SHIELD_CHARGE_DELAY = 15f; public const int SHIELD_PER_UPGRADE = 10; public static bool ignoreShield; public PlayerUpgrade upgradeTumbleBlast; public PlayerUpgrade upgradeShield; private AssetBundle assetBundle; public static NetworkedEvent tumbleBlastExplosionEvent; private void Awake() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Expected O, but got Unknown if ((Object)(object)instance == (Object)null) { instance = this; } ((BaseUnityPlugin)this).Logger.LogInfo((object)"You've got yourself a winner here..."); new Harmony("GoopSwagger.GoopUpgrades").PatchAll(); string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "goopupgrades"); string text2 = "Upgrades"; ConfigEntry<bool> enableTumbleBlast = ((BaseUnityPlugin)instance).Config.Bind<bool>(new ConfigDefinition(text2, "Enable Tumble Blast"), true, (ConfigDescription)null); ConfigEntry<bool> enableShield = ((BaseUnityPlugin)instance).Config.Bind<bool>(new ConfigDefinition(text2, "Enable Shield"), true, (ConfigDescription)null); BundleLoader.LoadBundle(text, (Action<AssetBundle>)delegate(AssetBundle assetBundle) { instance.assetBundle = assetBundle; if (enableTumbleBlast.Value) { GameObject upgradeItem = assetBundle.LoadAsset<GameObject>("Item Upgrade Player Tumble Blast"); upgradeTumbleBlast = Upgrade(upgradeItem, "Tumble Blast", "TumbleBlast", 2, null); } if (enableShield.Value) { GameObject upgradeItem2 = assetBundle.LoadAsset<GameObject>("Item Upgrade Player Shield"); upgradeShield = Upgrade(upgradeItem2, "Shield", "Shield", 1, delegate(PlayerAvatar player, int value) { ((SemiUI)EnergyUI.instance).Update(); if (SemiFunc.IsMasterClientOrSingleplayer()) { PlayerShield component = ((Component)player.playerHealth).GetComponent<PlayerShield>(); if ((Object)(object)component != (Object)null) { component.shieldValue += 10; component.shieldMax += 10; if (GameManager.Multiplayer()) { player.playerHealth.photonView.RPC("UpdateShieldRPC", (RpcTarget)1, new object[3] { component.shieldValue, component.shieldMax, false }); } } } }); } }, false); SceneManager.sceneLoaded += OnSceneLoaded; tumbleBlastExplosionEvent = new NetworkedEvent("Tumble Blast Explosion", (Action<EventData>)HandleTumbleBlastExplosionEvent); } private static void HandleTumbleBlastExplosionEvent(EventData eventData) { //IL_0032: 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_0039: Unknown result type (might be due to invalid IL or missing references) int level = (int)((object[])eventData.CustomData)[0]; int colorIndex = (int)((object[])eventData.CustomData)[1]; Vector3 position = (Vector3)((object[])eventData.CustomData)[2]; TumbleBlastExplosion(level, colorIndex, position); } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { InitializeShieldUI(); } private void InitializeShieldUI() { if ((Object)(object)instance.assetBundle != (Object)null) { GameObject val = GameObject.Find("Game Hud"); if ((Object)(object)val != (Object)null && (Object)(object)val.transform.Find("Shield") == (Object)null) { Object.Instantiate<GameObject>(instance.assetBundle.LoadAsset<GameObject>("Shield")).transform.SetParent(val.transform, false); } } } private static PlayerUpgrade Upgrade(GameObject upgradeItem, string upgradeName, string upgradeId, int maxAmountInShop, Action<PlayerAvatar, int> upgradeAction) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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) Item val = ScriptableObject.CreateInstance<Item>(); val.itemType = (itemType)3; val.emojiIcon = (emojiIcon)11; val.itemVolume = (itemVolume)6; string text2 = (((Object)val).name = "Item Upgrade Player " + upgradeName); string name = text2; val.itemName = upgradeName + " Upgrade"; val.maxAmount = 10; val.maxAmountInShop = maxAmountInShop; val.maxPurchaseAmount = 0; val.maxPurchase = val.maxPurchaseAmount > 0; Value val2 = ScriptableObject.CreateInstance<Value>(); val2.valueMin = 2250f; val2.valueMax = 3000f; val.value = val2; ((Object)upgradeItem).name = name; ItemAttributes component = upgradeItem.GetComponent<ItemAttributes>(); component.item = val; REPOLibItemUpgrade component2 = upgradeItem.GetComponent<REPOLibItemUpgrade>(); AccessTools.Field(typeof(REPOLibItemUpgrade), "_upgradeId").SetValue(component2, upgradeId); Items.RegisterItem(component); return Upgrades.RegisterUpgrade(upgradeId, val, (Action<PlayerAvatar, int>)null, upgradeAction); } private static void TumbleBlastExplosion(int level, int colorIndex, Vector3 position) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: 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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) ExplosionPreset obj = instance.assetBundle.LoadAsset<ExplosionPreset>("Tumble Blast Preset"); GameObject obj2 = Resources.Load<GameObject>("Effects/Part Prefab Explosion"); float num = 1.2f + (float)(level - 1) * 0.2f; ParticlePrefabExplosion component = Object.Instantiate<GameObject>(obj2, position, Quaternion.identity).GetComponent<ParticlePrefabExplosion>(); component.forceMultiplier = 5f; component.explosionSize = ((num > 1.8f) ? 1.8f : num); component.explosionDamage = 20 + (level - 1) * 15; component.explosionDamageEnemy = 40 + (level - 1) * 15; component.lightColorOverTime = new Gradient(); ColorOverLifetimeModule colorOverLifetime = component.particleFire.colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(AssetManager.instance.playerColors[colorIndex]); colorOverLifetime = component.particleSmoke.colorOverLifetime; component.particleFire.Play(); component.particleSmoke.Play(); ((Behaviour)component.light).enabled = true; obj.explosionSoundSmall.Play(position, 1f, 1f, 1f, 1f); } } public class PlayerShield : MonoBehaviour, IPunObservable { private PhotonView photonView; public int shieldValue; public int shieldMax; public float regenerationTimer; private PlayerHealth playerHealth => NestedComponentUtilities.GetParentComponent<PlayerHealth>(((Component)this).transform); public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { throw new NotImplementedException(); } private void Awake() { photonView = ((Component)this).GetComponentInParent<PhotonView>(); } private void Update() { if (SemiFunc.IsMasterClientOrSingleplayer() && regenerationTimer > 0f) { regenerationTimer -= Time.deltaTime; while (regenerationTimer <= 0f && shieldValue < shieldMax) { regenerationTimer += 1.2f; shieldValue++; } if (GameManager.Multiplayer()) { photonView.RPC("UpdateShieldRPC", (RpcTarget)1, new object[3] { shieldValue, shieldMax, false }); } } } public int DamageShield(PlayerHealth playerHealth, int damage) { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Invalid comparison between Unknown and I4 if (playerHealth.invincibleTimer > 0f || damage <= 0 || (GameManager.Multiplayer() && !photonView.IsMine) || playerHealth.playerAvatar.deadSet || playerHealth.godMode || (int)GameDirector.instance.currentState != 2) { return damage; } regenerationTimer = 15f; int num = shieldValue - damage; if (num < 0) { shieldValue = 0; if (GameManager.Multiplayer()) { photonView.RPC("UpdateShieldRPC", (RpcTarget)1, new object[3] { shieldValue, shieldMax, false }); } return -num; } if (damage >= 25) { CameraGlitch.Instance.PlayLongHurt(); } else { CameraGlitch.Instance.PlayShortHurt(); } shieldValue = num; if (GameManager.Multiplayer()) { photonView.RPC("UpdateShieldRPC", (RpcTarget)1, new object[3] { shieldValue, shieldMax, true }); } return 0; } [PunRPC] public void UpdateShieldRPC(int shieldValue, int shieldMax, bool effect, PhotonMessageInfo _info = default(PhotonMessageInfo)) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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) if (!SemiFunc.MasterAndOwnerOnlyRPC(_info, photonView)) { return; } if (effect) { playerHealth.materialEffect = true; if (!playerHealth.playerAvatar.deadSet) { playerHealth.materialEffectLerp = 0f; } if (shieldValue < this.shieldValue) { if (shieldValue > 0) { playerHealth.hurtOther.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } playerHealth.hurtFreeze = true; foreach (Material instancedMaterial in playerHealth.instancedMaterials) { if ((Object)(object)instancedMaterial != (Object)(object)playerHealth.eyeMaterial && (Object)(object)instancedMaterial != (Object)(object)playerHealth.pupilMaterial) { instancedMaterial.SetColor(playerHealth.materialHurtColor, new Color(0.25f, 0.5f, 1f)); } } } } if (shieldValue < this.shieldValue) { regenerationTimer = 15f; } this.shieldValue = shieldValue; this.shieldMax = shieldMax; } } public class ShieldUI : SemiUI { public TextMeshProUGUI Text; public static ShieldUI instance; public TextMeshProUGUI textEnergyMax; public Vector3 maxEnergyBasePosition; public float maxEnergyPrevOffset; public int shieldValue; public int shieldPrev; public override void Start() { //IL_003f: 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) ((SemiUI)this).Start(); Text = ((Component)this).GetComponent<TextMeshProUGUI>(); instance = this; textEnergyMax = ((Component)((Component)this).transform.Find("ShieldMax")).GetComponent<TextMeshProUGUI>(); maxEnergyBasePosition = ((TMP_Text)textEnergyMax).transform.localPosition; } public override void Update() { //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) ((SemiUI)this).Update(); if (!PlayerAvatar.instance.isDisabled) { if (GoopUpgradesPlugin.instance.upgradeShield == null || GoopUpgradesPlugin.instance.upgradeShield.GetLevel(SemiFunc.PlayerGetSteamID(PlayerAvatar.instance)) == 0) { ((SemiUI)this).Hide(); } } else { ((SemiUI)this).Hide(); } if (base.isHidden || !((Object)(object)PlayerAvatar.instance.playerHealth != (Object)null)) { return; } PlayerShield component = ((Component)PlayerAvatar.instance.playerHealth).GetComponent<PlayerShield>(); if (!Object.op_Implicit((Object)(object)component)) { return; } shieldValue = component.shieldValue; if (shieldValue != shieldPrev) { ((SemiUI)this).SemiUISpringShakeY(4f, 5f, 0.25f); Color val = Color.white; if (shieldValue < shieldPrev) { val = Color.red; } ((SemiUI)this).SemiUITextFlashColor(val, 0.2f); ((SemiUI)this).SemiUISpringScale(0.3f, 5f, 0.125f); shieldPrev = shieldValue; } ((TMP_Text)Text).text = component.shieldValue.ToString(); float num = ((((TMP_Text)Text).text.Length > 3) ? ((float)(((TMP_Text)Text).text.Length - 3) * 20f) : 0f); ((TMP_Text)textEnergyMax).transform.localPosition = maxEnergyBasePosition + new Vector3(num, 0f, 0f); ((TMP_Text)textEnergyMax).text = "<b><color=blue>/</color></b>" + component.shieldMax; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }