forked from E-riCA0/StawdewValley
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNoiseGenerator.cs
More file actions
74 lines (63 loc) · 2.39 KB
/
Copy pathNoiseGenerator.cs
File metadata and controls
74 lines (63 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Decompiled with JetBrains decompiler
// Type: StardewValley.NoiseGenerator
// Assembly: Stardew Valley, Version=1.2.6400.27469, Culture=neutral, PublicKeyToken=null
// MVID: 77B7094A-F6F0-4ACC-91F4-E335E2733EDB
// Assembly location: D:\SteamLibrary\steamapps\common\Stardew Valley\Stardew Valley.exe
using System;
namespace StardewValley
{
internal static class NoiseGenerator
{
public static int Seed { get; set; }
public static int Octaves { get; set; }
public static double Amplitude { get; set; }
public static double Persistence { get; set; }
public static double Frequency { get; set; }
static NoiseGenerator()
{
NoiseGenerator.Seed = new Random().Next(int.MaxValue);
NoiseGenerator.Octaves = 8;
NoiseGenerator.Amplitude = 1.0;
NoiseGenerator.Frequency = 0.015;
NoiseGenerator.Persistence = 0.65;
}
public static double Noise(int x, int y)
{
double num = 0.0;
double frequency = NoiseGenerator.Frequency;
double amplitude = NoiseGenerator.Amplitude;
for (int index = 0; index < NoiseGenerator.Octaves; ++index)
{
num += NoiseGenerator.Smooth((double) x * frequency, (double) y * frequency) * amplitude;
frequency *= 2.0;
amplitude *= NoiseGenerator.Persistence;
}
if (num < -2.4)
num = -2.4;
else if (num > 2.4)
num = 2.4;
return num / 2.4;
}
public static double NoiseGeneration(int x, int y)
{
int num1 = x + y * 57;
int num2 = num1 << 13 ^ num1;
return 1.0 - (double) (num2 * (num2 * num2 * 15731 + 789221) + NoiseGenerator.Seed & int.MaxValue) / 1073741824.0;
}
private static double Interpolate(double x, double y, double a)
{
double num = (1.0 - Math.Cos(a * Math.PI)) * 0.5;
return x * (1.0 - num) + y * num;
}
private static double Smooth(double x, double y)
{
double x1 = NoiseGenerator.NoiseGeneration((int) x, (int) y);
double num = NoiseGenerator.NoiseGeneration((int) x + 1, (int) y);
double x2 = NoiseGenerator.NoiseGeneration((int) x, (int) y + 1);
double y1 = NoiseGenerator.NoiseGeneration((int) x + 1, (int) y + 1);
double y2 = num;
double a = x - (double) (int) x;
return NoiseGenerator.Interpolate(NoiseGenerator.Interpolate(x1, y2, a), NoiseGenerator.Interpolate(x2, y1, x - (double) (int) x), y - (double) (int) y);
}
}
}