[Frubar Paste] Hosted by SkyLime - Chat with us at XChannel IRC

Posted by rhwrthrthr on Wed 1st Jul 19:08
Modification of post by bla | view diff | download

  1. public override void Update(GameTime time)
  2.         {
  3.             if (time == null)
  4.                 throw new ArgumentNullException("Time mustn't be null");
  5.  
  6.             particles.Clear();
  7.  
  8.             float distanceY, scale, sinOffset, angleRadians;
  9.             int timeOffsetY, timeOffsetX, snowSpaceX, snowSpaceY,
  10.                 startX, startY, rndOffsetX, rndOffsetY, posX, posY;
  11.             Rectangle sourceRect, view, drawRect;
  12.             Particle particle;
  13.             Color ambientColor = new Color(10, 10, 20);
  14.             Color drawColor = new Color(Math.Max(lights.AmbientColor.R / 255f, 0.4f),
  15.                                         Math.Max(lights.AmbientColor.G / 255f, 0.4f),
  16.                                         Math.Max(lights.AmbientColor.B / 255f, 0.4f));
  17.             Random rnd = new Random(20);
  18.  
  19.             angleRadians = MathHelper.ToRadians(-windAngle);
  20.             counter += (uint)time.ElapsedGameTime.Milliseconds;
  21.             distanceY = (float)((counter * Math.Max(speed, minSpeed)) / 1000f);
  22.             sourceRect = new Rectangle(0, 0, snow_part.Width, snow_part.Height);
  23.             view = new Rectangle(0, 0, window.Width, window.Height);
  24.             timeOffsetY = (int)((float)Settings.CurrentBackbufferHeight * distanceY);
  25.             timeOffsetX = (int)(timeOffsetY * (float)Math.Tan(angleRadians));
  26.             snowSpaceX = (Settings.CurrentBackbufferWidth / horizontalDrops) + (Settings.CurrentBackbufferWidth / 10);
  27.             snowSpaceY = (Settings.CurrentBackbufferHeight / verticalDrops) + (Settings.CurrentBackbufferHeight / 10);
  28.             for (int x = 0; x < horizontalDrops; x++)
  29.             {
  30.                 for (int y = 0; y < verticalDrops; y++)
  31.                 {
  32.                     scale = (float)Math.Max(rnd.NextDouble(), minScale) * Settings.Scale;
  33.                     sinOffset = 0.3f * (float)(((float)snowSpaceX / 2f) * Math.Sin(counter / 4500f * (1f / Math.Max(speed, minSpeed)) + (x + 1f) / (y + 1f)));
  34.                     startX = snowSpaceX * x;
  35.                     startY = snowSpaceY * y;
  36.                     rndOffsetX = 2 * (rnd.Next(snowSpaceX) - snowSpaceX / 2);
  37.                     rndOffsetY = 2 * (rnd.Next(snowSpaceY) - snowSpaceY / 2);
  38.                     posX = (startX + rndOffsetX + timeOffsetX + (int)(sinOffset * (float)Math.Cos(angleRadians))) % Settings.CurrentBackbufferWidth;
  39.                     posY = startY + rndOffsetY + timeOffsetY;
  40.                     if (windAngle > -45f && windAngle <= 45f)
  41.                     {
  42.                         posY = (posY - (int)(sinOffset * (float)Math.Sin(angleRadians))) % Settings.CurrentBackbufferHeight;
  43.                     }
  44.                     else
  45.                     {
  46.                         if (windAngle > 45f)
  47.                         {
  48.                             sinOffset = -sinOffset;
  49.                         }
  50.                         posY = (posY - (int)(sinOffset * (float)Math.Cos(angleRadians))) % Settings.CurrentBackbufferHeight;
  51.                     }
  52.                     while (posX < 0)
  53.                         posX += Settings.CurrentBackbufferWidth;
  54.                     while (posY < 0)
  55.                         posY += Settings.CurrentBackbufferHeight;
  56.  
  57.                     drawRect = new Rectangle(posX, posY, (int)(sourceRect.Width * Settings.Scale), (int)(sourceRect.Height * Settings.Scale));
  58.                     if (view.Contains(drawRect) || view.Intersects(drawRect))
  59.                     {
  60.                         particle = new Particle(new Vector2(drawRect.X, drawRect.Y), snow_part, drawColor, scale);
  61.                         particles.AddFirst(particle);
  62.                     }
  63.                 }
  64.             }
  65.         }


Submit a correction or amendment below. (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.



Remember my name in a cookie


Code: To highlight particular lines, prefix each line with @@.
Include comments to indicate what you need feedback on.