Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of RoR2Shaders v1.2.0
RoR2Shaders.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HG.Reflection; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.ContentManagement; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering.PostProcessing; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.ResourceManagement.ResourceProviders; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] public class SceneLoader : MonoBehaviour { public string sceneName; public GameObject cameraPrefab; private void Start() { //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) AsyncOperationHandle<SceneInstance> val = Addressables.LoadSceneAsync((object)sceneName, (LoadSceneMode)0, true, 100); val.Completed += OnSceneLoaded; } private void OnSceneLoaded(AsyncOperationHandle<SceneInstance> obj) { Object.Instantiate<GameObject>(cameraPrefab); } } namespace ProceduralStages { public class DelayedInstantier : MonoBehaviour { public GameObject prefab; private bool instantied; public void OnDisable() { instantied = false; } public void Update() { if (!instantied) { Object.Instantiate<GameObject>(prefab); instantied = true; } } } public class FlyCamera : MonoBehaviour { public float acceleration = 300f; public float accSprintMultiplier = 8f; public float lookSensitivity = 2f; public float dampingCoefficient = 5f; public bool focusOnEnable = true; [Range(0f, 180f)] public float fov = 90f; public PostProcessProfile postProcessProfile; private Vector3 velocity; private GameObject cameraObject; private static bool Focused { get { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Invalid comparison between Unknown and I4 return (int)Cursor.lockState == 1; } set { Cursor.lockState = (CursorLockMode)(value ? 1 : 0); Cursor.visible = !value; } } private void Awake() { //IL_000f: 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) if (!Application.isPlaying) { return; } GameObject val = Object.Instantiate<GameObject>(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Core/Main Camera.prefab").WaitForCompletion(), ((Component)this).transform); CameraRigController component = val.GetComponent<CameraRigController>(); val.GetComponent<CameraRigController>().isCutscene = true; component.sceneCam.fieldOfView = fov; cameraObject = ((Component)val.transform.GetChild(0)).gameObject; PostProcessVolume component2 = ((Component)cameraObject.transform.Find("GlobalPostProcessVolume")).GetComponent<PostProcessVolume>(); foreach (PostProcessEffectSettings setting in postProcessProfile.settings) { component2.profile.AddSettings(setting); } } private void OnEnable() { if (focusOnEnable) { Focused = true; } } private void OnDisable() { Focused = false; } private void Update() { //IL_003c: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_0078: 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) if (Application.isPlaying) { GameObject obj = GameObject.Find("HUDSimple(Clone)"); if (obj != null) { obj.SetActive(false); } } if (Focused) { UpdateInput(); } else if (Input.GetMouseButtonDown(0)) { Focused = true; } velocity = Vector3.Lerp(velocity, Vector3.zero, dampingCoefficient * Time.deltaTime); Transform transform = cameraObject.transform; transform.position += velocity * Time.deltaTime; } private void UpdateInput() { //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_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0062: 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) velocity += GetAccelerationVector() * Time.deltaTime; Vector2 val = lookSensitivity * new Vector2(Input.GetAxis("Mouse X"), 0f - Input.GetAxis("Mouse Y")); Quaternion rotation = cameraObject.transform.rotation; Quaternion val2 = Quaternion.AngleAxis(val.x, Vector3.up); Quaternion val3 = Quaternion.AngleAxis(val.y, Vector3.right); cameraObject.transform.rotation = val2 * rotation * val3; if (Input.GetKeyDown((KeyCode)27)) { Focused = false; } } private Vector3 GetAccelerationVector() { //IL_0007: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_0058: 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_007b: 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_00a1: 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_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) Vector3 moveInput = default(Vector3); AddMovement((KeyCode)119, Vector3.forward); AddMovement((KeyCode)115, Vector3.back); AddMovement((KeyCode)100, Vector3.right); AddMovement((KeyCode)97, Vector3.left); AddMovement((KeyCode)304, Vector3.down); AddMovement((KeyCode)32, Vector3.up); Vector3 val = cameraObject.transform.TransformVector(((Vector3)(ref moveInput)).normalized); if (Input.GetKey((KeyCode)306)) { return val * (acceleration * accSprintMultiplier); } return val * acceleration; void AddMovement(KeyCode key, Vector3 dir) { //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_0015: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKey(key)) { moveInput += dir; } } } } } namespace RoR2Shaders { public static class Commands { [ConCommand(/*Could not decode attribute arguments.*/)] public static void ToggleReport(ConCommandArgs args) { } } public class ContentProvider : IContentPackProvider { public static ContentPack ContentPack = new ContentPack(); public string identifier => "Lawlzee.RoR2Shaders.ContentProvider"; public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { ContentPack.identifier = identifier; string directoryName = Path.GetDirectoryName(typeof(ContentProvider).Assembly.Location); AssetBundle stageReportBundle = null; yield return LoadAssetBundle(Path.Combine(directoryName, "ror2shaders"), args.progressReceiver, delegate(AssetBundle assetBundle) { stageReportBundle = assetBundle; }); yield return LoadAllAssetsAsync<Shader>(stageReportBundle, args.progressReceiver, (Action<Shader[]>)delegate(Shader[] shaders) { Dictionary<string, Shader> dictionary = (Dictionary<string, Shader>)typeof(LegacyShaderAPI).GetField("shaderNameToShaderCache", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); foreach (Shader val in shaders) { dictionary.Add(((Object)val).name, val); } }); } private IEnumerator LoadAssetBundle(string assetBundleFullPath, IProgress<float> progress, Action<AssetBundle> onAssetBundleLoaded) { AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(assetBundleFullPath); while (!((AsyncOperation)assetBundleCreateRequest).isDone) { progress.Report(((AsyncOperation)assetBundleCreateRequest).progress); yield return null; } onAssetBundleLoaded(assetBundleCreateRequest.assetBundle); } private static IEnumerator LoadAllAssetsAsync<T>(AssetBundle assetBundle, IProgress<float> progress, Action<T[]> onAssetsLoaded) where T : Object { AssetBundleRequest sceneDefsRequest = assetBundle.LoadAllAssetsAsync<T>(); while (!((AsyncOperation)sceneDefsRequest).isDone) { progress.Report(((AsyncOperation)sceneDefsRequest).progress); yield return null; } onAssetsLoaded(sceneDefsRequest.allAssets.Cast<T>().ToArray()); } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(ContentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } public static class Log { private static ManualLogSource _logSource; public static void Init(ManualLogSource logSource) { _logSource = logSource; } public static void Debug(object data) { if (_logSource == null) { Debug.Log(data); } else { _logSource.LogDebug(data); } } public static void Error(object data) { if (_logSource == null) { Debug.LogError(data); } else { _logSource.LogError(data); } } public static void Fatal(object data) { if (_logSource == null) { Debug.LogError(data); } else { _logSource.LogFatal(data); } } public static void Info(object data) { if (_logSource == null) { Debug.Log(data); } else { _logSource.LogInfo(data); } } public static void Message(object data) { if (_logSource == null) { Debug.Log(data); } else { _logSource.LogMessage(data); } } public static void Warning(object data) { if (_logSource == null) { Debug.LogWarning(data); } else { _logSource.LogWarning(data); } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("Lawlzee.RoR2Shaders", "RoR2Shaders", "1.2.0")] public class Main : BaseUnityPlugin { public const string PluginGUID = "Lawlzee.RoR2Shaders"; public const string PluginAuthor = "Lawlzee"; public const string PluginName = "RoR2Shaders"; public const string PluginVersion = "1.2.0"; public void Awake() { //IL_0030: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Expected O, but got Unknown Log.Init(((BaseUnityPlugin)this).Logger); Texture2D val = LoadTexture("icon.png"); ModSettingsManager.SetModIcon(Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0f, 0f))); ModSettingsManager.SetModDescription("This mod adds custom shaders to Risk of Rain 2."); PostProcessProfileManager.Init(); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate { ColorBanding.Init(((BaseUnityPlugin)this).Config); Grayscale.Init(((BaseUnityPlugin)this).Config); Outline.Init(((BaseUnityPlugin)this).Config); }); ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(GiveToRoR2OurContentPackProviders); } private Texture2D LoadTexture(string name) { //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_0028: Expected O, but got Unknown //IL_002a: Expected O, but got Unknown Texture2D val = new Texture2D(2, 2); ImageConversion.LoadImage(val, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), name))); return val; } private void GiveToRoR2OurContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new ContentProvider()); } } public class SemanticVersion { public int Major; public int Minor; public int Patch; public static SemanticVersion Parse(string version) { string[] array = version.Split('.'); return new SemanticVersion { Major = int.Parse(array[0]), Minor = int.Parse(array[1]), Patch = int.Parse(array[2]) }; } public static bool operator <(SemanticVersion a, SemanticVersion b) { if (a.Major < b.Major) { return true; } if (a.Major > b.Major) { return false; } if (a.Minor < b.Minor) { return true; } if (a.Minor > b.Minor) { return false; } if (a.Patch < b.Patch) { return true; } return false; } public static bool operator >(SemanticVersion a, SemanticVersion b) { if (a.Major > b.Major) { return true; } if (a.Major < b.Major) { return false; } if (a.Minor > b.Minor) { return true; } if (a.Minor < b.Minor) { return false; } if (a.Patch > b.Patch) { return true; } return false; } public static bool operator ==(SemanticVersion a, SemanticVersion b) { if (a.Major == b.Major && a.Minor == b.Minor) { return a.Patch == b.Patch; } return false; } public static bool operator !=(SemanticVersion a, SemanticVersion b) { if (a.Major == b.Major && a.Minor == b.Minor) { return a.Patch != b.Patch; } return true; } public override bool Equals(object obj) { if (obj is SemanticVersion semanticVersion && Major == semanticVersion.Major && Minor == semanticVersion.Minor) { return Patch == semanticVersion.Patch; } return false; } public override int GetHashCode() { return ((-639545495 * -1521134295 + Major.GetHashCode()) * -1521134295 + Minor.GetHashCode()) * -1521134295 + Patch.GetHashCode(); } } [Serializable] [PostProcess(/*Could not decode attribute arguments.*/)] public sealed class ColorBanding : PostProcessEffectSettings { [Tooltip("Color banding bins")] public IntParameter bins; public static void Init(ConfigFile config) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0054: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown ConfigEntry<bool> colorBandingEnabled = config.Bind<bool>("Color Banding", "Color Banding Enabled", true, "Toggles the Color Banding shader on or off"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(colorBandingEnabled)); ConfigEntry<int> colorBandingBins = config.Bind<int>("Color Banding", "Color Banding Bins", 64, "Sets the number of color bins used in the Color Banding shader; higher values increase color detail."); ModSettingsManager.AddOption((BaseOption)new IntSliderOption(colorBandingBins, new IntSliderConfig { min = 8, max = 128 })); PostProcessProfileManager.AddHandler(delegate(ColorBanding colorBanding) { ((ParameterOverride<bool>)(object)((PostProcessEffectSettings)colorBanding).enabled).Override(colorBandingEnabled.Value); ((ParameterOverride<int>)(object)colorBanding.bins).Override(colorBandingBins.Value); }); colorBandingEnabled.SettingChanged += delegate { PostProcessProfileManager.OnChange<ColorBanding>(); }; colorBandingBins.SettingChanged += delegate { PostProcessProfileManager.OnChange<ColorBanding>(); }; } public ColorBanding() { //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_000e: Expected O, but got Unknown //IL_0013: Expected O, but got Unknown IntParameter val = new IntParameter(); ((ParameterOverride<int>)val).value = 16; bins = val; ((PostProcessEffectSettings)this)..ctor(); } } public sealed class ColorBandingRenderer : PostProcessEffectRenderer<ColorBanding> { public override void Render(PostProcessRenderContext context) { //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) PropertySheet val = context.propertySheets.Get(Shader.Find("Hidden/Custom/ColorBanding")); val.properties.SetInt("_Bins", ParameterOverride<int>.op_Implicit((ParameterOverride<int>)(object)base.settings.bins)); RuntimeUtilities.BlitFullscreenTriangle(context.command, context.source, context.destination, val, 0, false, (Rect?)null); } } [Serializable] [PostProcess(/*Could not decode attribute arguments.*/)] public sealed class Grayscale : PostProcessEffectSettings { [Range(0f, 1f)] [Tooltip("Grayscale effect intensity.")] public FloatParameter blend; public static void Init(ConfigFile config) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown ConfigEntry<bool> grayscaleEnabled = config.Bind<bool>("Grayscale", "Grayscale Enabled", false, "Toggles the grayscale shader on or off"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(grayscaleEnabled)); ConfigEntry<float> grayscaleBlend = config.Bind<float>("Grayscale", "Grayscale Blend", 1f, "Adjusts the intensity of the grayscale effect. 1 = full grayscale, 0 = no effect"); ModSettingsManager.AddOption((BaseOption)new SliderOption(grayscaleBlend, new SliderConfig { min = 0f, max = 1f, formatString = "{0:0.##}" })); PostProcessProfileManager.AddHandler(delegate(Grayscale grayscale) { ((ParameterOverride<bool>)(object)((PostProcessEffectSettings)grayscale).enabled).Override(grayscaleEnabled.Value); ((ParameterOverride<float>)(object)grayscale.blend).Override(grayscaleBlend.Value); }); grayscaleEnabled.SettingChanged += delegate { PostProcessProfileManager.OnChange<Grayscale>(); }; grayscaleBlend.SettingChanged += delegate { PostProcessProfileManager.OnChange<Grayscale>(); }; } public Grayscale() { //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_0011: Expected O, but got Unknown //IL_0016: Expected O, but got Unknown FloatParameter val = new FloatParameter(); ((ParameterOverride<float>)val).value = 0.5f; blend = val; ((PostProcessEffectSettings)this)..ctor(); } } public sealed class GrayscaleRenderer : PostProcessEffectRenderer<Grayscale> { public override void Render(PostProcessRenderContext context) { //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) PropertySheet val = context.propertySheets.Get(Shader.Find("Hidden/Custom/Grayscale")); val.properties.SetFloat("_Blend", ParameterOverride<float>.op_Implicit((ParameterOverride<float>)(object)base.settings.blend)); RuntimeUtilities.BlitFullscreenTriangle(context.command, context.source, context.destination, val, 0, false, (Rect?)null); } } [Serializable] [PostProcess(/*Could not decode attribute arguments.*/)] public sealed class Outline : PostProcessEffectSettings { [Tooltip("Outline color")] public ColorParameter color; [Tooltip("Outline thinness")] public FloatParameter thinness; [Tooltip("Outline density")] [Range(0f, 1f)] public FloatParameter densityInverse; public static void Init(ConfigFile config) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Expected O, but got Unknown //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_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_0108: Expected O, but got Unknown //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Expected O, but got Unknown ConfigEntry<bool> outlineEnabled = config.Bind<bool>("Outline", "Outline Enabled", true, "Toggles the outline shader on or off"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(outlineEnabled)); ConfigEntry<Color> outlineColor = config.Bind<Color>("Outline", "Outline Color", Color.black, "Specifies the color of the outline"); ModSettingsManager.AddOption((BaseOption)new ColorOption(outlineColor)); ConfigEntry<float> outlineThiness = config.Bind<float>("Outline", "Outline Thiness", 2f, "Controls the thickness of the outline; a higher value results in a thinner outline."); ModSettingsManager.AddOption((BaseOption)new SliderOption(outlineThiness, new SliderConfig { min = 0.1f, max = 25f, formatString = "{0:0.##}" })); ConfigEntry<float> outlineDensity = config.Bind<float>("Outline", "Outline Density", 0.75f, "Adjusts the density of the outline effect; a higher value increases the quantity of outlines."); ModSettingsManager.AddOption((BaseOption)new SliderOption(outlineDensity, new SliderConfig { min = 0f, max = 1f, formatString = "{0:0.##}" })); PostProcessProfileManager.AddHandler(delegate(Outline outline) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) ((ParameterOverride<bool>)(object)((PostProcessEffectSettings)outline).enabled).Override(outlineEnabled.Value); ((ParameterOverride<Color>)(object)outline.color).Override(outlineColor.Value); ((ParameterOverride<float>)(object)outline.thinness).Override(outlineThiness.Value); ((ParameterOverride<float>)(object)outline.densityInverse).Override(1f - outlineDensity.Value); }); outlineEnabled.SettingChanged += delegate { PostProcessProfileManager.OnChange<Outline>(); }; outlineColor.SettingChanged += delegate { PostProcessProfileManager.OnChange<Outline>(); }; outlineThiness.SettingChanged += delegate { PostProcessProfileManager.OnChange<Outline>(); }; outlineDensity.SettingChanged += delegate { PostProcessProfileManager.OnChange<Outline>(); }; } public Outline() { //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_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_002c: Expected O, but got Unknown //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_0042: Expected O, but got Unknown ColorParameter val = new ColorParameter(); ((ParameterOverride<Color>)val).value = Color.black; color = val; FloatParameter val2 = new FloatParameter(); ((ParameterOverride<float>)val2).value = 2f; thinness = val2; FloatParameter val3 = new FloatParameter(); ((ParameterOverride<float>)val3).value = 0.25f; densityInverse = val3; ((PostProcessEffectSettings)this)..ctor(); } } public sealed class OutlineRenderer : PostProcessEffectRenderer<Outline> { public override void Render(PostProcessRenderContext context) { //IL_002c: 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_0083: Unknown result type (might be due to invalid IL or missing references) PropertySheet val = context.propertySheets.Get(Shader.Find("Hidden/Custom/Outline")); val.properties.SetColor("_Color", ParameterOverride<Color>.op_Implicit((ParameterOverride<Color>)(object)base.settings.color)); val.properties.SetFloat("_Thinness", ParameterOverride<float>.op_Implicit((ParameterOverride<float>)(object)base.settings.thinness)); val.properties.SetFloat("_DensityInverse", ParameterOverride<float>.op_Implicit((ParameterOverride<float>)(object)base.settings.densityInverse)); RuntimeUtilities.BlitFullscreenTriangle(context.command, context.source, context.destination, val, 0, false, (Rect?)null); } } public class PostProcessProfileManager { private static readonly List<PostProcessProfile> _postProcessProfiles = new List<PostProcessProfile>(); private static readonly Dictionary<Type, Action<PostProcessProfile>> _shaderHandler = new Dictionary<Type, Action<PostProcessProfile>>(); public static void Init() { CameraRigController.onCameraEnableGlobal += delegate(CameraRigController cameraRig) { PostProcessProfile profile2 = ((Component)((Component)cameraRig).transform.GetChild(0).Find("GlobalPostProcessVolume")).GetComponent<PostProcessVolume>().profile; bool num = _postProcessProfiles.Contains(profile2); _postProcessProfiles.Add(profile2); if (num) { return; } foreach (Action<PostProcessProfile> value in _shaderHandler.Values) { value(profile2); } }; CameraRigController.onCameraDisableGlobal += delegate(CameraRigController cameraRig) { PostProcessProfile profile = ((Component)((Component)cameraRig).transform.GetChild(0).Find("GlobalPostProcessVolume")).GetComponent<PostProcessVolume>().profile; if (_postProcessProfiles.Remove(profile) && !_postProcessProfiles.Contains(profile)) { foreach (Type key in _shaderHandler.Keys) { profile.RemoveSettings(key); } } }; } public static void AddHandler<T>(Action<T> handler) where T : PostProcessEffectSettings { _shaderHandler[typeof(T)] = delegate(PostProcessProfile profile) { T val = default(T); if (!profile.TryGetSettings<T>(ref val)) { val = ScriptableObject.CreateInstance<T>(); profile.AddSettings((PostProcessEffectSettings)(object)val); } handler(val); }; OnChange<T>(); } public static void OnChange<T>() where T : PostProcessEffectSettings { if (!_shaderHandler.TryGetValue(typeof(T), out var value)) { return; } foreach (PostProcessProfile item in _postProcessProfiles.Distinct()) { value(item); } } } }