Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ DrawWaves()

void Terraria.GameContent.Shaders.WaterShaderData.DrawWaves ( )
inlineprivate

Definition at line 177 of file WaterShaderData.cs.

178 {
179 Vector2 screenPosition = Main.screenPosition;
180 Vector2 vector = (Main.drawToScreen ? Vector2.Zero : new Vector2(Main.offScreenRange, Main.offScreenRange));
181 Vector2 vector2 = -_lastDistortionDrawOffset / 0.25f + vector;
182 TileBatch tileBatch = Main.tileBatch;
183 _ = Main.instance.GraphicsDevice;
184 Vector2 dimensions = new Vector2(Main.screenWidth, Main.screenHeight);
185 Vector2 vector3 = new Vector2(16f, 16f);
186 tileBatch.Begin();
187 GameShaders.Misc["WaterDistortionObject"].Apply();
188 if (_useNPCWaves)
189 {
190 for (int i = 0; i < 200; i++)
191 {
192 if (Main.npc[i] == null || !Main.npc[i].active || (!Main.npc[i].wet && Main.npc[i].wetCount == 0) || !Collision.CheckAABBvAABBCollision(screenPosition, dimensions, Main.npc[i].position - vector3, Main.npc[i].Size + vector3))
193 {
194 continue;
195 }
196 NPC nPC = Main.npc[i];
197 Vector2 vector4 = nPC.Center - vector2;
198 Vector2 vector5 = nPC.velocity.RotatedBy(0f - nPC.rotation) / new Vector2(nPC.height, nPC.width);
199 float num = vector5.LengthSquared();
200 num = num * 0.3f + 0.7f * num * (1024f / (float)(nPC.height * nPC.width));
201 num = Math.Min(num, 0.08f);
202 num += (nPC.velocity - nPC.oldVelocity).Length() * 0.5f;
203 vector5.Normalize();
204 Vector2 velocity = nPC.velocity;
205 velocity.Normalize();
206 vector4 -= velocity * 10f;
207 if (!_useViscosityFilter && (nPC.honeyWet || nPC.lavaWet))
208 {
209 num *= 0.3f;
210 }
211 if (nPC.wet)
212 {
213 tileBatch.Draw(TextureAssets.MagicPixel.Value, new Vector4(vector4.X, vector4.Y, (float)nPC.width * 2f, (float)nPC.height * 2f) * 0.25f, null, new VertexColors(new Color(vector5.X * 0.5f + 0.5f, vector5.Y * 0.5f + 0.5f, 0.5f * num)), new Vector2((float)TextureAssets.MagicPixel.Width() / 2f, (float)TextureAssets.MagicPixel.Height() / 2f), SpriteEffects.None, nPC.rotation);
214 }
215 if (nPC.wetCount != 0)
216 {
217 num = nPC.velocity.Length();
218 num = 0.195f * (float)Math.Sqrt(num);
219 float num2 = 5f;
220 if (!nPC.wet)
221 {
222 num2 = -20f;
223 }
224 QueueRipple(nPC.Center + velocity * num2, new Color(0.5f, (nPC.wet ? num : (0f - num)) * 0.5f + 0.5f, 0f, 1f) * 0.5f, new Vector2(nPC.width, (float)nPC.height * ((float)(int)nPC.wetCount / 9f)) * MathHelper.Clamp(num * 10f, 0f, 1f), RippleShape.Circle);
225 }
226 }
227 }
228 if (_usePlayerWaves)
229 {
230 for (int j = 0; j < 255; j++)
231 {
232 if (Main.player[j] == null || !Main.player[j].active || (!Main.player[j].wet && Main.player[j].wetCount == 0) || !Collision.CheckAABBvAABBCollision(screenPosition, dimensions, Main.player[j].position - vector3, Main.player[j].Size + vector3))
233 {
234 continue;
235 }
236 Player player = Main.player[j];
237 Vector2 vector6 = player.Center - vector2;
238 float num3 = player.velocity.Length();
239 num3 = 0.05f * (float)Math.Sqrt(num3);
240 Vector2 velocity2 = player.velocity;
241 velocity2.Normalize();
242 vector6 -= velocity2 * 10f;
243 if (!_useViscosityFilter && (player.honeyWet || player.lavaWet))
244 {
245 num3 *= 0.3f;
246 }
247 if (player.wet)
248 {
249 tileBatch.Draw(TextureAssets.MagicPixel.Value, new Vector4(vector6.X - (float)player.width * 2f * 0.5f, vector6.Y - (float)player.height * 2f * 0.5f, (float)player.width * 2f, (float)player.height * 2f) * 0.25f, new VertexColors(new Color(velocity2.X * 0.5f + 0.5f, velocity2.Y * 0.5f + 0.5f, 0.5f * num3)));
250 }
251 if (player.wetCount != 0)
252 {
253 float num4 = 5f;
254 if (!player.wet)
255 {
256 num4 = -20f;
257 }
258 num3 *= 3f;
259 QueueRipple(player.Center + velocity2 * num4, player.wet ? num3 : (0f - num3), new Vector2(player.width, (float)player.height * ((float)(int)player.wetCount / 9f)) * MathHelper.Clamp(num3 * 10f, 0f, 1f), RippleShape.Circle);
260 }
261 }
262 }
264 {
265 for (int k = 0; k < 1000; k++)
266 {
267 Projectile projectile = Main.projectile[k];
268 if (projectile.wet && !projectile.lavaWet)
269 {
270 _ = !projectile.honeyWet;
271 }
272 else
273 _ = 0;
274 bool flag = projectile.lavaWet;
275 bool flag2 = projectile.honeyWet;
276 bool flag3 = projectile.wet;
277 if (projectile.ignoreWater)
278 {
279 flag3 = true;
280 }
281 if (!(projectile != null && projectile.active && ProjectileID.Sets.CanDistortWater[projectile.type] && flag3) || ProjectileID.Sets.NoLiquidDistortion[projectile.type] || !Collision.CheckAABBvAABBCollision(screenPosition, dimensions, projectile.position - vector3, projectile.Size + vector3))
282 {
283 continue;
284 }
285 if (projectile.ignoreWater)
286 {
287 bool num5 = Collision.LavaCollision(projectile.position, projectile.width, projectile.height);
288 flag = Collision.WetCollision(projectile.position, projectile.width, projectile.height);
289 flag2 = Collision.honey;
290 if (!(num5 || flag || flag2))
291 {
292 continue;
293 }
294 }
295 Vector2 vector7 = projectile.Center - vector2;
296 float num6 = projectile.velocity.Length();
297 num6 = 2f * (float)Math.Sqrt(0.05f * num6);
298 Vector2 velocity3 = projectile.velocity;
299 velocity3.Normalize();
300 if (!_useViscosityFilter && (flag2 || flag))
301 {
302 num6 *= 0.3f;
303 }
304 float num7 = Math.Max(12f, (float)projectile.width * 0.75f);
305 float num8 = Math.Max(12f, (float)projectile.height * 0.75f);
306 tileBatch.Draw(TextureAssets.MagicPixel.Value, new Vector4(vector7.X - num7 * 0.5f, vector7.Y - num8 * 0.5f, num7, num8) * 0.25f, new VertexColors(new Color(velocity3.X * 0.5f + 0.5f, velocity3.Y * 0.5f + 0.5f, num6 * 0.5f)));
307 }
308 }
309 tileBatch.End();
310 if (_useRippleWaves)
311 {
312 tileBatch.Begin();
313 for (int l = 0; l < _rippleQueueCount; l++)
314 {
315 Vector2 vector8 = _rippleQueue[l].Position - vector2;
317 Rectangle sourceRectangle = _rippleQueue[l].SourceRectangle;
319 tileBatch.Draw(value, new Vector4(vector8.X, vector8.Y, size.X, size.Y) * 0.25f, sourceRectangle, new VertexColors(_rippleQueue[l].WaveData), new Vector2(sourceRectangle.Width / 2, sourceRectangle.Height / 2), SpriteEffects.None, _rippleQueue[l].Rotation);
320 }
321 tileBatch.End();
322 }
324 if (_useCustomWaves && this.OnWaveDraw != null)
325 {
326 tileBatch.Begin();
327 this.OnWaveDraw(tileBatch);
328 tileBatch.End();
329 }
330 }
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Sqrt(double d)
static byte Max(byte val1, byte val2)
Definition Math.cs:738
void QueueRipple(Vector2 position, float strength=1f, RippleShape shape=RippleShape.Square, float rotation=0f)
static Dictionary< string, MiscShaderData > Misc
void Draw(Texture2D texture, Vector2 position, VertexColors colors)
Definition TileBatch.cs:127
void Begin(RasterizerState rasterizer, Matrix transformation)
Definition TileBatch.cs:115

References Terraria.GameContent.Shaders.WaterShaderData._lastDistortionDrawOffset, Terraria.GameContent.Shaders.WaterShaderData._rippleQueue, Terraria.GameContent.Shaders.WaterShaderData._rippleQueueCount, Terraria.GameContent.Shaders.WaterShaderData._rippleShapeTexture, Terraria.GameContent.Shaders.WaterShaderData._useCustomWaves, Terraria.GameContent.Shaders.WaterShaderData._useNPCWaves, Terraria.GameContent.Shaders.WaterShaderData._usePlayerWaves, Terraria.GameContent.Shaders.WaterShaderData._useProjectileWaves, Terraria.GameContent.Shaders.WaterShaderData._useRippleWaves, Terraria.GameContent.Shaders.WaterShaderData._useViscosityFilter, Terraria.Entity.active, Terraria.Graphics.TileBatch.Begin(), Terraria.ID.ProjectileID.Sets.CanDistortWater, Terraria.Entity.Center, Terraria.Collision.CheckAABBvAABBCollision(), Microsoft.Xna.Framework.MathHelper.Clamp(), Microsoft.Xna.Framework.Graphics.Color, Terraria.Graphics.TileBatch.Draw(), Terraria.Graphics.TileBatch.End(), Microsoft.Xna.Framework.Rectangle.Height, Terraria.Entity.height, Terraria.Collision.honey, Terraria.Entity.honeyWet, Terraria.Projectile.ignoreWater, Terraria.Main.instance, Terraria.Collision.LavaCollision(), Terraria.Entity.lavaWet, Microsoft.Xna.Framework.Vector2.Length(), Microsoft.Xna.Framework.Vector2.LengthSquared(), Terraria.GameContent.TextureAssets.MagicPixel, System.Math.Max(), System.Math.Min(), Terraria.Graphics.Shaders.GameShaders.Misc, Terraria.ID.ProjectileID.Sets.NoLiquidDistortion, Microsoft.Xna.Framework.Vector2.Normalize(), Terraria.Main.npc, Terraria.Main.offScreenRange, Terraria.Entity.oldVelocity, Terraria.GameContent.Shaders.WaterShaderData.OnWaveDraw, Terraria.Main.player, Terraria.GameContent.Shaders.WaterShaderData.Ripple.Position, Terraria.Entity.position, Terraria.Main.projectile, Terraria.GameContent.Shaders.WaterShaderData.QueueRipple(), Terraria.GameContent.Shaders.WaterShaderData.Ripple.Rotation, Terraria.NPC.rotation, Terraria.Main.screenHeight, Terraria.Main.screenPosition, Terraria.Main.screenWidth, Terraria.GameContent.Shaders.WaterShaderData.Ripple.Size, Terraria.Entity.Size, Terraria.GameContent.Shaders.WaterShaderData.Ripple.SourceRectangle, System.Math.Sqrt(), Terraria.Main.tileBatch, Terraria.Projectile.type, ReLogic.Content.Asset< T >.Value, System.value, Microsoft.Xna.Framework.Graphics.Vector2, Microsoft.Xna.Framework.Graphics.Vector4, Terraria.Entity.velocity, Terraria.Entity.wet, Terraria.Collision.WetCollision(), Terraria.Entity.wetCount, Microsoft.Xna.Framework.Rectangle.Width, Terraria.Entity.width, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.GameContent.Shaders.WaterShaderData.StepLiquids().