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; }
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; }
/// <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); } }