Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ScreenShaderData.cs
Go to the documentation of this file.
4
6
8{
10
12
13 private float _uOpacity = 1f;
14
15 private float _globalOpacity = 1f;
16
17 private float _uIntensity = 1f;
18
20
21 private Vector2 _uDirection = new Vector2(0f, 1f);
22
23 private float _uProgress;
24
26
28
30
32
33 private Vector2[] _imageScales = new Vector2[3]
34 {
37 Vector2.One
38 };
39
40 public float Intensity => _uIntensity;
41
43
44 public ScreenShaderData(string passName)
45 : base(Main.ScreenShaderRef, passName)
46 {
47 }
48
49 public ScreenShaderData(Ref<Effect> shader, string passName)
50 : base(shader, passName)
51 {
52 }
53
54 public virtual void Update(GameTime gameTime)
55 {
56 }
57
58 public override void Apply()
59 {
62 Vector2 vector2 = new Vector2(Main.screenWidth, Main.screenHeight) * 0.5f;
63 Vector2 vector3 = Main.screenPosition + vector2 * (Vector2.One - Vector2.One / Main.GameViewMatrix.Zoom);
64 base.Shader.Parameters["uColor"].SetValue(_uColor);
65 base.Shader.Parameters["uOpacity"].SetValue(CombinedOpacity);
66 base.Shader.Parameters["uSecondaryColor"].SetValue(_uSecondaryColor);
67 base.Shader.Parameters["uTime"].SetValue(Main.GlobalTimeWrappedHourly);
68 base.Shader.Parameters["uScreenResolution"].SetValue(value);
69 base.Shader.Parameters["uScreenPosition"].SetValue(vector3 - vector);
70 base.Shader.Parameters["uTargetPosition"].SetValue(_uTargetPosition - vector);
71 base.Shader.Parameters["uImageOffset"].SetValue(_uImageOffset);
72 base.Shader.Parameters["uIntensity"].SetValue(_uIntensity);
73 base.Shader.Parameters["uProgress"].SetValue(_uProgress);
74 base.Shader.Parameters["uDirection"].SetValue(_uDirection);
75 base.Shader.Parameters["uZoom"].SetValue(Main.GameViewMatrix.Zoom);
76 for (int i = 0; i < _uAssetImages.Length; i++)
77 {
78 Texture2D texture2D = _uCustomImages[i];
79 if (_uAssetImages[i] != null && _uAssetImages[i].IsLoaded)
80 {
81 texture2D = _uAssetImages[i].Value;
82 }
83 if (texture2D != null)
84 {
85 Main.graphics.GraphicsDevice.Textures[i + 1] = texture2D;
86 int width = texture2D.Width;
87 int height = texture2D.Height;
88 if (_samplerStates[i] != null)
89 {
90 Main.graphics.GraphicsDevice.SamplerStates[i + 1] = _samplerStates[i];
91 }
92 else if (Utils.IsPowerOfTwo(width) && Utils.IsPowerOfTwo(height))
93 {
94 Main.graphics.GraphicsDevice.SamplerStates[i + 1] = SamplerState.LinearWrap;
95 }
96 else
97 {
98 Main.graphics.GraphicsDevice.SamplerStates[i + 1] = SamplerState.AnisotropicClamp;
99 }
100 base.Shader.Parameters["uImageSize" + (i + 1)].SetValue(new Vector2(width, height) * _imageScales[i]);
101 }
102 }
103 base.Apply();
104 }
105
107 {
108 _uImageOffset = offset;
109 return this;
110 }
111
112 public ScreenShaderData UseIntensity(float intensity)
113 {
114 _uIntensity = intensity;
115 return this;
116 }
117
118 public ScreenShaderData UseColor(float r, float g, float b)
119 {
120 return UseColor(new Vector3(r, g, b));
121 }
122
123 public ScreenShaderData UseProgress(float progress)
124 {
125 _uProgress = progress;
126 return this;
127 }
128
129 public ScreenShaderData UseImage(Texture2D image, int index = 0, SamplerState samplerState = null)
130 {
131 _samplerStates[index] = samplerState;
132 _uAssetImages[index] = null;
133 _uCustomImages[index] = image;
134 return this;
135 }
136
137 public ScreenShaderData UseImage(string path, int index = 0, SamplerState samplerState = null)
138 {
139 _uAssetImages[index] = Main.Assets.Request<Texture2D>(path, (AssetRequestMode)1);
140 _uCustomImages[index] = null;
141 _samplerStates[index] = samplerState;
142 return this;
143 }
144
146 {
147 return UseColor(color.ToVector3());
148 }
149
151 {
152 _uColor = color;
153 return this;
154 }
155
157 {
158 _uDirection = direction;
159 return this;
160 }
161
162 public ScreenShaderData UseGlobalOpacity(float opacity)
163 {
164 _globalOpacity = opacity;
165 return this;
166 }
167
169 {
170 _uTargetPosition = position;
171 return this;
172 }
173
174 public ScreenShaderData UseSecondaryColor(float r, float g, float b)
175 {
176 return UseSecondaryColor(new Vector3(r, g, b));
177 }
178
180 {
181 return UseSecondaryColor(color.ToVector3());
182 }
183
185 {
186 _uSecondaryColor = color;
187 return this;
188 }
189
190 public ScreenShaderData UseOpacity(float opacity)
191 {
192 _uOpacity = opacity;
193 return this;
194 }
195
196 public ScreenShaderData UseImageScale(Vector2 scale, int index = 0)
197 {
198 _imageScales[index] = scale;
199 return this;
200 }
201
203 {
204 return this;
205 }
206}
static readonly SamplerState LinearWrap
static readonly SamplerState AnisotropicClamp
ScreenShaderData UseGlobalOpacity(float opacity)
ScreenShaderData UseSecondaryColor(Vector3 color)
ScreenShaderData UseProgress(float progress)
ScreenShaderData UseIntensity(float intensity)
ScreenShaderData UseSecondaryColor(float r, float g, float b)
virtual ScreenShaderData GetSecondaryShader(Player player)
ScreenShaderData UseTargetPosition(Vector2 position)
ScreenShaderData UseSecondaryColor(Color color)
ScreenShaderData UseImage(string path, int index=0, SamplerState samplerState=null)
ScreenShaderData UseImageOffset(Vector2 offset)
ScreenShaderData UseImage(Texture2D image, int index=0, SamplerState samplerState=null)
ScreenShaderData UseImageScale(Vector2 scale, int index=0)
ScreenShaderData UseColor(Vector3 color)
ScreenShaderData UseOpacity(float opacity)
ScreenShaderData UseColor(float r, float g, float b)
ScreenShaderData(Ref< Effect > shader, string passName)
virtual void Update(GameTime gameTime)
ScreenShaderData UseDirection(Vector2 direction)
static int screenHeight
Definition Main.cs:1721
static SpriteViewMatrix GameViewMatrix
Definition Main.cs:227
static int offScreenRange
Definition Main.cs:836
static int screenWidth
Definition Main.cs:1719
static IAssetRepository Assets
Definition Main.cs:209
static float GlobalTimeWrappedHourly
Definition Main.cs:405
static GraphicsDeviceManager graphics
Definition Main.cs:972
static bool IsPowerOfTwo(int x)
Definition Utils.cs:74