Click here to Skip to main content
15,896,063 members
Articles / Desktop Programming / XAML

Soccerlight World Cup 2010

Rate me:
Please Sign up or sign in to vote.
4.96/5 (78 votes)
11 Jul 2010CPOL9 min read 133.2K   2.7K   99  
A soccer game made with Silverlight and VS 2008.
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;
using Soccerlight.Core.Model;

namespace Soccerlight.Controls
{
    public class PlayerFace : Grid
    {
        public readonly DependencyProperty ImageContentProperty;
        public readonly DependencyProperty NumberProperty;
        public readonly DependencyProperty AngleProperty;

        Image localImageContent = null;
        double localAngle = 0;
        //int number;
        ContentPresenter cPresenter;
        RotateTransform rTransform;

        Ellipse e1 = new Ellipse();
        Storyboard sb = new Storyboard();
        Storyboard sbPointer = new Storyboard();
        Color centerColor;
        Color topColor;
        Color bottomColor;
        Ellipse eTop;
        Ellipse eBottom;

        public PlayerFace(Player player)
        {
            this.Height = 40;
            this.Width = 40;
            this.Player = player;

            this.MouseEnter += new MouseEventHandler(PlayerFace_MouseEnter);
            this.MouseLeave += new MouseEventHandler(PlayerFace_MouseLeave);

            //ToolTipService.SetToolTip(this, string.Format("{0} - Messi\r\n-3 goals", player.Id));

            GradientStopCollection gsCollection = new GradientStopCollection();
            gsCollection.Add(new GradientStop() { Offset = 0.0, Color = Color.FromArgb(255, 0x20, 0x20, 0x20) });
            gsCollection.Add(new GradientStop() { Offset = 0.3, Color = Color.FromArgb(255, 0x20, 0x20, 0x20) });
            gsCollection.Add(new GradientStop() { Offset = 0.4, Color = Color.FromArgb(255, 0x20, 0x20, 0x20) });
            gsCollection.Add(new GradientStop() { Offset = 0.5, Color = Color.FromArgb(255, 0x20, 0x20, 0x20) });
            gsCollection.Add(new GradientStop() { Offset = 1.0, Color = Color.FromArgb(255, 0xFF, 0xFF, 0xFF) });

            RadialGradientBrush rgb = new RadialGradientBrush(gsCollection);
            rgb.Center = new Point(0.5, 0.5); //Center="0.5, 0.5" RadiusX="0.9" RadiusY="0.9"
            rgb.RadiusX = 0.5;
            rgb.RadiusY = 0.5;
            //this.Background = rgb;

            //<Ellipse Margin="11,7,11,23">
            //<Ellipse.Fill>
            //<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
            //<GradientStop Color="#ffffffff" Offset="0.00"/>
            //<GradientStop x:Name="centralGradientStop" Color="#ff008D00" Offset="1.00"/>
            //</LinearGradientBrush>
            //</Ellipse.Fill>
            //</Ellipse>

            centerColor = Color.FromArgb(255, player.Team.R1, player.Team.G1, player.Team.B1);
            SolidColorBrush centerColorBrush = new SolidColorBrush(centerColor);
            Ellipse eCenter = new Ellipse()
            {
                Margin = new Thickness(0),
                Fill = centerColorBrush
            };

            ColorAnimation colorAnimation = new ColorAnimation()
            {
                From = Color.FromArgb(255, player.Team.R1, player.Team.G1, player.Team.B1),
                To = Color.FromArgb(255, player.Team.R3, player.Team.G3, player.Team.B3),
                Duration = new Duration(new TimeSpan(0, 0, 0, 0, 500)),
                AutoReverse = true,
                RepeatBehavior = RepeatBehavior.Forever
            };

            sb.Children.Add(colorAnimation);
            Storyboard.SetTarget(colorAnimation, centerColorBrush);
            Storyboard.SetTargetProperty(colorAnimation, new PropertyPath("Color"));
            this.Resources.Add("SelectedPlayerSB", sb);


            GradientStopCollection gsTopCollection = new GradientStopCollection();
            gsTopCollection.Add(new GradientStop() { Color = Color.FromArgb(255, 0xFF, 0xFF, 0xFF), Offset = 0.0 });
            gsTopCollection.Add(new GradientStop() { Color = Color.FromArgb(255, player.Team.R1, player.Team.G1, player.Team.B1), Offset = 1.0 });

            eTop = new Ellipse()
            {
                Margin = new Thickness(10, 2, 10, 29),
                Fill = new LinearGradientBrush()
                {
                    StartPoint = new Point(0, 0),
                    EndPoint = new Point(0, 1),
                    GradientStops = gsTopCollection
                }
            };

            GradientStopCollection gsBottomCollection = new GradientStopCollection();
            gsBottomCollection.Add(new GradientStop() { Color = Color.FromArgb(255, player.Team.R1, player.Team.G1, player.Team.B1), Offset = 0.0 });
            gsBottomCollection.Add(new GradientStop() { Color = Color.FromArgb(255, player.Team.R1, player.Team.G1, player.Team.B1), Offset = 0.5 });
            gsBottomCollection.Add(new GradientStop() { Color = Color.FromArgb(255, player.Team.R3, player.Team.G3, player.Team.B3), Offset = 1.0 });

            eBottom = new Ellipse()
            {
                Margin = new Thickness(10, 29, 10, 2),
                Fill = new LinearGradientBrush()
                {
                    StartPoint = new Point(0, 0),
                    EndPoint = new Point(0, 1),
                    GradientStops = gsBottomCollection
                }
            };

            ImageContentProperty = DependencyProperty.Register("ImageContent", typeof(object), typeof(PlayerFace), new PropertyMetadata(ImageContentPropertyChanged));
            AngleProperty = DependencyProperty.Register("Angle", typeof(double), typeof(PlayerFace), new PropertyMetadata(AnglePropertyChanged));

            Grid playerGrid = new Grid();
            //playerGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(18) });
            //playerGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(24) });
            playerGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(32) });
            playerGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(36) });
            playerGrid.Children.Add(new Image() { Margin = new Thickness(-9, 0, 0, 0), Source = new BitmapImage(new Uri(string.Format("../Images/{0}.png", player.Team.TeamID), UriKind.Relative)), Stretch = Stretch.Uniform });
            //playerGrid.Children[0].SetValue(Grid.ColumnProperty, 0);
            //playerGrid.Children[0].SetValue(Grid.RowProperty, 0); 
            playerGrid.Children.Add(new TextBlock() { Text = player.Id, Foreground = new SolidColorBrush(player.Team.NumberColor), Margin = new Thickness(24, 8, 0, 0), FontSize = 11, FontFamily = new FontFamily("Calibri") });
            //playerGrid.Children[1].SetValue(Grid.ColumnProperty, 1);

            cPresenter = new ContentPresenter()
            {
                Content = playerGrid,
                Margin = new Thickness(0, 0, 0, 0),
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
                Opacity = 1.0,
                Width = 36,
                Height = 36
            };

            //e1.Stroke = new SolidColorBrush(Colors.Red);
            //e1.StrokeThickness = 4;
            //e1.Fill = new SolidColorBrush(Colors.Yellow);

            Image imgPointer = new Image()
            {
                Source = new BitmapImage(new Uri("../Images/PlayerPointer.PNG", UriKind.Relative)),
                Opacity = 0.50

            };

            TransformGroup tgPointer = new TransformGroup();
            TranslateTransform tTransformPointer = new TranslateTransform()
            {
                X = -14,
                Y = -14
            };
            RotateTransform rTransformPointer = new RotateTransform()
            {
                Angle = 0,
                CenterX = 5.5,
                CenterY = 5.5
            };
            ScaleTransform scTransformPointer = new ScaleTransform()
            {
                ScaleX = 3.5,
                ScaleY = 3.5
            };
            tgPointer.Children.Add(tTransformPointer);
            tgPointer.Children.Add(rTransformPointer);
            tgPointer.Children.Add(scTransformPointer);
            imgPointer.RenderTransform = tgPointer;

            this.Children.Add(eCenter);
            this.Children.Add(eTop);
            this.Children.Add(eBottom);
            this.Children.Add(cPresenter);
            //this.Children.Add(imgPointer);
            this.Background = new SolidColorBrush(Color.FromArgb(0x00, 0x00, 0x00, 0x00));
            //Grid.Row="0" Margin="0,4,0,0" 
            //x:Name="contentPresenter" 
            //Content="{TemplateBinding ImageContent}"
            //HorizontalAlignment="Center" 
            //VerticalAlignment="Center" 
            //Opacity="1.00"

            TransformGroup tGroup = new TransformGroup();
            tGroup.Children = new TransformCollection();
            tGroup.Children.Add(new ScaleTransform() { ScaleX = 1.00, ScaleY = 1.00});
            RotateTransform rt = new RotateTransform() { Angle = 0 };
            tGroup.Children.Add(rt);

            this.RenderTransform = tGroup;

            TransformGroup tGroup2 = new TransformGroup();
            tGroup2.Children = new TransformCollection();
            rTransform = new RotateTransform() { Angle = 0, CenterX = 20.5, CenterY = 17 };
            tGroup2.Children.Add(rTransform);

            //<ContentPresenter Grid.Row="0" Margin="0,4,0,0" x:Name="contentPresenter" Content="{TemplateBinding ImageContent}" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="1.00"/>

            cPresenter.RenderTransform = tGroup2;

            sbPointer = new Storyboard()
            {
                Duration = new Duration(new TimeSpan(0, 0, 1)),
                RepeatBehavior = RepeatBehavior.Forever
            };
            DoubleAnimation dAnimationPointer = new DoubleAnimation()
            {
                From = 0,
                To = 360
            };
            Storyboard.SetTarget(dAnimationPointer, rTransform);
            Storyboard.SetTargetProperty(dAnimationPointer, new PropertyPath("Angle"));
            sbPointer.Children.Add(dAnimationPointer);
        }

        void PlayerFace_MouseLeave(object sender, MouseEventArgs e)
        {
            GameHelper.Instance.CurrentMousePlayer = null;
            if (GameHelper.Instance.CurrentSelectedPlayer == null)
            {
                //eTop.Visibility = Visibility.Visible;
                //eBottom.Visibility = Visibility.Visible;
                sb.Stop();
            }
            else
            {
                if (GameHelper.Instance.CurrentSelectedPlayer != this.Player)
                {
                    //eTop.Visibility = Visibility.Visible;
                    //eBottom.Visibility = Visibility.Visible;
                    sb.Stop();
                }
            }
        }

        void PlayerFace_MouseEnter(object sender, MouseEventArgs e)
        {
            GameHelper.Instance.CurrentMousePlayer = this.Player;
            //eTop.Visibility = Visibility.Collapsed;
            //eBottom.Visibility = Visibility.Collapsed;
            sb.Begin();
        }

        void ImageContentPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            localImageContent = (Image)e.NewValue;
            //cPresenter.Content = localImageContent;
        }

        void AnglePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            localAngle = (double)e.NewValue;
            rTransform.Angle = localAngle;
        }

        public object ImageContent
        {
            get
            {
                return base.GetValue(ImageContentProperty);
            }
            set
            {
                base.SetValue(ImageContentProperty, value);
            }
        }

        private Image LocalImageContent
        {
            get
            {
                return localImageContent;
            }
            set
            {
                localImageContent = value;
            }
        }

        public object Angle
        {
            get
            {
                return base.GetValue(AngleProperty);
            }
            set
            {
                base.SetValue(AngleProperty, value);
            }
        }

        private double LocalAngle
        {
            get
            {
                return localAngle;
            }
            set
            {
                localAngle = value;
                rTransform.Angle = localAngle;
            }
        }

        public Player Player { get; set; }

        public void UnSelect()
        {
            sb.Stop();
            sbPointer.Stop();
        }

        public void Select()
        {
            //eTop.Visibility = Visibility.Collapsed;
            //eBottom.Visibility = Visibility.Collapsed;
            sb.Begin();
            sbPointer.Begin();
        }
    }

    public class Teams
    {
        public static string Argentina = "Argentina";
        public static string Brazil = "Brazil";
        public static string France = "France";
        public static string Germany = "Germany";
        public static string Italy = "Italy";
        public static string Portugal = "Portugal";
        public static string Uruguay = "Uruguay";
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Instructor / Trainer Alura Cursos Online
Brazil Brazil

Comments and Discussions