using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; namespace Mtree { public class Utils { public static string GetCurrentPipeline() { string result = "legacy"; if (GraphicsSettings.renderPipelineAsset != null) { if (GraphicsSettings.renderPipelineAsset.GetType().ToString().Contains("LightweightRenderPipelineAsset")) { result = "lwrp"; } if (GraphicsSettings.renderPipelineAsset.GetType().ToString().Contains("UniversalRenderPipelineAsset")) { result = "urp"; } if (GraphicsSettings.renderPipelineAsset.GetType().ToString().Contains("HDRenderPipelineAsset")) { result = "hdrp"; } } else { result = "legacy"; } return result; } public static Shader GetBarkShader() { Shader result = null; switch (GetCurrentPipeline()) { case "legacy": result = Shader.Find("Mtree/Bark"); break; case "lwrp": result = Shader.Find("Mtree/SRP/Bark LWRP"); break; case "hdrp": result = Shader.Find("Mtree/SRP/Bark HDRP"); break; case "urp": result = Shader.Find("Mtree/SRP/Bark URP"); break; } return result; } public static Shader GetLeafShader() { Shader result = null; switch (GetCurrentPipeline()) { case "legacy": result = Shader.Find("Mtree/Leafs"); break; case "lwrp": result = Shader.Find("Mtree/SRP/Leafs LWRP"); break; case "hdrp": result = Shader.Find("Mtree/SRP/Leafs HDRP"); break; case "urp": result = Shader.Find("Mtree/SRP/Leafs URP"); break; } return result; } public static Shader GetBillboardShader() { Shader result = null; switch (GetCurrentPipeline()) { case "legacy": result = Shader.Find("Mtree/Billboard"); break; case "lwrp": result = Shader.Find("Mtree/SRP/Billboard LWRP"); break; case "hdrp": result = Shader.Find("Mtree/SRP/Billboard HDRP"); break; case "urp": result = Shader.Find("Mtree/SRP/Billboard URP"); break; } return result; } public static Shader GetVertexColorShader() { Shader result = null; switch (GetCurrentPipeline()) { case "legacy": result = Shader.Find("Hidden/Mtree/VertexColorShader"); break; case "lwrp": result = Shader.Find("Hidden/Mtree/SRP/VertexColorShader LWRP"); break; case "hdrp": result = Shader.Find("Hidden/Mtree/SRP/VertexColorShader HDRP"); break; case "urp": result = Shader.Find("Hidden/Mtree/SRP/VertexColorShader URP"); break; } return result; } public static T[] SampleArray(T[] array, int number) { number = Mathf.Max(0, Mathf.Min(array.Length, number)); T[] array2 = new T[number]; for (int i = 0; i < number; i++) { int num = UnityEngine.Random.Range(i, array.Length - 1); array2[i] = array[num]; array[num] = array[i]; } return array2; } public static void DilateTexture(Texture2D texture, int iterations) { Color[] pixels = texture.GetPixels(); Color[] array = new Color[pixels.Length]; Array.Copy(pixels, array, pixels.Length); HashSet hashSet = new HashSet(); HashSet hashSet2 = new HashSet(); int width = texture.width; int height = texture.height; for (int i = 0; i < pixels.Length; i++) { if (!(pixels[i].a < 0.5f)) { continue; } for (int j = -1; j < 2; j++) { int num = -1; while (num < 2) { int num2 = i + num * width + j; if (num2 < 0 || num2 >= pixels.Length || !(pixels[num2].a > 0.5f)) { num++; continue; } goto IL_009b; } continue; IL_009b: hashSet.Add(i); break; } } for (int k = 0; k < iterations; k++) { foreach (int item in hashSet) { Color black = Color.black; int num3 = 0; for (int l = -1; l < 2; l++) { for (int m = -1; m < 2; m++) { int num4 = item + m * width + l; if (num4 >= 0 && num4 < pixels.Length && num4 != item) { if (pixels[num4].a > 0.5f) { pixels[num4].a = 1f; black += pixels[num4]; num3++; } else { hashSet2.Add(num4); } } } } pixels[item] = black / num3; } hashSet2.ExceptWith(hashSet); hashSet = hashSet2; hashSet2 = new HashSet(); } for (int n = 0; n < pixels.Length; n++) { pixels[n].a = array[n].a; } texture.SetPixels(pixels); } public static void AddTriangle(Queue triangles, int i1, int i2, int i3) { triangles.Enqueue(i1); triangles.Enqueue(i2); triangles.Enqueue(i3); } } }