using UnityEngine; public class rtp_functions { public static Texture2D PrepareHeights(int num, int numLayers, Texture2D[] Heights) { if (Heights == null) { return null; } for (int i = 0; i < Heights.Length; i++) { int num2 = 9999; for (int j = i / 4 * 4; j < i / 4 * 4 + 4 && j < Heights.Length; j++) { if ((bool)Heights[j] && Heights[j].width < num2) { num2 = Heights[j].width; } } } Texture2D[] array = new Texture2D[4]; int num3 = 256; int num4 = ((numLayers >= 12) ? 12 : numLayers); if (num >= num4) { return null; } num = (num >> 2) * 4; for (int k = num; k < num + 4; k++) { if (num < 4) { array[k] = ((k >= Heights.Length) ? null : Heights[k]); if ((bool)array[k]) { num3 = array[k].width; } } else if (num < 8) { array[k - 4] = ((k >= Heights.Length) ? null : Heights[k]); if ((bool)array[k - 4]) { num3 = array[k - 4].width; } } else { array[k - 8] = ((k >= Heights.Length) ? null : Heights[k]); if ((bool)array[k - 8]) { num3 = array[k - 8].width; } } } for (int k = 0; k < 4; k++) { if (!array[k]) { array[k] = new Texture2D(num3, num3); FillTex(array[k], new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue)); } } return CombineHeights(array[0], array[1], array[2], array[3]); } public static Texture2D CombineHeights(Texture2D source_tex0, Texture2D source_tex1, Texture2D source_tex2, Texture2D source_tex3) { Texture2D texture2D = new Texture2D(source_tex0.width, source_tex0.height, TextureFormat.ARGB32, true, true); byte[] array = get_alpha_channel(source_tex0); byte[] array2 = get_alpha_channel(source_tex1); byte[] array3 = get_alpha_channel(source_tex2); byte[] array4 = get_alpha_channel(source_tex3); Color32[] pixels = texture2D.GetPixels32(); for (int i = 0; i < pixels.Length; i++) { pixels[i].r = array[i]; pixels[i].g = array2[i]; pixels[i].b = array3[i]; pixels[i].a = array4[i]; } texture2D.SetPixels32(pixels); texture2D.Apply(true, false); texture2D.Compress(true); texture2D.filterMode = FilterMode.Trilinear; return texture2D; } private static byte[] get_alpha_channel(Texture2D source_tex) { Color32[] pixels = source_tex.GetPixels32(); byte[] array = new byte[pixels.Length]; for (int i = 0; i < pixels.Length; i++) { array[i] = pixels[i].a; } return array; } private static void FillTex(Texture2D tex, Color32 col) { Color32[] pixels = tex.GetPixels32(); for (int i = 0; i < pixels.Length; i++) { pixels[i].r = col.r; pixels[i].g = col.g; pixels[i].b = col.b; pixels[i].a = col.a; } tex.SetPixels32(pixels); } }