Ejemplo n.º 1
0
        private bool Gravity_None_Linear(CanvasDrawingSession context, Drop drop)
        {
            if (ClearDrop(context, drop))
            {
                return true;
            }
            if (drop.Collided)
            {
                drop.Collided = false;
                drop.Seed = (float)Math.Floor(drop.R * ((float)random.NextDouble()) * fps);
                drop.Skipping = false;
                drop.Slowing = false;
            }
            else if (drop.Seed == 0 || drop.Seed < 0)
            {
                drop.Seed = (float)Math.Floor(drop.R * random.NextDouble() * fps);
                drop.Skipping = drop.Skipping == false ? true : false;
                drop.Slowing = true;
            }

            drop.Seed--;

            if (drop.Yspeed != 0)
            {
                if (drop.Slowing)
                {
                    drop.Yspeed /= 1.1f;
                    drop.Xspeed /= 1.1f;
                    if (drop.Yspeed < gravity_force_factor_Y)
                    {
                        drop.Slowing = false;
                    }

                }
                else if (drop.Skipping)
                {
                    drop.Yspeed = gravity_force_factor_Y;
                    drop.Xspeed = gravity_force_factor_X;
                }
                else
                {
                    drop.Yspeed += 1 * gravity_force_factor_Y * (float)Math.Floor(drop.R);
                    drop.Xspeed += 1 * gravity_force_factor_X * (float)Math.Floor(drop.R);
                }
            }
            else
            {
                drop.Yspeed = gravity_force_factor_Y;
                drop.Xspeed = gravity_force_factor_X;
            }

            if (gravityAngleVariance != 0)
            {
                drop.Xspeed += ((float)(random.NextDouble() * 2 - 1) * drop.Yspeed * gravityAngleVariance);
            }

            drop.Y += drop.Yspeed;
            drop.X += drop.Xspeed;

            drop.Draw(this, context);
            return false;
        }
Ejemplo n.º 2
0
        private bool Gravity_Linear(CanvasDrawingSession context, Drop drop)
        {
            if (ClearDrop(context, drop))
            {
                return true;
            }

            if (drop.Yspeed != 0)
            {
                drop.Yspeed += gravity_force_factor_Y * (float)Math.Floor(drop.R);
                drop.Xspeed += gravity_force_factor_X * (float)Math.Floor(drop.R);
            }
            else
            {
                drop.Yspeed = gravity_force_factor_Y;
                drop.Xspeed = gravity_force_factor_X;
            }
            drop.X += drop.Xspeed;
            drop.Y += drop.Yspeed;
            drop.Draw(this, context);
            return false;
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Adds a new raindrop to the animation.
 /// </summary>
 /// <param name="context">context</param>
 /// <param name="drop">drop object to be added to the animation</param>
 private void PutDrop(CanvasDrawingSession context, Drop drop)
 {
     drop.Draw(this, context);
     if (Gravity != null && drop.R > gravityThreshold)
     {
         if (enableCollisions)
         {
             matrix.Update(drop, false);
         }
         drops.Add(drop);
     }
 }