using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; using UnityStandardAssets.ImageEffects; namespace cakeslice { // Token: 0x02000113 RID: 275 [DisallowMultipleComponent] [RequireComponent(typeof(Camera))] public class OutlineEffect : MonoBehaviour { // Token: 0x1700005D RID: 93 // (get) Token: 0x0600167A RID: 5754 RVA: 0x0019E65A File Offset: 0x0019C85A // (set) Token: 0x0600167B RID: 5755 RVA: 0x0019E661 File Offset: 0x0019C861 public static OutlineEffect Instance { get; private set; } // Token: 0x0600167C RID: 5756 RVA: 0x0019E669 File Offset: 0x0019C869 private Material GetMaterialFromID(int ID) { if (ID == 0) { return this.outline1Material; } if (ID == 1) { return this.outline2Material; } return this.outline3Material; } // Token: 0x0600167D RID: 5757 RVA: 0x0019E688 File Offset: 0x0019C888 private Material CreateMaterial(Color emissionColor) { Material material = new Material(this.outlineBufferShader); material.SetColor("_Color", emissionColor); material.SetInt("_SrcBlend", 5); material.SetInt("_DstBlend", 10); material.SetInt("_ZWrite", 0); material.DisableKeyword("_ALPHATEST_ON"); material.EnableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 3000; return material; } // Token: 0x0600167E RID: 5758 RVA: 0x0019E6FD File Offset: 0x0019C8FD private void Awake() { if (OutlineEffect.Instance != null) { Object.Destroy(this); throw new Exception("you can only have one outline camera in the scene"); } if (this.blur) { this.blur.enabled = false; } OutlineEffect.Instance = this; } // Token: 0x0600167F RID: 5759 RVA: 0x0019E73C File Offset: 0x0019C93C private void Start() { this.CreateMaterialsIfNeeded(); this.UpdateMaterialsPublicProperties(); if (!Records.x.editor) { this.turnOffOutlines = false; } if (this.sourceCamera == null) { this.sourceCamera = base.GetComponent(); if (this.sourceCamera == null) { this.sourceCamera = Camera.main; } } this.hovers = Links.x.cameraEffects.hovers; this.hoverTypes = Links.x.cameraEffects.hoverTypes; this.bubbles = Links.x.cameraEffects.bubbles; this.bubbleTypes = Links.x.cameraEffects.bubbleTypes; if (this.renderTexture != null) { this.renderTexture.Release(); } this.qualitySettings = 1; if (QualitySettings.antiAliasing == 2) { this.qualitySettings = 2; } if (QualitySettings.antiAliasing == 4) { this.qualitySettings = 4; } if (QualitySettings.antiAliasing == 8) { this.qualitySettings = 8; } this.renderTexture = new RenderTexture(this.sourceCamera.pixelWidth, this.sourceCamera.pixelHeight, 16, RenderTextureFormat.R8); this.renderTexture.antiAliasing = this.qualitySettings; if (QualitySettings.antiAliasing == 0) { this.qualitySettings = 0; } this.commandBuffer = new CommandBuffer(); this.sourceCamera.AddCommandBuffer(CameraEvent.AfterForwardOpaque, this.commandBuffer); } // Token: 0x06001680 RID: 5760 RVA: 0x0019E8A0 File Offset: 0x0019CAA0 public void OnPreRender() { if (this.commandBuffer == null) { return; } this.CreateMaterialsIfNeeded(); if (this.renderTexture == null || this.renderTexture.width != this.sourceCamera.pixelWidth || this.renderTexture.height != this.sourceCamera.pixelHeight || this.qualitySettings != QualitySettings.antiAliasing) { if (this.renderTexture != null) { this.renderTexture.Release(); } this.qualitySettings = 1; if (QualitySettings.antiAliasing == 2) { this.qualitySettings = 2; } if (QualitySettings.antiAliasing == 4) { this.qualitySettings = 4; } if (QualitySettings.antiAliasing == 8) { this.qualitySettings = 8; } this.renderTexture = new RenderTexture(this.sourceCamera.pixelWidth, this.sourceCamera.pixelHeight, 16, RenderTextureFormat.Default); this.renderTexture.antiAliasing = this.qualitySettings; if (QualitySettings.antiAliasing == 0) { this.qualitySettings = 0; } } this.UpdateMaterialsPublicProperties(); this.commandBuffer.Clear(); RenderTargetIdentifier renderTargetIdentifier = new RenderTargetIdentifier(this.renderTexture); this.commandBuffer.SetRenderTarget(renderTargetIdentifier, BuiltinRenderTextureType.CameraTarget); this.commandBuffer.ClearRenderTarget(false, true, Color.clear); foreach (Outline outline in this.outlines) { 2112; if (outline != null && outline.gameObject.activeSelf && outline.gameObject.activeInHierarchy) { bool flag = true; if (outline.Renderer && !outline.Renderer.enabled) { flag = false; } if (outline.SkinnedMeshRenderer && !outline.SkinnedMeshRenderer.enabled) { flag = false; } if (flag) { for (int i = 0; i < outline.SharedMaterials.Length; i++) { Material material = null; if (outline.gameObject.layer == 11) { this.commandBuffer.SetGlobalFloat("useZCutoff", 0f); } else { this.commandBuffer.SetGlobalFloat("useZCutoff", 1f); } if (outline.SharedMaterials[i].mainTexture != null && outline.SharedMaterials[i]) { foreach (Material material2 in this.materialBuffer) { if (material2.mainTexture == outline.SharedMaterials[i].mainTexture && material2.color == this.GetMaterialFromID(outline.color).color) { material = material2; } } if (material == null) { material = new Material(this.GetMaterialFromID(outline.color)); material.mainTexture = outline.SharedMaterials[i].mainTexture; this.materialBuffer.Add(material); } } else { material = this.GetMaterialFromID(outline.color); } if (this.backfaceCulling) { material.SetInt("_Culling", 2); } else { material.SetInt("_Culling", 0); } this.commandBuffer.DrawRenderer(outline.Renderer, material, i, 0); } } } } if (Links.x.cameraEffects.HoverCount() <= 0 && Links.x.cameraEffects.BubbleCount() <= 0) { int count = this.outlines.Count; } } // Token: 0x06001681 RID: 5761 RVA: 0x0019EC68 File Offset: 0x0019CE68 private void OnEnable() { if (this.autoEnableOutlines) { foreach (Outline outline in Object.FindObjectsByType(FindObjectsSortMode.None)) { outline.enabled = false; outline.enabled = true; } } } // Token: 0x06001682 RID: 5762 RVA: 0x0019ECA2 File Offset: 0x0019CEA2 private void OnDestroy() { if (this.renderTexture != null) { this.renderTexture.Release(); } this.DestroyMaterials(); } // Token: 0x06001683 RID: 5763 RVA: 0x0019ECC4 File Offset: 0x0019CEC4 private void OnRenderImage(RenderTexture source, RenderTexture destination) { if ((Links.x.cameraEffects.HoverCount() > 0 || Links.x.cameraEffects.BubbleCount() > 0 || this.outlines.Count > 0) && !this.turnOffOutlines) { this.outlineShaderMaterial.SetTexture("_FinalOutlineSource", this.renderTexture); this.outlineShaderMaterial.SetFloat("UseBlur", 0f); Graphics.Blit(source, destination, this.outlineShaderMaterial, 1); return; } Graphics.Blit(source, destination); } // Token: 0x06001684 RID: 5764 RVA: 0x0019ED4C File Offset: 0x0019CF4C private void CreateMaterialsIfNeeded() { if (this.outlineShader == null) { this.outlineShader = Resources.Load("OutlineShader"); } if (this.outlineBufferShader == null) { this.outlineBufferShader = Resources.Load("OutlineBufferShader"); } if (this.outlineShaderMaterial == null) { this.outlineShaderMaterial = new Material(this.outlineShader); this.outlineShaderMaterial.hideFlags = HideFlags.HideAndDontSave; this.UpdateMaterialsPublicProperties(); } if (this.outlineEraseMaterial == null) { this.outlineEraseMaterial = this.CreateMaterial(new Color(0f, 0f, 0f, 0f)); } if (this.outline1Material == null) { this.outline1Material = this.CreateMaterial(new Color(1f, 0f, 0f, 0f)); } if (this.outline2Material == null) { this.outline2Material = this.CreateMaterial(new Color(0f, 1f, 0f, 0f)); } if (this.outline3Material == null) { this.outline3Material = this.CreateMaterial(new Color(0f, 0f, 1f, 0f)); } } // Token: 0x06001685 RID: 5765 RVA: 0x0019EE94 File Offset: 0x0019D094 private void DestroyMaterials() { foreach (Material material in this.materialBuffer) { Object.DestroyImmediate(material); } this.materialBuffer.Clear(); Object.DestroyImmediate(this.outlineShaderMaterial); Object.DestroyImmediate(this.outlineEraseMaterial); Object.DestroyImmediate(this.outline1Material); Object.DestroyImmediate(this.outline2Material); Object.DestroyImmediate(this.outline3Material); this.outlineShader = null; this.outlineBufferShader = null; this.outlineShaderMaterial = null; this.outlineEraseMaterial = null; this.outline1Material = null; this.outline2Material = null; this.outline3Material = null; } // Token: 0x06001686 RID: 5766 RVA: 0x0019EF58 File Offset: 0x0019D158 public void UpdateMaterialsPublicProperties() { if (this.outlineShaderMaterial) { float num = 1f; if (this.scaleWithScreenSize) { num = (float)Screen.height / this.scale; } if (this.scaleWithScreenSize && num < 1f) { this.outlineShaderMaterial.SetFloat("_LineThicknessX", 0.001f * (1f / (float)Screen.width) * 1000f * this.lineThickness); this.outlineShaderMaterial.SetFloat("_LineThicknessY", 0.001f * (1f / (float)Screen.height) * 1000f * this.lineThickness); } else { this.outlineShaderMaterial.SetFloat("_LineThicknessX", num * (this.lineThickness / 1000f) * (1f / (float)Screen.width) * 1000f); this.outlineShaderMaterial.SetFloat("_LineThicknessY", num * (this.lineThickness / 1000f) * (1f / (float)Screen.height) * 1000f); } this.outlineShaderMaterial.SetFloat("_LineIntensity", this.lineIntensity); this.outlineShaderMaterial.SetFloat("_FillAmount", this.fillAmount); this.outlineShaderMaterial.SetColor("_LineColor1", this.lineColor0 * this.lineColor0); this.outlineShaderMaterial.SetColor("_LineColor2", this.lineColor1 * this.lineColor1); this.outlineShaderMaterial.SetColor("_LineColor3", this.lineColor2 * this.lineColor2); Links.x.hoverMaterial1.SetColor("_Color", Color.red); Links.x.hoverMaterial2.SetColor("_Color", Color.green); Links.x.hoverMaterial3.SetColor("_Color", Color.blue); if (this.flipY) { this.outlineShaderMaterial.SetInt("_FlipY", 1); } else { this.outlineShaderMaterial.SetInt("_FlipY", 0); } if (!this.additiveRendering) { this.outlineShaderMaterial.SetInt("_Dark", 1); } else { this.outlineShaderMaterial.SetInt("_Dark", 0); } if (this.cornerOutlines) { this.outlineShaderMaterial.SetInt("_CornerOutlines", 1); } else { this.outlineShaderMaterial.SetInt("_CornerOutlines", 0); } Shader.SetGlobalFloat("_OutlineAlphaCutoff", this.alphaCutoff); } } // Token: 0x06001687 RID: 5767 RVA: 0x0019F1D1 File Offset: 0x0019D3D1 public void AddOutline(Outline outline) { this.outlines.Add(outline); } // Token: 0x06001688 RID: 5768 RVA: 0x0019F1E0 File Offset: 0x0019D3E0 public void RemoveOutline(Outline outline) { this.outlines.Remove(outline); } // Token: 0x04002675 RID: 9845 private readonly LinkedSet outlines = new LinkedSet(); // Token: 0x04002676 RID: 9846 public bool useBlur; // Token: 0x04002677 RID: 9847 [Range(0.0001f, 6f)] public float lineThickness = 1.25f; // Token: 0x04002678 RID: 9848 [Range(0f, 10f)] public float lineIntensity = 0.5f; // Token: 0x04002679 RID: 9849 [Range(0f, 1f)] public float fillAmount = 0.2f; // Token: 0x0400267A RID: 9850 public Color lineColor0 = Color.red; // Token: 0x0400267B RID: 9851 public Color lineColor1 = Color.green; // Token: 0x0400267C RID: 9852 public Color lineColor2 = Color.blue; // Token: 0x0400267D RID: 9853 public bool additiveRendering; // Token: 0x0400267E RID: 9854 public bool backfaceCulling = true; // Token: 0x0400267F RID: 9855 [Header("These settings can affect performance!")] public bool cornerOutlines; // Token: 0x04002680 RID: 9856 public bool addLinesBetweenColors; // Token: 0x04002681 RID: 9857 [Header("Advanced settings")] public bool scaleWithScreenSize = true; // Token: 0x04002682 RID: 9858 [Range(0.1f, 0.9f)] public float alphaCutoff = 0.5f; // Token: 0x04002683 RID: 9859 public bool flipY; // Token: 0x04002684 RID: 9860 public Camera sourceCamera; // Token: 0x04002685 RID: 9861 public bool autoEnableOutlines = true; // Token: 0x04002686 RID: 9862 public bool turnOffOutlines; // Token: 0x04002687 RID: 9863 [HideInInspector] public Camera outlineCamera; // Token: 0x04002688 RID: 9864 private Material outline1Material; // Token: 0x04002689 RID: 9865 private Material outline2Material; // Token: 0x0400268A RID: 9866 private Material outline3Material; // Token: 0x0400268B RID: 9867 private Material outlineEraseMaterial; // Token: 0x0400268C RID: 9868 private Shader outlineShader; // Token: 0x0400268D RID: 9869 private Shader outlineBufferShader; // Token: 0x0400268E RID: 9870 [HideInInspector] public Material outlineShaderMaterial; // Token: 0x0400268F RID: 9871 [HideInInspector] public RenderTexture renderTexture; // Token: 0x04002690 RID: 9872 [HideInInspector] private int w; // Token: 0x04002691 RID: 9873 [HideInInspector] private int h; // Token: 0x04002692 RID: 9874 private int qualitySettings; // Token: 0x04002693 RID: 9875 public float scale = 360f; // Token: 0x04002694 RID: 9876 private List hovers; // Token: 0x04002695 RID: 9877 private List hoverTypes; // Token: 0x04002696 RID: 9878 private List bubbles; // Token: 0x04002697 RID: 9879 private List bubbleTypes; // Token: 0x04002698 RID: 9880 private Material[] mats; // Token: 0x04002699 RID: 9881 public BlurOptimized blur; // Token: 0x0400269A RID: 9882 private CommandBuffer commandBuffer; // Token: 0x0400269B RID: 9883 private List materialBuffer = new List(); // Token: 0x0400269C RID: 9884 private bool RenderTheNextFrame; } }