Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
WormShader.cs
Go to the documentation of this file.
1using System;
4
6
7public class WormShader : ChromaShader
8{
9 private readonly Vector4 _skinColor;
10
11 private readonly Vector4 _eyeColor;
12
13 private readonly Vector4 _innerEyeColor;
14
15 public WormShader()
16 {
17 }
18
19 public WormShader(Color skinColor, Color eyeColor, Color innerEyeColor)
20 {
21 _skinColor = skinColor.ToVector4();
22 _eyeColor = eyeColor.ToVector4();
23 _innerEyeColor = innerEyeColor.ToVector4();
24 }
25
26 [RgbProcessor(/*Could not decode attribute arguments.*/)]
27 private void ProcessLowDetail(RgbDevice device, Fragment fragment, EffectDetailLevel quality, float time)
28 {
29 for (int i = 0; i < fragment.Count; i++)
30 {
31 float amount = Math.Max(0f, (float)Math.Sin(time * -3f + fragment.GetCanvasPositionOfIndex(i).X));
32 Vector4 vector = Vector4.Lerp(_skinColor, _eyeColor, amount);
33 fragment.SetColor(i, vector);
34 }
35 }
36
37 [RgbProcessor(/*Could not decode attribute arguments.*/)]
38 private void ProcessHighDetail(RgbDevice device, Fragment fragment, EffectDetailLevel quality, float time)
39 {
40 time *= 0.25f;
41 for (int i = 0; i < fragment.Count; i++)
42 {
43 Vector2 canvasPositionOfIndex = fragment.GetCanvasPositionOfIndex(i);
44 canvasPositionOfIndex.X -= time * 1.5f;
45 canvasPositionOfIndex.X %= 2f;
46 if (canvasPositionOfIndex.X < 0f)
47 {
48 canvasPositionOfIndex.X += 2f;
49 }
50 float num = (canvasPositionOfIndex - new Vector2(0.5f)).Length();
51 Vector4 vector = _skinColor;
52 if (num < 0.5f)
53 {
54 float num2 = MathHelper.Clamp((num - 0.5f + 0.2f) / 0.2f, 0f, 1f);
55 vector = Vector4.Lerp(vector, _eyeColor, 1f - num2);
56 if (num < 0.4f)
57 {
58 num2 = MathHelper.Clamp((num - 0.4f + 0.2f) / 0.2f, 0f, 1f);
59 vector = Vector4.Lerp(vector, _innerEyeColor, 1f - num2);
60 }
61 }
62 fragment.SetColor(i, vector);
63 }
64 }
65}
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
void SetColor(int index, Vector4 color)
Definition Fragment.cs:97
Vector2 GetCanvasPositionOfIndex(int index)
Definition Fragment.cs:75
static double Sin(double a)
static byte Max(byte val1, byte val2)
Definition Math.cs:738
void ProcessHighDetail(RgbDevice device, Fragment fragment, EffectDetailLevel quality, float time)
Definition WormShader.cs:38
void ProcessLowDetail(RgbDevice device, Fragment fragment, EffectDetailLevel quality, float time)
Definition WormShader.cs:27
WormShader(Color skinColor, Color eyeColor, Color innerEyeColor)
Definition WormShader.cs:19
static Vector4 Lerp(Vector4 value1, Vector4 value2, float amount)
Definition Vector4.cs:277