Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/Mtree/Utils.cs
2026-02-21 16:45:37 +08:00

213 lines
4.6 KiB
C#

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>(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<int> hashSet = new HashSet<int>();
HashSet<int> hashSet2 = new HashSet<int>();
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<int>();
}
for (int n = 0; n < pixels.Length; n++)
{
pixels[n].a = array[n].a;
}
texture.SetPixels(pixels);
}
public static void AddTriangle(Queue<int> triangles, int i1, int i2, int i3)
{
triangles.Enqueue(i1);
triangles.Enqueue(i2);
triangles.Enqueue(i3);
}
}
}