Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MoonShader.cs
Go to the documentation of this file.
1using System;
4
6
7public class MoonShader : ChromaShader
8{
9 private readonly Vector4 _moonCoreColor;
10
11 private readonly Vector4 _moonRingColor;
12
13 private readonly Vector4 _skyColor;
14
15 private readonly Vector4 _cloudColor;
16
17 private float _progress;
18
19 public MoonShader(Color skyColor, Color moonRingColor, Color moonCoreColor)
20 : this(skyColor, moonRingColor, moonCoreColor, Color.White)
21 {
22 }
23
24 public MoonShader(Color skyColor, Color moonColor)
25 : this(skyColor, moonColor, moonColor)
26 {
27 }
28
29 public MoonShader(Color skyColor, Color moonRingColor, Color moonCoreColor, Color cloudColor)
30 {
31 _skyColor = skyColor.ToVector4();
32 _moonRingColor = moonRingColor.ToVector4();
33 _moonCoreColor = moonCoreColor.ToVector4();
34 _cloudColor = cloudColor.ToVector4();
35 }
36
37 public override void Update(float elapsedTime)
38 {
39 if (Main.dayTime)
40 {
41 _progress = (float)(Main.time / 54000.0);
42 }
43 else
44 {
45 _progress = (float)(Main.time / 32400.0);
46 }
47 }
48
49 [RgbProcessor(/*Could not decode attribute arguments.*/)]
50 private void ProcessLowDetail(RgbDevice device, Fragment fragment, EffectDetailLevel quality, float time)
51 {
52 for (int i = 0; i < fragment.Count; i++)
53 {
54 float dynamicNoise = NoiseHelper.GetDynamicNoise(fragment.GetCanvasPositionOfIndex(i) * new Vector2(0.1f, 0.5f) + new Vector2(time * 0.02f, 0f), time / 40f);
55 dynamicNoise = (float)Math.Sqrt(Math.Max(0f, 1f - 2f * dynamicNoise));
56 Vector4 vector = Vector4.Lerp(_skyColor, _cloudColor, dynamicNoise * 0.1f);
57 fragment.SetColor(i, vector);
58 }
59 }
60
61 [RgbProcessor(/*Could not decode attribute arguments.*/)]
62 private void ProcessHighDetail(RgbDevice device, Fragment fragment, EffectDetailLevel quality, float time)
63 {
64 //IL_0001: Unknown result type (might be due to invalid IL or missing references)
65 //IL_0009: Unknown result type (might be due to invalid IL or missing references)
66 //IL_000f: Invalid comparison between Unknown and I4
67 //IL_0014: Unknown result type (might be due to invalid IL or missing references)
68 if ((int)device.Type != 0 && (int)device.Type != 6)
69 {
70 ProcessLowDetail(device, fragment, quality, time);
71 return;
72 }
73 Vector2 vector = new Vector2(2f, 0.5f);
74 Vector2 vector2 = new Vector2(2.5f, 1f);
75 float num = _progress * (float)Math.PI + (float)Math.PI;
76 Vector2 vector3 = new Vector2((float)Math.Cos(num), (float)Math.Sin(num)) * vector2 + vector;
77 for (int i = 0; i < fragment.Count; i++)
78 {
79 Vector2 canvasPositionOfIndex = fragment.GetCanvasPositionOfIndex(i);
80 float dynamicNoise = NoiseHelper.GetDynamicNoise(canvasPositionOfIndex * new Vector2(0.1f, 0.5f) + new Vector2(time * 0.02f, 0f), time / 40f);
81 dynamicNoise = (float)Math.Sqrt(Math.Max(0f, 1f - 2f * dynamicNoise));
82 float num2 = (canvasPositionOfIndex - vector3).Length();
83 Vector4 vector4 = Vector4.Lerp(_skyColor, _cloudColor, dynamicNoise * 0.15f);
84 if (num2 < 0.8f)
85 {
86 vector4 = Vector4.Lerp(_moonRingColor, _moonCoreColor, Math.Min(0.1f, 0.8f - num2) / 0.1f);
87 }
88 else if (num2 < 1f)
89 {
90 vector4 = Vector4.Lerp(vector4, _moonRingColor, Math.Min(0.2f, 1f - num2) / 0.2f);
91 }
92 fragment.SetColor(i, vector4);
93 }
94 }
95}
void SetColor(int index, Vector4 color)
Definition Fragment.cs:97
Vector2 GetCanvasPositionOfIndex(int index)
Definition Fragment.cs:75
readonly RgbDeviceType Type
Definition RgbDevice.cs:8
static double Cos(double d)
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Sqrt(double d)
static double Sin(double a)
const double PI
Definition Math.cs:16
static byte Max(byte val1, byte val2)
Definition Math.cs:738
MoonShader(Color skyColor, Color moonRingColor, Color moonCoreColor, Color cloudColor)
Definition MoonShader.cs:29
void ProcessHighDetail(RgbDevice device, Fragment fragment, EffectDetailLevel quality, float time)
Definition MoonShader.cs:62
MoonShader(Color skyColor, Color moonColor)
Definition MoonShader.cs:24
void ProcessLowDetail(RgbDevice device, Fragment fragment, EffectDetailLevel quality, float time)
Definition MoonShader.cs:50
override void Update(float elapsedTime)
Definition MoonShader.cs:37
MoonShader(Color skyColor, Color moonRingColor, Color moonCoreColor)
Definition MoonShader.cs:19
static float GetDynamicNoise(int index, float currentTime)
static double time
Definition Main.cs:1284
static bool dayTime
Definition Main.cs:1282
static Vector4 Lerp(Vector4 value1, Vector4 value2, float amount)
Definition Vector4.cs:277