Decompiled source of Rune Magic v1.2.1
RuneMagic.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using HarmonyLib; using SoftReferenceableAssets; using Steamworks; using TMPro; using UnityEngine; using UnityEngine.Experimental.Rendering; using UnityEngine.Rendering; using UnityEngine.UI; using ValheimMod.External; using ValheimMod.External.MiniJSON; using ValheimMod.Monobehaviours; using ValheimMod.Monobehaviours.Runes; using ValheimMod.Patches; using ValheimMod.Profiling; using ValheimMod.ScriptableObjects; using ValheimMod.Setup; using ValheimMod.Utilities; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("ValheimMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ValheimMod")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a1efb0fd-0465-47c9-8041-8ba880e78354")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] public class DeferredDecalSystem { private static DeferredDecalSystem m_Instance; internal HashSet<Decal> m_DecalsDiffuse = new HashSet<Decal>(); internal HashSet<Decal> m_DecalsNormals = new HashSet<Decal>(); internal HashSet<Decal> m_DecalsBoth = new HashSet<Decal>(); public static DeferredDecalSystem instance { get { if (m_Instance == null) { m_Instance = new DeferredDecalSystem(); } return m_Instance; } } public void AddDecal(Decal d) { RemoveDecal(d); } public void RemoveDecal(Decal d) { m_DecalsDiffuse.Remove(d); m_DecalsNormals.Remove(d); m_DecalsBoth.Remove(d); } } [ExecuteInEditMode] public class DeferredDecalRenderer : MonoBehaviour { public Mesh m_CubeMesh; private Dictionary<Camera, CommandBuffer> m_Cameras = new Dictionary<Camera, CommandBuffer>(); public void OnDisable() { foreach (KeyValuePair<Camera, CommandBuffer> camera in m_Cameras) { if (Object.op_Implicit((Object)(object)camera.Key)) { camera.Key.RemoveCommandBuffer((CameraEvent)6, camera.Value); } } } public void OnWillRenderObject() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_009a: 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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) if (!((Component)this).gameObject.activeInHierarchy || !((Behaviour)this).enabled) { OnDisable(); return; } Camera current = Camera.current; if (!Object.op_Implicit((Object)(object)current)) { return; } CommandBuffer val = null; if (m_Cameras.ContainsKey(current)) { val = m_Cameras[current]; val.Clear(); } else { val = new CommandBuffer(); val.name = "Deferred decals"; m_Cameras[current] = val; current.AddCommandBuffer((CameraEvent)6, val); } DeferredDecalSystem instance = DeferredDecalSystem.instance; int num = Shader.PropertyToID("_NormalsCopy"); val.GetTemporaryRT(num, -1, -1); val.Blit(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)12), RenderTargetIdentifier.op_Implicit(num)); val.SetRenderTarget(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)10), RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)2)); foreach (Decal item in instance.m_DecalsDiffuse) { val.DrawMesh(m_CubeMesh, ((Component)item).transform.localToWorldMatrix, item.m_Material); } val.SetRenderTarget(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)12), RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)2)); foreach (Decal decalsNormal in instance.m_DecalsNormals) { val.DrawMesh(m_CubeMesh, ((Component)decalsNormal).transform.localToWorldMatrix, decalsNormal.m_Material); } RenderTargetIdentifier[] array = (RenderTargetIdentifier[])(object)new RenderTargetIdentifier[2] { RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)10), RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)12) }; val.SetRenderTarget(array, RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)2)); foreach (Decal item2 in instance.m_DecalsBoth) { val.DrawMesh(m_CubeMesh, ((Component)item2).transform.localToWorldMatrix, item2.m_Material); } val.ReleaseTemporaryRT(num); } } namespace ValheimMod { public class Analytics { private class AnalyticsData { private Dictionary<string, string> data = new Dictionary<string, string>(); public string this[string key] { get { return data[key]; } set { data[key] = value; } } public void Add(string name, string value) { if (data.ContainsKey(name)) { throw new Exception("Attempting to send duplicate key: " + name); } if (name.Contains(",") || value.Contains(",")) { throw new Exception("Entry " + name + ":" + value + " contains commas"); } data.Add(name, value); } public bool ContainsKey(string name) { return data.ContainsKey(name); } public Dictionary<string, string> getDataForPost() { HashSet<string> hashSet = new HashSet<string>(); string text = ""; string text2 = ""; List<string> list = data.Keys.OrderBy((string k) => k).ToList(); foreach (string item in list) { text = text + item + ","; text2 = text2 + data[item] + ","; ValheimMod.DevModeLog(item + ":" + data[item]); } if (text.EndsWith(",")) { text = text.Substring(0, text.Length - 1); text2 = text2.Substring(0, text2.Length - 1); } ValheimMod.DevModeLog("Body size (bytes): " + Encoding.UTF8.GetByteCount(text2)); Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary.Add("header", text); dictionary.Add("body", text2); return dictionary; } } private const string PLAYER_PREFS_UUID_KEY = "runemagic-uuid"; private readonly List<string> CONFIG_ENTRIES_TO_SEND = new List<string> { "RepairRune_HealRate", "RepairRune_EffectRadius", "runestoneMaxStoredEnergy", "runestoneSecondsToFullCharge", "runestoneUnlockNewRuneChance" }; private Dictionary<string, int> placedRunes = new Dictionary<string, int>(); private Dictionary<string, int> removedRunes = new Dictionary<string, int>(); private Dictionary<string, List<string>> terminalCommandsRun = new Dictionary<string, List<string>>(); private Dictionary<string, float> passiveRuneActiveTime = new Dictionary<string, float>(); public bool otherPlayersConnected; public bool wasPvpDamageTaken; public HashSet<string> exceptions = new HashSet<string>(); private Dictionary<string, string> uniqueEngravedRunesLoaded = new Dictionary<string, string>(); public Analytics() { foreach (string analyticsPieceName in ValheimMod.getAnalyticsPieceNames()) { if (!placedRunes.ContainsKey(analyticsPieceName)) { placedRunes.Add(analyticsPieceName, 0); } } foreach (string engravedRunePrefabName in ValheimMod.getEngravedRunePrefabNames()) { removedRunes.Add(engravedRunePrefabName, 0); } terminalCommandsRun.Add("discoverRune", new List<string>()); terminalCommandsRun.Add("forgetRune", new List<string>()); foreach (StatusEffect registeredStatusEffect in CustomContentSetupHandler.RegisteredStatusEffects) { passiveRuneActiveTime.Add(((Object)registeredStatusEffect).name, 0f); if (((object)registeredStatusEffect).GetType() == typeof(SE_WaterWalking)) { passiveRuneActiveTime.Add(((Object)registeredStatusEffect).name + "-hot", 0f); passiveRuneActiveTime.Add(((Object)registeredStatusEffect).name + "-cold", 0f); passiveRuneActiveTime.Add(((Object)registeredStatusEffect).name + "-lava", 0f); } } } public void piecePlaced(string name) { if (placedRunes.ContainsKey(name)) { placedRunes[name]++; } } public void engravedRuneRemoved(string name) { if (removedRunes.ContainsKey(name)) { removedRunes[name]++; } } public void registerUniqueRune(string name, ZDO zdo) { uniqueEngravedRunesLoaded[((object)(ZDOID)(ref zdo.m_uid)).ToString()] = name; } public void terminalCommandRun(string command, string args) { if (terminalCommandsRun.ContainsKey(command)) { terminalCommandsRun[command].Add(args); } } public void updatePassiveRuneTime(StatusEffect se, float dt) { if (passiveRuneActiveTime.ContainsKey(((Object)se).name)) { passiveRuneActiveTime[((Object)se).name] += dt; if (((object)se).GetType() == typeof(SE_WaterWalking)) { bool flag = IceTimedDestruction.anyInstancesActiveForPlayer(Player.m_localPlayer); bool flag2 = se.m_character.InLava(); bool flag3 = SE_WaterWalking.latestHotWaterFactor > 0f && flag; bool flag4 = SE_WaterWalking.latestColdWaterFactor > 0f && flag; passiveRuneActiveTime[((Object)se).name + "-hot"] += (flag3 ? dt : 0f); passiveRuneActiveTime[((Object)se).name + "-cold"] += (flag4 ? dt : 0f); passiveRuneActiveTime[((Object)se).name + "-lava"] += (flag2 ? dt : 0f); } } } public void sendAnalytics() { try { AnalyticsData analyticsData = getAnalyticsData(); postDataAsync(ConfigLoader.getString("analytics_address"), analyticsData.getDataForPost()); } catch (Exception ex) { sendErrorAnalytics(ex); } ValheimMod.analytics = new Analytics(); } private void sendErrorAnalytics(Exception ex) { try { Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary.Add("analyticsFailure", getVersion() + " : " + getValheimVersion() + " : " + ex.ToString().Replace(',', '_')); postDataAsync(ConfigLoader.getString("analytics_error_address"), dictionary); } catch (Exception ex2) { ValheimMod.DevModeLog(ex2); } } private void postDataAsync(string address, Dictionary<string, string> data) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; byte[] bytes = FormUrlEncoder.GetContentByteArray(data); request.BeginGetRequestStream(delegate(IAsyncResult ar) { try { Stream stream = request.EndGetRequestStream(ar); stream.Write(bytes, 0, bytes.Length); stream.Close(); using ((HttpWebResponse)request.GetResponse()) { } } catch (Exception) { } }, null); } private AnalyticsData getAnalyticsData() { AnalyticsData analyticsData = new AnalyticsData(); appendPlacedAndRemovedRunes(analyticsData); appendUniqueEngravedRunes(analyticsData); appendConfigEntries(analyticsData); appendPassiveRuneTimes(analyticsData); analyticsData.Add("version", getVersion()); analyticsData.Add("isPTR", toString(isPTRBranch())); analyticsData.Add("valheimVersion", getValheimVersion()); analyticsData.Add("worldUid", getWorldUid()); bool flag = ZNet.instance.IsServer(); analyticsData.Add("isMultiplayerServer", toString(flag && otherPlayersConnected)); analyticsData.Add("isMultiplayerClient", toString(!flag)); analyticsData.Add("pvp", getPVPStatus(Player.m_localPlayer)); analyticsData.Add("numRuneFocus", getRuneFocusCount().ToString()); analyticsData.Add("uniqueId", getUniqueId()); analyticsData.Add("pvpDmg", toString(wasPvpDamageTaken)); analyticsData.Add("allUnlocked", toString(ConfigLoader.getBool("allRunesStartUnlocked"))); analyticsData.Add("canopyHidden", toString(ConfigLoader.getInt("canopyRune_visualQuality") == 0)); analyticsData.Add("canopyQuality", ConfigLoader.getInt("canopyRune_visualQuality").ToString()); analyticsData.Add("rangeExtensionOff", toString(ConfigLoader.getBool("disableRangeExtensionForLargePieces"))); appendEngravedRunes(analyticsData); analyticsData.Add("exceptions", string.Join(" +++ ", exceptions).Replace("\n", "\\n").Replace("\r", "\\r") .Replace(',', '_')); return analyticsData; } private void appendEngravedRunes(AnalyticsData holder) { foreach (string engravedRunePrefabName in ValheimMod.getEngravedRunePrefabNames()) { List<ZDO> list = new List<ZDO>(); int num = 0; int num2 = -1; try { if (ZDOMan.instance != null) { while (!ZDOMan.instance.GetAllZDOsWithPrefabIterative(engravedRunePrefabName, list, ref num)) { } num2 = list.Count(); } } catch (IndexOutOfRangeException) { } holder.Add("worldCount-" + engravedRunePrefabName, num2.ToString()); } } private void appendPlacedAndRemovedRunes(AnalyticsData holder) { foreach (string key in placedRunes.Keys) { holder.Add("placed-" + key, placedRunes[key].ToString()); } foreach (string key2 in removedRunes.Keys) { holder.Add("removed-" + key2, removedRunes[key2].ToString()); } } private void appendUniqueEngravedRunes(AnalyticsData holder) { foreach (string engravedRunePrefabName in ValheimMod.getEngravedRunePrefabNames()) { holder.Add("uniqueLoaded-" + engravedRunePrefabName, "0"); } foreach (string key in uniqueEngravedRunesLoaded.Keys) { string text = uniqueEngravedRunesLoaded[key]; string text2 = "uniqueLoaded-" + text; if (holder.ContainsKey(text2)) { holder[text2] = (int.Parse(holder[text2]) + 1).ToString(); } } } private void appendConfigEntries(AnalyticsData holder) { foreach (string key in terminalCommandsRun.Keys) { holder.Add("cmd-" + key, string.Join(":", terminalCommandsRun[key])); } foreach (RunemagicPieceConfig runemagicPieceConfig in ValheimMod.runemagicPieceConfigs) { bool value = runemagicPieceConfig.isEnabled(); holder.Add("enabled-" + runemagicPieceConfig.pieceName, toString(value)); if (ConfigLoader.containsKey("energyCost_" + runemagicPieceConfig.pieceName)) { holder.Add("energyCost-" + runemagicPieceConfig.pieceName, ConfigLoader.getString("energyCost_" + runemagicPieceConfig.pieceName)); } } foreach (string item in CONFIG_ENTRIES_TO_SEND) { holder.Add("cfg-" + item, ConfigLoader.getString(item)); } } private void appendPassiveRuneTimes(AnalyticsData holder) { foreach (string key in passiveRuneActiveTime.Keys) { holder.Add("passiveInUse-" + key, Mathf.RoundToInt(passiveRuneActiveTime[key]).ToString()); } } private string getPVPStatus(Player p) { if ((Object)(object)p == (Object)null) { return "N/A"; } try { return toString(((Character)p).IsPVPEnabled()); } catch (NullReferenceException) { return "N/A"; } } private static string getVersion() { string text = "1.2.1"; if (ValheimMod.PLATFORM == ValheimMod.Platform.NEXUS_MODS) { text += "-NM"; } else if (ValheimMod.PLATFORM == ValheimMod.Platform.THUNDERSTORE) { text += "-TS"; } if (ValheimMod.DEV_MODE) { text += "-devmode"; } return text; } private string getUniqueId() { if (!PlayerPrefs.HasKey("runemagic-uuid")) { PlayerPrefs.SetString("runemagic-uuid", Guid.NewGuid().ToString()); } return PlayerPrefs.GetString("runemagic-uuid"); } private string toString(bool value) { if (!value) { return "f"; } return "t"; } private int getRuneFocusCount() { if ((Object)(object)Player.m_localPlayer == (Object)null || ((Humanoid)Player.m_localPlayer).GetInventory() == null) { return 0; } Inventory inventory = ((Humanoid)Player.m_localPlayer).GetInventory(); return inventory.CountItems("$item_runemagic_runefocus", -1, true); } private string getValheimVersion() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) try { GameVersion currentVersion = Version.CurrentVersion; string text = ((object)(GameVersion)(ref currentVersion)).ToString(); if (isPTRBranch()) { text += "-ptr"; } return text; } catch (Exception ex) { ValheimMod.DevModeLog(ex); } return "unknown"; } private bool isPTRBranch() { try { return getBranch().Equals("public-test"); } catch (Exception) { return false; } } private string getBranch() { try { string result = default(string); if (SteamApps.GetCurrentBetaName(ref result, 512)) { return result; } return ""; } catch (Exception) { return "unknown"; } } private string getWorldUid() { if (ZNetPatch.CurrentWorldUID != 0L) { byte[] bytes = BitConverter.GetBytes(ZNetPatch.CurrentWorldUID); return Convert.ToBase64String(bytes); } return ""; } } internal class BoundingCircle { public Vector2 center; public float radius; public BoundingCircle(Vector2 center, float radius) { //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) this.center = center; this.radius = radius; } public BoundingCircle(float x, float y, float radius) { //IL_0009: 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) center = new Vector2(x, y); this.radius = radius; } public static BoundingCircle minimumCircle(IEnumerable<Vector2> points) { HashSet<Vector2> points2 = new HashSet<Vector2>(points); return welzlInner(points2, new HashSet<Vector2>()); } private static BoundingCircle welzlInner(HashSet<Vector2> points, HashSet<Vector2> boundary) { //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_0020: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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) //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (points.Count() == 0 || boundary.Count() == 3) { return trivial(boundary); } Vector2 val = points.First(); points.Remove(val); BoundingCircle boundingCircle = welzlInner(points, boundary); if (boundingCircle.contains(val)) { points.Add(val); return boundingCircle; } boundary.Add(val); BoundingCircle result = welzlInner(points, boundary); points.Add(val); boundary.Remove(val); return result; } public bool contains(Vector2 p) { //IL_0000: 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) float num = p.x - center.x; float num2 = p.y - center.y; return num * num + num2 * num2 < radius * radius; } public static BoundingCircle trivial(IEnumerable<Vector2> points) { //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_0020: 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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) List<Vector2> list = new List<Vector2>(points); if (points.Count() == 3) { return trivial3(list[0], list[1], list[2]); } if (points.Count() == 2) { return trivial2(list[0], list[1]); } if (points.Count() == 1) { return new BoundingCircle(list[0], 0f); } if (points.Count() == 0) { return new BoundingCircle(0f, 0f, 0f); } throw new Exception("Can't have a trivial circle with more than 3 points: " + points.Count()); } public static BoundingCircle trivial2(Vector2 a, Vector2 b) { //IL_0002: 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_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_0033: 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) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor((a.x + b.x) / 2f, (a.y + b.y) / 2f); float num = a.x - val.x; float num2 = a.y - val.y; float num3 = (float)Math.Sqrt(num * num + num2 * num2); return new BoundingCircle(val, num3); } public static BoundingCircle trivial3(Vector2 a, Vector2 b, Vector2 c) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0014: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_0039: 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_0048: 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) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018c: 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_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00db: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) float num = b.x - a.x; float num2 = b.y - a.y; float num3 = c.x - a.x; float num4 = c.y - a.y; float num5 = num * (a.x + b.x) + num2 * (a.y + b.y); float num6 = num3 * (a.x + c.x) + num4 * (a.y + c.y); float num7 = 2f * (num * (c.y - b.y) - num2 * (c.x - b.x)); float num10; float num11; if ((double)Math.Abs(num7) < 1E-06) { float num8 = Math.Min(a.x, Math.Min(b.x, c.x)); float num9 = Math.Min(a.y, Math.Min(b.y, c.y)); num10 = (Math.Max(a.x, Math.Max(b.x, c.x)) - num8) * 0.5f; num11 = (Math.Max(a.y, Math.Max(b.y, c.y)) - num9) * 0.5f; return new BoundingCircle(num8 + num10, num9 + num11, (float)Math.Sqrt(num10 * num10 + num11 * num11)); } float num12 = (num4 * num5 - num2 * num6) / num7; float num13 = (num * num6 - num3 * num5) / num7; num10 = num12 - a.x; num11 = num13 - a.y; float num14 = (float)Math.Sqrt(num10 * num10 + num11 * num11); return new BoundingCircle(num12, num13, num14); } } public class BoundingSphere { public Vector3 center; public float radius; public BoundingSphere(Vector3 aCenter, float aRadius) { //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) center = aCenter; radius = aRadius; } public static BoundingSphere Calculate(Renderer rend) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: 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_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) //IL_0026: Unknown result type (might be due to invalid IL or missing references) Bounds bounds = rend.bounds; Vector3 aCenter = ((Bounds)(ref bounds)).center; bounds = rend.bounds; Vector3 extents = ((Bounds)(ref bounds)).extents; float magnitude = ((Vector3)(ref extents)).magnitude; return new BoundingSphere(aCenter, magnitude); } public static BoundingSphere Calculate(GameObject obj) { Renderer[] componentsInChildren = obj.GetComponentsInChildren<Renderer>(true); BoundingSphere boundingSphere = null; Renderer[] array = componentsInChildren; foreach (Renderer rend in array) { if (boundingSphere == null) { boundingSphere = Calculate(rend); continue; } BoundingSphere boundingSphere2 = Calculate(rend); if (boundingSphere2.radius > boundingSphere.radius) { boundingSphere = boundingSphere2; } } return boundingSphere; } public static BoundingSphere Calculate(Transform xform, IEnumerable<Vector3> aPoints) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000a: 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_0010: 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_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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) //IL_0024: 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_0027: 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_0029: 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) //IL_003e: 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_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_004a: 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) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0075: 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0121: 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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0149: 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_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0132: 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) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: 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_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) Vector3 val2; Vector3 val; Vector3 val3 = (val2 = (val = Vector3.one * float.PositiveInfinity)); Vector3 val5; Vector3 val4; Vector3 val6 = (val5 = (val4 = Vector3.one * float.NegativeInfinity)); foreach (Vector3 aPoint in aPoints) { Vector3 val7 = xform.TransformPoint(aPoint); if (val7.x < val3.x) { val3 = val7; } if (val7.x > val6.x) { val6 = val7; } if (val7.y < val2.y) { val2 = val7; } if (val7.y > val5.y) { val5 = val7; } if (val7.z < val.z) { val = val7; } if (val7.z > val4.z) { val4 = val7; } } Vector3 val8 = val6 - val3; float sqrMagnitude = ((Vector3)(ref val8)).sqrMagnitude; val8 = val5 - val2; float sqrMagnitude2 = ((Vector3)(ref val8)).sqrMagnitude; val8 = val4 - val; float sqrMagnitude3 = ((Vector3)(ref val8)).sqrMagnitude; Vector3 val9 = val3; Vector3 val10 = val6; float num = sqrMagnitude; if (sqrMagnitude2 > num) { num = sqrMagnitude2; val9 = val2; val10 = val5; } if (sqrMagnitude3 > num) { val9 = val; val10 = val4; } Vector3 val11 = (val9 + val10) * 0.5f; val8 = val10 - val11; float num2 = ((Vector3)(ref val8)).sqrMagnitude; float num3 = Mathf.Sqrt(num2); foreach (Vector3 aPoint2 in aPoints) { Vector3 val12 = xform.TransformPoint(aPoint2); val8 = val12 - val11; float sqrMagnitude4 = ((Vector3)(ref val8)).sqrMagnitude; if (sqrMagnitude4 > num2) { float num4 = Mathf.Sqrt(sqrMagnitude4); num3 = (num3 + num4) * 0.5f; num2 = num3 * num3; float num5 = num4 - num3; val11 = (num3 * val11 + num5 * val12) / num4; } } return new BoundingSphere(val11, num3); } } public static class ExtensionMethods { public static TValue GetValueOrDefault<TKey, TValue>(this IDictionary<TKey, TValue> container, TKey key, TValue defaultValue) { if (!container.ContainsKey(key)) { return defaultValue; } return container[key]; } public static void AddToKey<TKey>(this IDictionary<TKey, int> container, TKey key, int toAdd) { container[key] = container.GetValueOrDefault(key, 0) + toAdd; } public static void AddToKey<TKey>(this IDictionary<TKey, float> container, TKey key, float toAdd) { container[key] = container.GetValueOrDefault(key, 0f) + toAdd; } public static void AddToKey<TKey>(this IDictionary<TKey, double> container, TKey key, double toAdd) { container[key] = container.GetValueOrDefault(key, 0.0) + toAdd; } public static bool ContainsRegex(this IList<string> container, string keyRegex) { Regex regex = new Regex(keyRegex); foreach (string item in container) { Match match = regex.Match(item); if (match.Success) { return true; } } return false; } public static void Merge(this IDictionary<string, Measurement> dict, IDictionary<string, Measurement> other) { foreach (string key in other.Keys) { if (!dict.ContainsKey(key)) { dict.Add(key, other[key]); } else { dict[key].Merge(other[key]); } } } public static string RemoveWhitespace(this string str) { return string.Join("", str.Split((string[]?)null, StringSplitOptions.RemoveEmptyEntries)); } public static Vector2 GetXZVector(this Vector3 vec) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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) return new Vector2(vec.x, vec.z); } } public class ColorUtils { private const byte k_MaxByteForOverexposedColor = 191; public static void DecomposeHdrColor(Color linearColorHdr, out Color32 baseLinearColor, out float exposure) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: 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) //IL_0034: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) baseLinearColor = Color32.op_Implicit(linearColorHdr); float maxColorComponent = ((Color)(ref linearColorHdr)).maxColorComponent; if (maxColorComponent == 0f || (maxColorComponent <= 1f && maxColorComponent >= 0.003921569f)) { exposure = 0f; baseLinearColor.r = (byte)Mathf.RoundToInt(linearColorHdr.r * 255f); baseLinearColor.g = (byte)Mathf.RoundToInt(linearColorHdr.g * 255f); baseLinearColor.b = (byte)Mathf.RoundToInt(linearColorHdr.b * 255f); } else { float num = 191f / maxColorComponent; exposure = Mathf.Log(255f / num) / Mathf.Log(2f); baseLinearColor.r = Math.Min((byte)191, (byte)Mathf.CeilToInt(num * linearColorHdr.r)); baseLinearColor.g = Math.Min((byte)191, (byte)Mathf.CeilToInt(num * linearColorHdr.g)); baseLinearColor.b = Math.Min((byte)191, (byte)Mathf.CeilToInt(num * linearColorHdr.b)); } } public static Color fromHSVVector(Vector4 vec, bool zeroToOne) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) if (!zeroToOne) { vec.x /= 360f; vec.y /= 100f; vec.z /= 100f; vec.w /= 100f; } Color result = Color.HSVToRGB(vec.x, vec.y, vec.z); result.a = vec.w; return result; } public static Color applyIntensity(Color color, float intensity) { //IL_000c: 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) float num = Mathf.Pow(2f, intensity); return color * num; } public static Color fromVec(Vector4 vec) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0012: 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) return new Color(vec.x, vec.y, vec.z, vec.w); } public static Texture2D duplicateTexture(Texture2D source) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) RenderTexture temporary = RenderTexture.GetTemporary(((Texture)source).width, ((Texture)source).height, 0, (RenderTextureFormat)7, (RenderTextureReadWrite)1); Graphics.Blit((Texture)(object)source, temporary); RenderTexture active = RenderTexture.active; RenderTexture.active = temporary; Texture2D val = new Texture2D(((Texture)source).width, ((Texture)source).height); val.ReadPixels(new Rect(0f, 0f, (float)((Texture)temporary).width, (float)((Texture)temporary).height), 0, 0); RenderTexture.active = active; RenderTexture.ReleaseTemporary(temporary); return val; } public static Texture2D GetRenderTexturePixels(RenderTexture rt) { //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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_0043: Unknown result type (might be due to invalid IL or missing references) RenderTexture active = RenderTexture.active; RenderTexture.active = rt; Texture2D val = new Texture2D(((Texture)rt).width, ((Texture)rt).height, GraphicsFormatUtility.GetTextureFormat(rt.graphicsFormat), false); val.ReadPixels(new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), 0, 0); val.Apply(); RenderTexture.active = active; return val; } } public class DebugUtils { public static void LogIfNearPlayer(string content, Vector3 pos, float distance = 10f) { //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) if (!((Object)(object)Player.m_localPlayer == (Object)null) && Utils.DistanceSqr(((Component)Player.m_localPlayer).transform.position, pos) <= distance * distance) { Debug.Log((object)content); } } private static void getDebugObjectDetails() { PlayerRaycast playerRaycast = new PlayerRaycast(Player.m_localPlayer); if (playerRaycast.hit) { if ((Object)(object)((RaycastHit)(ref playerRaycast.hitInfo)).collider != (Object)null) { GameObject gameObject = ((Component)((RaycastHit)(ref playerRaycast.hitInfo)).collider).gameObject; printCompleteGameObject(gameObject); } else { Debug.Log((object)"Raycast returned true, but no hit"); } } else { Debug.Log((object)"Raycast returned false"); } } public static void printCompleteGameObject(GameObject obj) { while ((Object)(object)obj.transform.parent != (Object)null && !((Object)((Component)obj.transform.parent).gameObject).name.Equals("_NetSceneRoot")) { obj = ((Component)obj.transform.parent).gameObject; } printGameObjectDebugInfoHierarchy(obj, 0); } public static void printGameObjectDebugInfoHierarchy(GameObject obj, int level) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown string text = new string(' ', level * 6); if ((Object)(object)obj == (Object)null) { Debug.Log((object)(text + "Gameobject is null")); return; } printGameObjectDebugInfo(text, obj); if (obj.transform.childCount < 100) { foreach (Transform item in obj.transform) { Transform val = item; printGameObjectDebugInfoHierarchy(((Component)val).gameObject, level + 1); } return; } Debug.Log((object)$"Too many children: {obj.transform.childCount}"); } public static void printGameObjectDebugInfo(string prefix, GameObject obj) { //IL_002e: 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) Debug.Log((object)$"{prefix}Gameobject: {((Object)obj).name}, active {obj.activeInHierarchy}, localPos {obj.transform.localPosition}, worldPos {obj.transform.position}"); Debug.Log((object)$"{prefix}Layer: {obj.layer}, name: {LayerMask.LayerToName(obj.layer)}"); Component[] components = obj.GetComponents(typeof(Component)); Component[] array = components; foreach (Component val in array) { if (((object)val).ToString().Contains("(UnityEngine.Transform)")) { continue; } Debug.Log((object)(prefix + " Attached component: " + ((object)val).ToString())); Renderer val2 = (Renderer)(object)((val is Renderer) ? val : null); if (val2 != null) { Material[] materials = val2.materials; foreach (Material val3 in materials) { Debug.Log((object)(prefix + "Material " + ((Object)val3).name + " Shader: " + ((Object)val3.shader).name)); } } } } public static void printParticleSystemDebugInfoHierarchy(GameObject obj, int level = 0) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown string text = new string(' ', level * 6); if ((Object)(object)obj == (Object)null) { Debug.Log((object)(text + "Gameobject is null")); return; } printParticleSystemDebugInfo(text, obj); if (obj.transform.childCount < 100) { foreach (Transform item in obj.transform) { Transform val = item; printParticleSystemDebugInfoHierarchy(((Component)val).gameObject, level + 1); } return; } Debug.Log((object)$"Too many children: {obj.transform.childCount}"); } public static void printParticleSystemDebugInfo(string prefix, GameObject obj) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_007a: 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_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: 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_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)$"{prefix}Gameobject: {((Object)obj).name}, active {obj.activeInHierarchy}, activeSelf {obj.activeSelf}"); Debug.Log((object)$"{prefix} localPos {obj.transform.localPosition}, worldPos {obj.transform.position}"); Debug.Log((object)$"{prefix} localRot {obj.transform.localEulerAngles}, worldRot {obj.transform.eulerAngles}"); ParticleSystem[] components = obj.GetComponents<ParticleSystem>(); ParticleSystem[] array = components; foreach (ParticleSystem val in array) { Debug.Log((object)$"{prefix} playing {val.isPlaying}, paused {val.isPaused}, stopped {val.isStopped}, emitting {val.isEmitting}, alive {val.IsAlive()}"); MainModule main = val.main; EmissionModule emission = val.emission; object[] obj2 = new object[4] { prefix, ((MainModule)(ref main)).maxParticles, val.particleCount, null }; MinMaxCurve rateOverTime = ((EmissionModule)(ref emission)).rateOverTime; obj2[3] = ((MinMaxCurve)(ref rateOverTime)).constant; Debug.Log((object)string.Format("{0} maxParticles {1}, current# {2}, emission {3}", obj2)); Debug.Log((object)$"{prefix} culling {((MainModule)(ref main)).cullingMode} emissionEnabled {((EmissionModule)(ref emission)).enabled}"); CustomDataModule customData = val.customData; if (((CustomDataModule)(ref customData)).enabled) { MinMaxGradient color = ((CustomDataModule)(ref customData)).GetColor((ParticleSystemCustomData)0); MinMaxGradient color2 = ((CustomDataModule)(ref customData)).GetColor((ParticleSystemCustomData)1); Debug.Log((object)(prefix + " CustomData: Grad1: " + minMaxGradientToString(color) + " Grad2: " + minMaxGradientToString(color2))); } else { Debug.Log((object)(prefix + " CustomData disabled")); } } ParticleSystemRenderer component = obj.GetComponent<ParticleSystemRenderer>(); if ((Object)(object)component == (Object)null) { Debug.Log((object)(prefix + " null ParticleSystemRenderer")); return; } List<ParticleSystemVertexStream> list = new List<ParticleSystemVertexStream>(); component.GetActiveVertexStreams(list); foreach (ParticleSystemVertexStream item in list) { ParticleSystemVertexStream current = item; Debug.Log((object)(prefix + " VertexData: " + ((object)(ParticleSystemVertexStream)(ref current)).ToString())); } } public static string minMaxGradientToString(MinMaxGradient mmg) { //IL_0002: 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) //IL_0028: Invalid comparison between Unknown and I4 //IL_0010: 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_0055: Invalid comparison between Unknown and I4 //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Invalid comparison between Unknown and I4 if ((int)((MinMaxGradient)(ref mmg)).mode == 0) { return $"MinMaxGradient({((MinMaxGradient)(ref mmg)).color})"; } if ((int)((MinMaxGradient)(ref mmg)).mode == 2) { return $"MinMaxGradient({((MinMaxGradient)(ref mmg)).colorMin}, {((MinMaxGradient)(ref mmg)).colorMax})"; } if ((int)((MinMaxGradient)(ref mmg)).mode == 1) { return "MinMaxGradient(alpha " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradient.alphaKeys.Select((GradientAlphaKey x) => gradientKeyToString(x))) + " : color " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradient.colorKeys.Select((GradientColorKey x) => gradientKeyToString(x))) + ")"; } if ((int)((MinMaxGradient)(ref mmg)).mode == 3) { return "MinMaxGradient(alpha1 " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradientMin.alphaKeys.Select((GradientAlphaKey x) => gradientKeyToString(x))) + " : color1 " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradientMin.colorKeys.Select((GradientColorKey x) => gradientKeyToString(x))) + " : alpha2 " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradientMax.alphaKeys.Select((GradientAlphaKey x) => gradientKeyToString(x))) + " : color2 " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradientMax.colorKeys.Select((GradientColorKey x) => gradientKeyToString(x))) + ")"; } return "MinMaxGradient(RandomColor)"; } public static string gradientKeyToString(GradientAlphaKey key) { //IL_000a: 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) return "{" + $"{key.alpha}:{key.time:0.##}" + "}"; } public static string gradientKeyToString(GradientColorKey key) { //IL_000a: 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_0015: Unknown result type (might be due to invalid IL or missing references) return "{" + $"{key.color}:{key.time:0.##}" + "}"; } public static void deepObjectComparison(object a, object b) { List<string> list = new List<string>(); foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(a)) { string name = property.Name; list.Add(name); object value = property.GetValue(a); object value2 = property.GetValue(b); Debug.Log((object)$"{name}: {value} | {value2}"); } foreach (PropertyDescriptor property2 in TypeDescriptor.GetProperties(b)) { string name2 = property2.Name; if (!list.Contains(name2)) { object value3 = property2.GetValue(a); object value4 = property2.GetValue(b); Debug.Log((object)$"{name2}: {value3} | {value4}"); } } } public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration = 5f) { } public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration = 5f) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: 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_0010: Unknown result type (might be due to invalid IL or missing references) if (ValheimMod.DEV_MODE) { DrawLine(start, start + dir, color, duration); } } public static void DrawBounds(Bounds bounds, Color color, float duration = 5f) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) DrawBounds(bounds, color, color, color, duration); } public static void DrawBounds(Bounds bounds, Color top, Color bottom, Color sides, float duration = 5f) { } public static void DrawWireSphere(Vector3 center, float radius, Color color, float duration) { } public static void DrawWireDisc(Vector3 center, float radius, Color color, float duration) { } public static GameObject addDebugLocatorVFX(Vector3 position) { //IL_0019: 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_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown if (!ValheimMod.DEV_MODE) { return new GameObject(); } GameObject prefabFromAssetBundle = AssetLoader.GetPrefabFromAssetBundle("vfx_DebugLocator"); return Object.Instantiate<GameObject>(prefabFromAssetBundle, position, Quaternion.identity); } public static RaycastHit debugRaycast(Player player, bool ignoreRigidbody, int layerMask = -1) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_009a: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) if (layerMask == -1) { layerMask = (int)Traverse.Create((object)player).Field("m_placeRayMask").GetValue(); } Transform eye = ((Character)player).m_eye; float maxPlaceDistance = player.m_maxPlaceDistance; RaycastHit result = default(RaycastHit); if (Physics.Raycast(((Component)GameCamera.instance).transform.position, ((Component)GameCamera.instance).transform.forward, ref result, 50f, layerMask) && Object.op_Implicit((Object)(object)((RaycastHit)(ref result)).collider) && (ignoreRigidbody || !Object.op_Implicit((Object)(object)((RaycastHit)(ref result)).collider.attachedRigidbody)) && Vector3.Distance(eye.position, ((RaycastHit)(ref result)).point) < maxPlaceDistance) { return result; } return default(RaycastHit); } } internal class DecalManager { private static Dictionary<Camera, CommandBuffer> bufferMap = new Dictionary<Camera, CommandBuffer>(); public static void registerCamera(Camera cam) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown if (!bufferMap.ContainsKey(cam)) { CommandBuffer val = new CommandBuffer(); val.name = "Deferred decals"; bufferMap[cam] = val; cam.AddCommandBuffer((CameraEvent)20, val); } } public static CommandBuffer getBuffer(Camera cam) { return bufferMap[cam]; } } internal class GameObjectUtils { public static ParticleSystem CopyParticleSystem(ParticleSystem original, GameObject destination) { //IL_001b: 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_002c: 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_003d: 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_004e: 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_005f: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: 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_0087: 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) //IL_0098: 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) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: 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_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010f: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0153: 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_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) ParticleSystem val = GameObjectUtils.CopyComponent<ParticleSystem>(original, destination); ParticleSystemRenderer val2 = GameObjectUtils.CopyComponent<ParticleSystemRenderer>(((Component)original).gameObject.GetComponent<ParticleSystemRenderer>(), destination); CopyFields<MainModule>(original.main, val.main); CopyFields<EmissionModule>(original.emission, val.emission); CopyFields<ShapeModule>(original.shape, val.shape); CopyFields<VelocityOverLifetimeModule>(original.velocityOverLifetime, val.velocityOverLifetime); CopyFields<LimitVelocityOverLifetimeModule>(original.limitVelocityOverLifetime, val.limitVelocityOverLifetime); CopyFields<InheritVelocityModule>(original.inheritVelocity, val.inheritVelocity); CopyFields<ForceOverLifetimeModule>(original.forceOverLifetime, val.forceOverLifetime); CopyFields<ColorOverLifetimeModule>(original.colorOverLifetime, val.colorOverLifetime); CopyFields<ColorBySpeedModule>(original.colorBySpeed, val.colorBySpeed); CopyFields<SizeOverLifetimeModule>(original.sizeOverLifetime, val.sizeOverLifetime); CopyFields<SizeBySpeedModule>(original.sizeBySpeed, val.sizeBySpeed); CopyFields<RotationOverLifetimeModule>(original.rotationOverLifetime, val.rotationOverLifetime); CopyFields<RotationBySpeedModule>(original.rotationBySpeed, val.rotationBySpeed); CopyFields<ExternalForcesModule>(original.externalForces, val.externalForces); CopyFields<NoiseModule>(original.noise, val.noise); CopyFields<CollisionModule>(original.collision, val.collision); CopyFields<TriggerModule>(original.trigger, val.trigger); CopyFields<TextureSheetAnimationModule>(original.textureSheetAnimation, val.textureSheetAnimation); CopyFields<LightsModule>(original.lights, val.lights); CopyFields<TrailModule>(original.trails, val.trails); CopyParticleCustomDataModule(original.customData, val.customData); return val; } public static T CopyComponent<T>(T original, GameObject destination) where T : Component { Type type = ((object)original).GetType(); Component component = destination.GetComponent(type); T val = (T)(object)((component is T) ? component : null); if (!Object.op_Implicit((Object)(object)val)) { Component obj = destination.AddComponent(type); val = (T)(object)((obj is T) ? obj : null); } CopyFields(original, val); if (original is ParticleSystemRenderer) { object obj2 = original; object original2 = ((obj2 is ParticleSystemRenderer) ? obj2 : null); object obj3 = val; CopyParticleSystemRendererSettings((ParticleSystemRenderer)original2, (ParticleSystemRenderer)((obj3 is ParticleSystemRenderer) ? obj3 : null)); } return val; } public static void CopyFields<T>(T original, T dst) { Type type = original.GetType(); FieldInfo[] fields = type.GetFields(); FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { if (!fieldInfo.IsStatic) { fieldInfo.SetValue(dst, fieldInfo.GetValue(original)); } } PropertyInfo[] properties = type.GetProperties(); Dictionary<string, PropertyInfo> dictionary = new Dictionary<string, PropertyInfo>(); PropertyInfo[] array2 = properties; foreach (PropertyInfo propertyInfo in array2) { dictionary[propertyInfo.Name] = propertyInfo; if (propertyInfo.CanWrite && propertyInfo.CanWrite && !(propertyInfo.Name == "name") && !(propertyInfo.Name == "material") && !(propertyInfo.Name == "materials")) { propertyInfo.SetValue(dst, propertyInfo.GetValue(original, null), null); } } if (dictionary.ContainsKey("material") && dictionary.ContainsKey("sharedMaterial")) { Debug.Log((object)"Setting material property"); dictionary["material"].SetValue(dst, dictionary["sharedMaterial"].GetValue(original, null), null); } if (dictionary.ContainsKey("materials") && dictionary.ContainsKey("sharedMaterials")) { Debug.Log((object)"Setting materials property"); dictionary["materials"].SetValue(dst, dictionary["sharedMaterials"].GetValue(original, null), null); } } public static void CopyParticleCustomDataModule(CustomDataModule original, CustomDataModule dst) { //IL_0022: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0036: 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) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Invalid comparison between Unknown and I4 //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Invalid comparison between Unknown and I4 //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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) //IL_0065: 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_0079: 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) ((CustomDataModule)(ref dst)).enabled = ((CustomDataModule)(ref original)).enabled; ParticleSystemCustomData[] array = (ParticleSystemCustomData[])(object)new ParticleSystemCustomData[2] { default(ParticleSystemCustomData), (ParticleSystemCustomData)1 }; ParticleSystemCustomData[] array2 = array; foreach (ParticleSystemCustomData val in array2) { ((CustomDataModule)(ref dst)).SetMode(val, ((CustomDataModule)(ref original)).GetMode(val)); ParticleSystemCustomDataMode mode = ((CustomDataModule)(ref original)).GetMode(val); if ((int)mode == 2) { ((CustomDataModule)(ref dst)).SetColor(val, ((CustomDataModule)(ref original)).GetColor(val)); } else if ((int)mode == 1) { int vectorComponentCount = ((CustomDataModule)(ref original)).GetVectorComponentCount(val); ((CustomDataModule)(ref dst)).SetVectorComponentCount(val, vectorComponentCount); for (int j = 0; j < vectorComponentCount; j++) { ((CustomDataModule)(ref dst)).SetVector(val, j, ((CustomDataModule)(ref original)).GetVector(val, j)); } } } } public static void CopyParticleSystemRendererSettings(ParticleSystemRenderer original, ParticleSystemRenderer dst) { List<ParticleSystemVertexStream> list = new List<ParticleSystemVertexStream>(); original.GetActiveVertexStreams(list); dst.SetActiveVertexStreams(list); list.Clear(); original.GetActiveTrailVertexStreams(list); dst.SetActiveTrailVertexStreams(list); } public static GameObject copyGameObjectChain(GameObject root, GameObject leaf, GameObject attachTo = null) { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_00bd: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_002b: 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_003f: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Expected O, but got Unknown //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)root == (Object)(object)leaf) { GameObject val = new GameObject(); val.transform.parent = root.transform; val.transform.localPosition = default(Vector3); val.transform.localRotation = Quaternion.identity; val.transform.localScale = new Vector3(1f, 1f, 1f); val.layer = leaf.layer; return val; } string name = ((Object)leaf).name; GameObject val2 = new GameObject(((Object)leaf).name); GameObject val3 = val2; GameObject val4 = new GameObject(); val3.transform.parent = val4.transform; val3.layer = leaf.layer; val3.transform.localPosition = leaf.transform.localPosition; val3.transform.localRotation = leaf.transform.localRotation; val3.transform.localScale = leaf.transform.localScale; while ((Object)(object)leaf.transform.parent != (Object)null && (Object)(object)((Component)leaf.transform.parent).gameObject != (Object)(object)root) { leaf = ((Component)leaf.transform.parent).gameObject; val3 = val4; val4 = new GameObject(); ((Object)val3).name = ((Object)leaf).name; val3.layer = leaf.layer; val3.transform.parent = val4.transform; val3.transform.localPosition = leaf.transform.localPosition; val3.transform.localRotation = leaf.transform.localRotation; val3.transform.localScale = leaf.transform.localScale; } if ((Object)(object)leaf.transform.parent == (Object)null) { throw new Exception("Leaf " + name + " doesn't have " + ((Object)root).name + " in its hierarchy"); } val4.transform.parent = (attachTo ?? root).transform; val4.layer = (attachTo ?? root).layer; val4.transform.localPosition = default(Vector3); val4.transform.localRotation = Quaternion.identity; val4.transform.localScale = new Vector3(1f, 1f, 1f); return val2; } public static Transform getChildByPath(GameObject root, params string[] path) { if ((Object)(object)root == (Object)null) { return null; } if (path.Length == 0) { return null; } Transform val = root.transform; foreach (string text in path) { val = val.Find(text); if ((Object)(object)val == (Object)null) { return null; } } return val; } } public class GradientUtils { public static void rescaleAlphaTimes(Gradient grad, float minBound, float maxBound) { //IL_0035: 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) GradientAlphaKey[] alphaKeys = grad.alphaKeys; GradientAlphaKey[] array = (GradientAlphaKey[])(object)new GradientAlphaKey[alphaKeys.Length]; for (int i = 0; i < alphaKeys.Length; i++) { array[i] = new GradientAlphaKey(alphaKeys[i].alpha, Mathf.Lerp(minBound, maxBound, alphaKeys[i].time)); } grad.SetKeys(grad.colorKeys, array); } public static Gradient getNormalizedGradient(Material mat, Gradient grad, Color baseColor) { //IL_003d: 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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_007c: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: 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_011c: 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_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0159: 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: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Expected O, but got Unknown //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) //IL_0421: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_0302: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0336: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0453: Unknown result type (might be due to invalid IL or missing references) //IL_0458: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) //IL_04c4: Unknown result type (might be due to invalid IL or missing references) //IL_04cb: Unknown result type (might be due to invalid IL or missing references) //IL_04d3: Unknown result type (might be due to invalid IL or missing references) //IL_04da: Unknown result type (might be due to invalid IL or missing references) //IL_04e2: Unknown result type (might be due to invalid IL or missing references) //IL_04e9: Unknown result type (might be due to invalid IL or missing references) //IL_04fe: Unknown result type (might be due to invalid IL or missing references) //IL_0508: Unknown result type (might be due to invalid IL or missing references) //IL_0512: Unknown result type (might be due to invalid IL or missing references) //IL_05a6: Unknown result type (might be due to invalid IL or missing references) //IL_05b0: Unknown result type (might be due to invalid IL or missing references) //IL_05ba: Unknown result type (might be due to invalid IL or missing references) //IL_05d0: Unknown result type (might be due to invalid IL or missing references) //IL_05d4: Unknown result type (might be due to invalid IL or missing references) //IL_05e4: Unknown result type (might be due to invalid IL or missing references) //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_0540: Unknown result type (might be due to invalid IL or missing references) //IL_054a: Unknown result type (might be due to invalid IL or missing references) //IL_055b: Unknown result type (might be due to invalid IL or missing references) //IL_0565: Unknown result type (might be due to invalid IL or missing references) //IL_056f: Unknown result type (might be due to invalid IL or missing references) //IL_057e: Unknown result type (might be due to invalid IL or missing references) //IL_0585: Unknown result type (might be due to invalid IL or missing references) //IL_0598: Unknown result type (might be due to invalid IL or missing references) GradientColorKey[] colorKeys = grad.colorKeys; GradientAlphaKey[] alphaKeys = grad.alphaKeys; List<GradientColorKey> list = new List<GradientColorKey>(); List<GradientAlphaKey> list2 = new List<GradientAlphaKey>(); StandardShaderUtils.ParticleColorMode particleColorMode = (((Object)(object)mat != (Object)null) ? StandardShaderUtils.getColorMode(mat) : StandardShaderUtils.ParticleColorMode.Multiply); GradientColorKey[] array = colorKeys; foreach (GradientColorKey val in array) { Color color = val.color; switch (particleColorMode) { case StandardShaderUtils.ParticleColorMode.Multiply: color.r *= baseColor.r; color.g *= baseColor.g; color.b *= baseColor.b; break; case StandardShaderUtils.ParticleColorMode.Additive: color.r += baseColor.r; color.g += baseColor.g; color.b += baseColor.b; break; case StandardShaderUtils.ParticleColorMode.Subtractive: color.r = 1f - (baseColor.r - color.r); color.g = 1f - (baseColor.g - color.g); color.b = 1f - (baseColor.b - color.b); break; } list.Add(new GradientColorKey(color, val.time)); } GradientAlphaKey[] array2 = alphaKeys; foreach (GradientAlphaKey val2 in array2) { list2.Add(new GradientAlphaKey(val2.alpha * baseColor.a, val2.time)); } List<GradientAlphaKey> list3 = new List<GradientAlphaKey>(); float num = 0.0001f; if (list.Count > 1) { GradientColorKey item = default(GradientColorKey); GradientColorKey item2 = default(GradientColorKey); for (int k = 0; k < list.Count; k++) { GradientColorKey val3 = list[k]; if (val3.color != Color.black) { list3.Add(new GradientAlphaKey(1f, val3.time)); continue; } if (k == 0) { list.Remove(val3); list.Insert(0, new GradientColorKey(getNonblackAfter(list, val3.time).color, val3.time)); list3.Insert(0, new GradientAlphaKey(0f, val3.time)); continue; } if (k == list.Count - 1) { list.Remove(val3); list.Insert(k, new GradientColorKey(getNonblackBefore(list, val3.time).color, val3.time)); list3.Add(new GradientAlphaKey(0f, val3.time)); continue; } list.Remove(val3); ((GradientColorKey)(ref item))..ctor(getNonblackBefore(list, val3.time).color, Mathf.Max(0f, val3.time - num)); ((GradientColorKey)(ref item2))..ctor(getNonblackAfter(list, val3.time).color, Mathf.Min(1f, val3.time + num)); list.Add(item); list.Add(item2); list3.Add(new GradientAlphaKey(0f, Mathf.Max(0f, val3.time - num))); list3.Add(new GradientAlphaKey(0f, Mathf.Min(1f, val3.time + num))); list.Sort((GradientColorKey x, GradientColorKey y) => x.time.CompareTo(y.time)); k++; } } list2 = combineAlphas(list2, list3); list.Sort((GradientColorKey x, GradientColorKey y) => x.time.CompareTo(y.time)); list2.Sort((GradientAlphaKey x, GradientAlphaKey y) => x.time.CompareTo(y.time)); Gradient val4 = new Gradient(); val4.SetKeys(list.ToArray(), list2.ToArray()); HashSet<float> hashSet = new HashSet<float>(); hashSet.Add(0f); hashSet.Add(1f); foreach (GradientColorKey item3 in list) { hashSet.Add(item3.time); } foreach (GradientAlphaKey item4 in list2) { hashSet.Add(item4.time); } List<float> list4 = new List<float>(hashSet); list4.Sort(); List<GradientColorKey> list5 = new List<GradientColorKey>(); List<GradientAlphaKey> list6 = new List<GradientAlphaKey>(); Color val6 = default(Color); Color val7 = default(Color); foreach (float item5 in list4) { Color val5 = val4.Evaluate(item5); ((Color)(ref val6))..ctor(val5.r * val5.a, val5.g * val5.a, val5.b * val5.a); float num2 = Mathf.Max(new float[3] { val6.r, val6.g, val6.b }); float num3 = num2; if (num3 == 0f) { num2 = Mathf.Max(new float[3] { val5.r, val5.g, val5.b }); list5.Add(new GradientColorKey(new Color(val5.r / num2, val5.g / num2, val5.b / num2, 1f), item5)); list6.Add(new GradientAlphaKey(0f, item5)); } else { ((Color)(ref val7))..ctor(val6.r / num3, val6.g / num3, val6.b / num3, 1f); list5.Add(new GradientColorKey(val7, item5)); list6.Add(new GradientAlphaKey(num3, item5)); } } dedupeColorKeys(list5, num * 2f); dedupeAlphaKeys(list6, num * 2f); val4.SetKeys(list5.ToArray(), list6.ToArray()); return val4; } private static List<GradientAlphaKey> combineAlphas(List<GradientAlphaKey> a, List<GradientAlphaKey> b) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_009d: 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_00ac: 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_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: 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) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0110: 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) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0146: 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_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) a.Sort((GradientAlphaKey x, GradientAlphaKey y) => x.time.CompareTo(y.time)); b.Sort((GradientAlphaKey x, GradientAlphaKey y) => x.time.CompareTo(y.time)); Gradient val = new Gradient(); val.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.black, 0f), new GradientColorKey(Color.black, 1f) }, a.ToArray()); Gradient val2 = new Gradient(); val2.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.black, 0f), new GradientColorKey(Color.black, 1f) }, b.ToArray()); List<GradientAlphaKey> list = new List<GradientAlphaKey>(); foreach (GradientAlphaKey item in a) { float num = item.alpha * val2.Evaluate(item.time).a; list.Add(new GradientAlphaKey(num, item.time)); } foreach (GradientAlphaKey item2 in b) { float num2 = item2.alpha * val.Evaluate(item2.time).a; list.Add(new GradientAlphaKey(num2, item2.time)); } list.Sort((GradientAlphaKey x, GradientAlphaKey y) => x.time.CompareTo(y.time)); for (int i = 0; i < list.Count - 1; i++) { if (list[i].time == list[i + 1].time) { list.RemoveAt(i); i--; } } return list; } private static void dedupeColorKeys(List<GradientColorKey> keys, float timeEpsilon) { //IL_0014: 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_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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: 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_006b: 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_0084: 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_009e: 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) //IL_00ac: 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) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) while (keys.Count > 1 && approxEqual(keys[0].color, keys[1].color)) { keys.RemoveAt(0); } while (keys.Count > 1 && approxEqual(keys[keys.Count - 1].color, keys[keys.Count - 2].color)) { keys.RemoveAt(keys.Count - 1); } for (int i = 1; i < keys.Count - 1; i++) { if (approxEqual(keys[i - 1].color, keys[i].color) && approxEqual(keys[i].color, keys[i + 1].color)) { keys.RemoveAt(i); i--; } } for (int j = 0; j < keys.Count - 1; j++) { if (approxEqual(keys[j].color, keys[j + 1].color) && Mathf.Abs(keys[j].time - keys[j + 1].time) < timeEpsilon) { keys.RemoveAt(j); j--; } } } private static bool approxEqual(Color a, Color b) { //IL_0006: 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_001b: 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_0030: 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) float num = 0.04f; if (Mathf.Abs(a.r - b.r) < num && Mathf.Abs(a.g - b.g) < num) { return Mathf.Abs(a.b - b.b) < num; } return false; } private static void dedupeAlphaKeys(List<GradientAlphaKey> keys, float timeEpsilon) { //IL_0014: 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_004e: 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_0075: 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_0091: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) while (keys.Count > 1 && keys[0].alpha == keys[1].alpha) { keys.RemoveAt(0); } while (keys.Count > 1 && keys[keys.Count - 1].alpha == keys[keys.Count - 2].alpha) { keys.RemoveAt(keys.Count - 1); } for (int i = 1; i < keys.Count - 1; i++) { float num = Mathf.Lerp(keys[i - 1].alpha, keys[i + 1].alpha, Mathf.InverseLerp(keys[i - 1].time, keys[i + 1].time, keys[i].time)); if (Mathf.Abs(num - keys[i].alpha) < 0.04f) { keys.RemoveAt(i); i--; } } for (int j = 0; j < keys.Count - 1; j++) { if (keys[j].alpha == keys[j + 1].alpha && Mathf.Abs(keys[j].time - keys[j + 1].time) < timeEpsilon) { keys.RemoveAt(j); j--; } } } private static GradientColorKey getNonblackBefore(List<GradientColorKey> colorKeys, float time) { //IL_0002: 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) //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_0012: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: 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) GradientColorKey val = colorKeys[0]; for (int i = 0; i < colorKeys.Count; i++) { if (val.color == Color.black) { val = colorKeys[i]; } else if (!(colorKeys[i].color == Color.black)) { if (colorKeys[i].time >= time) { return val; } val = colorKeys[i]; } } return val; } private static GradientColorKey getNonblackAfter(List<GradientColorKey> colorKeys, float time) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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_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) //IL_0067: 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_0035: Unknown result type (might be due t