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 FastAnimation
{
public partial class Page : UserControl
{
private Sprite[] _sprites;
private Storyboard _gameLoop = new Storyboard();
private int _spriteCount = 0;
private int _speed = 1;
public Page()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Page_Loaded);
}
void Page_Loaded(object sender, RoutedEventArgs e)
{
SliderCount.ValueChanged +=new RoutedPropertyChangedEventHandler<double>(SliderCount_ValueChanged);
SliderSpeed.ValueChanged +=new RoutedPropertyChangedEventHandler<double>(SliderSpeed_ValueChanged);
CreateSprites(100);
_gameLoop.Duration = TimeSpan.FromMilliseconds(0);
_gameLoop.Completed += new EventHandler(MainGameLoop);
_gameLoop.Begin();
}
private void CleanUp()
{
for (int i = 0; i < _spriteCount; i++)
{
MyCanvas.Children.Remove(_sprites
);
}
}
private void CreateSprites(int spriteCount)
{
lock (this)
{
CleanUp();
_spriteCount = spriteCount;
_sprites = new Sprite[_spriteCount];
Random rand = new Random();
for (int i = 0; i < _spriteCount; i++)
{
Sprite sprite = new Sprite(64, 48);
double x = (double)rand.Next(800);
double y = (double)rand.Next(600);
sprite.SetImage("fireballlogo.png");
sprite.PosX = x;
sprite.PosY = y;
ChangeDirections(sprite);
MyCanvas.Children.Add(sprite);
_sprites
= sprite;
}
}
}
private void ChangeDirections(Sprite sprite)
{
Random rand = new Random();
double xi = rand.Next(1, 100);
double yi = rand.Next(1, 100);
xi *= 0.01;
yi *= 0.01;
int n1 = rand.Next(0, 2);
int n2 = rand.Next(0, 2);
if (n1 == 0)
xi *= -1;
if (n2 == 0)
yi *= -1;
sprite.XInc = xi;
sprite.YInc = yi;
}
private void MoveSprites()
{
for (int i = 0; i < _spriteCount; i++)
{
Sprite sprite = _sprites
;
double x = sprite.PosX;
double y = sprite.PosY;
if (false == sprite.Step(_speed))
{
ChangeDirections(sprite);
}
}
}
private void RotateSprites()
{
for (int i = 0; i < _spriteCount; i++)
_sprites
.Rotate();
}
private void MainGameLoop(object sender, EventArgs e)
{
MoveSprites();
RotateSprites();
_gameLoop.Begin();
}
private void SliderCount_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
int count = (int) SliderCount.Value;
CountValue.Text = count.ToString();
CreateSprites(count);
}
private void SliderSpeed_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
_speed = (int) SliderSpeed.Value;
SpeedValue.Text = _speed.ToString();
}
}
}