using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace Snowflakes
{
public partial class Page : UserControl
{
List<SnowFlake> _snowFlakes = new List<SnowFlake>();
Storyboard _snowflakeTimer = new Storyboard();
Random _rand = new Random(DateTime.Now.Millisecond);
int _newFlakeCount = 2;
int _wind = 0;
public Page()
{
InitializeComponent();
_snowflakeTimer.Duration = TimeSpan.FromMilliseconds(10);
_snowflakeTimer.Completed += new EventHandler(SnowFlakeTimer);
_snowflakeTimer.Begin();
}
private void SnowFlakeTimer(object sender, EventArgs e)
{
MoveSnowFlakes();
CreateSnowFlakes();
}
private void MoveSnowFlakes()
{
List<SnowFlake> _flakesToRemove = new List<SnowFlake>();
foreach (SnowFlake flake in _snowFlakes)
{
flake.Fall(_wind);
if (true == flake.Completed)
_flakesToRemove.Add(flake);
}
foreach (SnowFlake flake in _flakesToRemove)
{
_snowFlakes.Remove(flake);
SnowCanvas.Children.Remove(flake);
}
_snowflakeTimer.Begin();
}
private void CreateSnowFlakes()
{
TotalCount.Text = "Total Snowflakes = " + _snowFlakes.Count;
int count = _rand.Next(0, _newFlakeCount);
for (int i = 0; i < count; i++)
{
SnowFlake flake = new SnowFlake(_rand.Next(0, 1020), 0.0);
_snowFlakes.Add(flake);
SnowCanvas.Children.Add(flake);
}
if (_wind < 0)
{
for (int i = 0; i < count; i++)
{
SnowFlake flake = new SnowFlake(1010, _rand.Next(0, 700));
_snowFlakes.Add(flake);
SnowCanvas.Children.Add(flake);
}
}
else if (_wind > 0)
{
for (int i = 0; i < count; i++)
{
SnowFlake flake = new SnowFlake(0, _rand.Next(0, 700));
_snowFlakes.Add(flake);
SnowCanvas.Children.Add(flake);
}
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Application.Current.Host.Content.IsFullScreen = true;
}
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (null != Volume)
{
_newFlakeCount = (int)Volume.Value;
VolumeValue.Text = _newFlakeCount.ToString();
}
}
private void Wind_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (null != Wind)
{
_wind = (int)Wind.Value;
WindValue.Text = _wind.ToString();
}
}
}
}