Posted by rhwrthrthr on Wed 1st Jul 19:08
Modification of post by bla | view diff | download
- public override void Update(GameTime time)
- {
- if (time == null)
- particles.Clear();
- float distanceY, scale, sinOffset, angleRadians;
- int timeOffsetY, timeOffsetX, snowSpaceX, snowSpaceY,
- startX, startY, rndOffsetX, rndOffsetY, posX, posY;
- Rectangle sourceRect, view, drawRect;
- Particle particle;
- Math.Max(lights.AmbientColor.G / 255f, 0.4f),
- Math.Max(lights.AmbientColor.B / 255f, 0.4f));
- angleRadians = MathHelper.ToRadians(-windAngle);
- counter += (uint)time.ElapsedGameTime.Milliseconds;
- distanceY = (float)((counter * Math.Max(speed, minSpeed)) / 1000f);
- timeOffsetY = (int)((float)Settings.CurrentBackbufferHeight * distanceY);
- timeOffsetX = (int)(timeOffsetY * (float)Math.Tan(angleRadians));
- snowSpaceX = (Settings.CurrentBackbufferWidth / horizontalDrops) + (Settings.CurrentBackbufferWidth / 10);
- snowSpaceY = (Settings.CurrentBackbufferHeight / verticalDrops) + (Settings.CurrentBackbufferHeight / 10);
- for (int x = 0; x < horizontalDrops; x++)
- {
- for (int y = 0; y < verticalDrops; y++)
- {
- scale = (float)Math.Max(rnd.NextDouble(), minScale) * Settings.Scale;
- sinOffset = 0.3f * (float)(((float)snowSpaceX / 2f) * Math.Sin(counter / 4500f * (1f / Math.Max(speed, minSpeed)) + (x + 1f) / (y + 1f)));
- startX = snowSpaceX * x;
- startY = snowSpaceY * y;
- rndOffsetX = 2 * (rnd.Next(snowSpaceX) - snowSpaceX / 2);
- rndOffsetY = 2 * (rnd.Next(snowSpaceY) - snowSpaceY / 2);
- posX = (startX + rndOffsetX + timeOffsetX + (int)(sinOffset * (float)Math.Cos(angleRadians))) % Settings.CurrentBackbufferWidth;
- posY = startY + rndOffsetY + timeOffsetY;
- if (windAngle > -45f && windAngle <= 45f)
- {
- posY = (posY - (int)(sinOffset * (float)Math.Sin(angleRadians))) % Settings.CurrentBackbufferHeight;
- }
- else
- {
- if (windAngle > 45f)
- {
- sinOffset = -sinOffset;
- }
- posY = (posY - (int)(sinOffset * (float)Math.Cos(angleRadians))) % Settings.CurrentBackbufferHeight;
- }
- while (posX < 0)
- posX += Settings.CurrentBackbufferWidth;
- while (posY < 0)
- posY += Settings.CurrentBackbufferHeight;
- drawRect = new Rectangle(posX, posY, (int)(sourceRect.Width * Settings.Scale), (int)(sourceRect.Height * Settings.Scale));
- if (view.Contains(drawRect) || view.Intersects(drawRect))
- {
- particles.AddFirst(particle);
- }
- }
- }
- }
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.