using UnityEngine; namespace Artngame.SKYMASTER { public class SimplexNoiseSKYMASTER { private static int[][] grad3; private static int[][] grad4; private static int[] p; private static int[] perm; private static int[][] simplex; static SimplexNoiseSKYMASTER() { grad3 = new int[12][] { new int[3] { 1, 1, 0 }, new int[3] { -1, 1, 0 }, new int[3] { 1, -1, 0 }, new int[3] { -1, -1, 0 }, new int[3] { 1, 0, 1 }, new int[3] { -1, 0, 1 }, new int[3] { 1, 0, -1 }, new int[3] { -1, 0, -1 }, new int[3] { 0, 1, 1 }, new int[3] { 0, -1, 1 }, new int[3] { 0, 1, -1 }, new int[3] { 0, -1, -1 } }; grad4 = new int[32][] { new int[4] { 0, 1, 1, 1 }, new int[4] { 0, 1, 1, -1 }, new int[4] { 0, 1, -1, 1 }, new int[4] { 0, 1, -1, -1 }, new int[4] { 0, -1, 1, 1 }, new int[4] { 0, -1, 1, -1 }, new int[4] { 0, -1, -1, 1 }, new int[4] { 0, -1, -1, -1 }, new int[4] { 1, 0, 1, 1 }, new int[4] { 1, 0, 1, -1 }, new int[4] { 1, 0, -1, 1 }, new int[4] { 1, 0, -1, -1 }, new int[4] { -1, 0, 1, 1 }, new int[4] { -1, 0, 1, -1 }, new int[4] { -1, 0, -1, 1 }, new int[4] { -1, 0, -1, -1 }, new int[4] { 1, 1, 0, 1 }, new int[4] { 1, 1, 0, -1 }, new int[4] { 1, -1, 0, 1 }, new int[4] { 1, -1, 0, -1 }, new int[4] { -1, 1, 0, 1 }, new int[4] { -1, 1, 0, -1 }, new int[4] { -1, -1, 0, 1 }, new int[4] { -1, -1, 0, -1 }, new int[4] { 1, 1, 1, 0 }, new int[4] { 1, 1, -1, 0 }, new int[4] { 1, -1, 1, 0 }, new int[4] { 1, -1, -1, 0 }, new int[4] { -1, 1, 1, 0 }, new int[4] { -1, 1, -1, 0 }, new int[4] { -1, -1, 1, 0 }, new int[4] { -1, -1, -1, 0 } }; p = new int[256] { 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 }; perm = new int[512]; simplex = new int[64][] { new int[4] { 0, 1, 2, 3 }, new int[4] { 0, 1, 3, 2 }, new int[4], new int[4] { 0, 2, 3, 1 }, new int[4], new int[4], new int[4], new int[4] { 1, 2, 3, 0 }, new int[4] { 0, 2, 1, 3 }, new int[4], new int[4] { 0, 3, 1, 2 }, new int[4] { 0, 3, 2, 1 }, new int[4], new int[4], new int[4], new int[4] { 1, 3, 2, 0 }, new int[4], new int[4], new int[4], new int[4], new int[4], new int[4], new int[4], new int[4], new int[4] { 1, 2, 0, 3 }, new int[4], new int[4] { 1, 3, 0, 2 }, new int[4], new int[4], new int[4], new int[4] { 2, 3, 0, 1 }, new int[4] { 2, 3, 1, 0 }, new int[4] { 1, 0, 2, 3 }, new int[4] { 1, 0, 3, 2 }, new int[4], new int[4], new int[4], new int[4] { 2, 0, 3, 1 }, new int[4], new int[4] { 2, 1, 3, 0 }, new int[4], new int[4], new int[4], new int[4], new int[4], new int[4], new int[4], new int[4], new int[4] { 2, 0, 1, 3 }, new int[4], new int[4], new int[4], new int[4] { 3, 0, 1, 2 }, new int[4] { 3, 0, 2, 1 }, new int[4], new int[4] { 3, 1, 2, 0 }, new int[4] { 2, 1, 0, 3 }, new int[4], new int[4], new int[4], new int[4] { 3, 1, 0, 2 }, new int[4], new int[4] { 3, 2, 0, 1 }, new int[4] { 3, 2, 1, 0 } }; for (int i = 0; i < 512; i++) { perm[i] = p[i & 0xFF]; } } private static int fastfloor(double x) { if (!(x > 0.0)) { return (int)x - 1; } return (int)x; } private static double dot(int[] g, double x, double y) { return (double)g[0] * x + (double)g[1] * y; } private static double dot(int[] g, double x, double y, double z) { return (double)g[0] * x + (double)g[1] * y + (double)g[2] * z; } private static double dot(int[] g, double x, double y, double z, double w) { return (double)g[0] * x + (double)g[1] * y + (double)g[2] * z + (double)g[3] * w; } public static double noise(double xin, double yin) { double num = 0.5 * ((double)Mathf.Sqrt(3f) - 1.0); double num2 = (xin + yin) * num; int num3 = fastfloor(xin + num2); int num4 = fastfloor(yin + num2); double num5 = (3.0 - (double)Mathf.Sqrt(3f)) / 6.0; double num6 = (double)(num3 + num4) * num5; double num7 = (double)num3 - num6; double num8 = (double)num4 - num6; double num9 = xin - num7; double num10 = yin - num8; int num11; int num12; if (num9 > num10) { num11 = 1; num12 = 0; } else { num11 = 0; num12 = 1; } double num13 = num9 - (double)num11 + num5; double num14 = num10 - (double)num12 + num5; double num15 = num9 - 1.0 + 2.0 * num5; double num16 = num10 - 1.0 + 2.0 * num5; int num17 = num3 & 0xFF; int num18 = num4 & 0xFF; int num19 = perm[num17 + perm[num18]] % 12; int num20 = perm[num17 + num11 + perm[num18 + num12]] % 12; int num21 = perm[num17 + 1 + perm[num18 + 1]] % 12; double num22 = 0.5 - num9 * num9 - num10 * num10; double num23; if (num22 < 0.0) { num23 = 0.0; } else { num22 *= num22; num23 = num22 * num22 * dot(grad3[num19], num9, num10); } double num24 = 0.5 - num13 * num13 - num14 * num14; double num25; if (num24 < 0.0) { num25 = 0.0; } else { num24 *= num24; num25 = num24 * num24 * dot(grad3[num20], num13, num14); } double num26 = 0.5 - num15 * num15 - num16 * num16; double num27; if (num26 < 0.0) { num27 = 0.0; } else { num26 *= num26; num27 = num26 * num26 * dot(grad3[num21], num15, num16); } return 70.0 * (num23 + num25 + num27); } public double noise(double xin, double yin, double zin) { double num = 1.0 / 3.0; double num2 = (xin + yin + zin) * num; int num3 = fastfloor(xin + num2); int num4 = fastfloor(yin + num2); int num5 = fastfloor(zin + num2); double num6 = 1.0 / 6.0; double num7 = (double)(num3 + num4 + num5) * num6; double num8 = (double)num3 - num7; double num9 = (double)num4 - num7; double num10 = (double)num5 - num7; double num11 = xin - num8; double num12 = yin - num9; double num13 = zin - num10; int num14; int num15; int num16; int num17; int num18; int num19; if (num11 >= num12) { if (num12 >= num13) { num14 = 1; num15 = 0; num16 = 0; num17 = 1; num18 = 1; num19 = 0; } else if (num11 >= num13) { num14 = 1; num15 = 0; num16 = 0; num17 = 1; num18 = 0; num19 = 1; } else { num14 = 0; num15 = 0; num16 = 1; num17 = 1; num18 = 0; num19 = 1; } } else if (num12 < num13) { num14 = 0; num15 = 0; num16 = 1; num17 = 0; num18 = 1; num19 = 1; } else if (num11 < num13) { num14 = 0; num15 = 1; num16 = 0; num17 = 0; num18 = 1; num19 = 1; } else { num14 = 0; num15 = 1; num16 = 0; num17 = 1; num18 = 1; num19 = 0; } double num20 = num11 - (double)num14 + num6; double num21 = num12 - (double)num15 + num6; double num22 = num13 - (double)num16 + num6; double num23 = num11 - (double)num17 + 2.0 * num6; double num24 = num12 - (double)num18 + 2.0 * num6; double num25 = num13 - (double)num19 + 2.0 * num6; double num26 = num11 - 1.0 + 3.0 * num6; double num27 = num12 - 1.0 + 3.0 * num6; double num28 = num13 - 1.0 + 3.0 * num6; int num29 = num3 & 0xFF; int num30 = num4 & 0xFF; int num31 = num5 & 0xFF; int num32 = perm[num29 + perm[num30 + perm[num31]]] % 12; int num33 = perm[num29 + num14 + perm[num30 + num15 + perm[num31 + num16]]] % 12; int num34 = perm[num29 + num17 + perm[num30 + num18 + perm[num31 + num19]]] % 12; int num35 = perm[num29 + 1 + perm[num30 + 1 + perm[num31 + 1]]] % 12; double num36 = 0.6 - num11 * num11 - num12 * num12 - num13 * num13; double num37; if (num36 < 0.0) { num37 = 0.0; } else { num36 *= num36; num37 = num36 * num36 * dot(grad3[num32], num11, num12, num13); } double num38 = 0.6 - num20 * num20 - num21 * num21 - num22 * num22; double num39; if (num38 < 0.0) { num39 = 0.0; } else { num38 *= num38; num39 = num38 * num38 * dot(grad3[num33], num20, num21, num22); } double num40 = 0.6 - num23 * num23 - num24 * num24 - num25 * num25; double num41; if (num40 < 0.0) { num41 = 0.0; } else { num40 *= num40; num41 = num40 * num40 * dot(grad3[num34], num23, num24, num25); } double num42 = 0.6 - num26 * num26 - num27 * num27 - num28 * num28; double num43; if (num42 < 0.0) { num43 = 0.0; } else { num42 *= num42; num43 = num42 * num42 * dot(grad3[num35], num26, num27, num28); } return 32.0 * (num37 + num39 + num41 + num43); } public double noise(double x, double y, double z, double w) { double num = ((double)Mathf.Sqrt(5f) - 1.0) / 4.0; double num2 = (5.0 - (double)Mathf.Sqrt(5f)) / 20.0; double num3 = (x + y + z + w) * num; int num4 = fastfloor(x + num3); int num5 = fastfloor(y + num3); int num6 = fastfloor(z + num3); int num7 = fastfloor(w + num3); double num8 = (double)(num4 + num5 + num6 + num7) * num2; double num9 = (double)num4 - num8; double num10 = (double)num5 - num8; double num11 = (double)num6 - num8; double num12 = (double)num7 - num8; double num13 = x - num9; double num14 = y - num10; double num15 = z - num11; double num16 = w - num12; int num17 = ((num13 > num14) ? 32 : 0); int num18 = ((num13 > num15) ? 16 : 0); int num19 = ((num14 > num15) ? 8 : 0); int num20 = ((num13 > num16) ? 4 : 0); int num21 = ((num14 > num16) ? 2 : 0); int num22 = ((num15 > num16) ? 1 : 0); int num23 = num17 + num18 + num19 + num20 + num21 + num22; int num24 = ((simplex[num23][0] >= 3) ? 1 : 0); int num25 = ((simplex[num23][1] >= 3) ? 1 : 0); int num26 = ((simplex[num23][2] >= 3) ? 1 : 0); int num27 = ((simplex[num23][3] >= 3) ? 1 : 0); int num28 = ((simplex[num23][0] >= 2) ? 1 : 0); int num29 = ((simplex[num23][1] >= 2) ? 1 : 0); int num30 = ((simplex[num23][2] >= 2) ? 1 : 0); int num31 = ((simplex[num23][3] >= 2) ? 1 : 0); int num32 = ((simplex[num23][0] >= 1) ? 1 : 0); int num33 = ((simplex[num23][1] >= 1) ? 1 : 0); int num34 = ((simplex[num23][2] >= 1) ? 1 : 0); int num35 = ((simplex[num23][3] >= 1) ? 1 : 0); double num36 = num13 - (double)num24 + num2; double num37 = num14 - (double)num25 + num2; double num38 = num15 - (double)num26 + num2; double num39 = num16 - (double)num27 + num2; double num40 = num13 - (double)num28 + 2.0 * num2; double num41 = num14 - (double)num29 + 2.0 * num2; double num42 = num15 - (double)num30 + 2.0 * num2; double num43 = num16 - (double)num31 + 2.0 * num2; double num44 = num13 - (double)num32 + 3.0 * num2; double num45 = num14 - (double)num33 + 3.0 * num2; double num46 = num15 - (double)num34 + 3.0 * num2; double num47 = num16 - (double)num35 + 3.0 * num2; double num48 = num13 - 1.0 + 4.0 * num2; double num49 = num14 - 1.0 + 4.0 * num2; double num50 = num15 - 1.0 + 4.0 * num2; double num51 = num16 - 1.0 + 4.0 * num2; int num52 = num4 & 0xFF; int num53 = num5 & 0xFF; int num54 = num6 & 0xFF; int num55 = num7 & 0xFF; int num56 = perm[num52 + perm[num53 + perm[num54 + perm[num55]]]] % 32; int num57 = perm[num52 + num24 + perm[num53 + num25 + perm[num54 + num26 + perm[num55 + num27]]]] % 32; int num58 = perm[num52 + num28 + perm[num53 + num29 + perm[num54 + num30 + perm[num55 + num31]]]] % 32; int num59 = perm[num52 + num32 + perm[num53 + num33 + perm[num54 + num34 + perm[num55 + num35]]]] % 32; int num60 = perm[num52 + 1 + perm[num53 + 1 + perm[num54 + 1 + perm[num55 + 1]]]] % 32; double num61 = 0.6 - num13 * num13 - num14 * num14 - num15 * num15 - num16 * num16; double num62; if (num61 < 0.0) { num62 = 0.0; } else { num61 *= num61; num62 = num61 * num61 * dot(grad4[num56], num13, num14, num15, num16); } double num63 = 0.6 - num36 * num36 - num37 * num37 - num38 * num38 - num39 * num39; double num64; if (num63 < 0.0) { num64 = 0.0; } else { num63 *= num63; num64 = num63 * num63 * dot(grad4[num57], num36, num37, num38, num39); } double num65 = 0.6 - num40 * num40 - num41 * num41 - num42 * num42 - num43 * num43; double num66; if (num65 < 0.0) { num66 = 0.0; } else { num65 *= num65; num66 = num65 * num65 * dot(grad4[num58], num40, num41, num42, num43); } double num67 = 0.6 - num44 * num44 - num45 * num45 - num46 * num46 - num47 * num47; double num68; if (num67 < 0.0) { num68 = 0.0; } else { num67 *= num67; num68 = num67 * num67 * dot(grad4[num59], num44, num45, num46, num47); } double num69 = 0.6 - num48 * num48 - num49 * num49 - num50 * num50 - num51 * num51; double num70; if (num69 < 0.0) { num70 = 0.0; } else { num69 *= num69; num70 = num69 * num69 * dot(grad4[num60], num48, num49, num50, num51); } return 27.0 * (num62 + num64 + num66 + num68 + num70); } } }