Example #1
0
        void UpdatePlayerPositions(WorldState ws)
        {
            foreach (Player p in ws.Players)
            {
                TF2Net.Data.Vector worldPos = p.Position.Value;
                Team? t      = p.Team.Value;
                Class?c      = p.Class.Value;
                bool? isDead = p.IsDead.Value;

                if (worldPos == null ||
                    (t != Team.Red && t != Team.Blue) ||
                    (!c.HasValue || c.Value == Class.Undefined || c.Value == Class.Civilian) ||
                    (!isDead.HasValue || isDead == true) ||
                    !p.InPVS)
                {
                    IconsGrid.Dispatcher.InvokeAsync(() =>
                    {
                        var i        = GetPlayerImage(p);
                        i.Visibility = Visibility.Hidden;
                    });

                    continue;
                }

                IconsGrid.Dispatcher.InvokeAsync(() =>
                {
                    var i            = GetPlayerImage(p);
                    Point displayPos = TranslateCoordinate(new Point(worldPos.X, worldPos.Y));

                    Thickness newMargin = i.Margin;
                    newMargin.Top       = displayPos.Y - 25;
                    newMargin.Left      = displayPos.X - 25;
                    i.Margin            = newMargin;

                    {
                        string existingSource = null;
                        BitmapImage src       = i.Source as BitmapImage;
                        if (src != null)
                        {
                            existingSource = src.UriSource.AbsoluteUri;
                        }

                        string newSource = ClassIcons[t.Value][c.Value];
                        if (existingSource != newSource)
                        {
                            i.Source = new BitmapImage(new Uri(newSource));
                        }
                    }

                    i.Visibility = Visibility.Visible;
                });
            }
        }
Example #2
0
        void Explosion(TFExplosion exp)
        {
            TF2Net.Data.Vector origin = new TF2Net.Data.Vector(exp.Origin);
            exp = null;

            IconsGrid.Dispatcher.InvokeAsync(() =>
            {
                Viewbox vb = new Viewbox();

                DoubleAnimation a;
                {
                    System.Windows.Shapes.Path explosion = new System.Windows.Shapes.Path();
                    explosion.Data = (Geometry)FindResource("ExplosionPath");
                    explosion.Fill = Brushes.Orange;
                    vb.Child       = explosion;

                    a = new DoubleAnimation(0, new Duration(TimeSpan.FromSeconds(0.75)));
                    explosion.BeginAnimation(OpacityProperty, a);
                }

                vb.Width  = 35;
                vb.Height = 35;

                Random r           = new Random();
                vb.RenderTransform = new RotateTransform(r.NextDouble() * 360, vb.Width / 2, vb.Height / 2);

                SetPosition(new Point(origin.X, origin.Y), vb);

                IconsGrid.Children.Add(vb);

                // Automatically remove the control
                new DispatcherTimer(a.Duration.TimeSpan + TimeSpan.FromSeconds(1), DispatcherPriority.Normal,
                                    (s, e) => IconsGrid.Children.Remove(vb),
                                    IconsGrid.Dispatcher);
            });
        }
Example #3
0
        void UpdateRocketPositions(WorldState ws)
        {
            Dictionary <TFRocket, Image> newRockets = new Dictionary <TFRocket, Image>();

            foreach (Entity e in ws.EntitiesInPVS)
            {
                if (e.Class.Classname != "CTFProjectile_Rocket")
                {
                    continue;
                }

                TFRocket           rocket   = new TFRocket(e);
                TF2Net.Data.Vector position = rocket.Position.Value;
                if (position == null)
                {
                    continue;
                }

                TF2Net.Data.Vector angle = rocket.Angle.Value;
                if (angle == null)
                {
                    continue;
                }

                Team?team = rocket.Team.Value;
                if (team != Team.Red && team != Team.Blue)
                {
                    continue;
                }

                Image elip;
                if (!m_OldRockets.TryGetValue(rocket, out elip))
                {
                    IconsGrid.Dispatcher.Invoke(() =>
                    {
                        elip = new Image();

                        if (team.Value == Team.Red)
                        {
                            elip.Source = new BitmapImage(new Uri("pack://siteoforigin:,,,/images/projectiles/pill_red.png"));
                        }
                        else
                        {
                            elip.Source = new BitmapImage(new Uri("pack://siteoforigin:,,,/images/projectiles/pill_blue.png"));
                        }

                        elip.Width  = 15;
                        elip.Height = 15;
                        elip.SetValue(RenderOptions.BitmapScalingModeProperty, BitmapScalingMode.HighQuality);
                        elip.HorizontalAlignment = HorizontalAlignment.Left;
                        elip.VerticalAlignment   = VerticalAlignment.Top;

                        RotateTransform rotate = new RotateTransform(angle.X);
                        elip.RenderTransform   = rotate;

                        IconsGrid.Children.Add(elip);
                    });
                }
                else
                {
                    m_OldRockets.Remove(rocket);
                }

                elip.Dispatcher.InvokeAsync(() =>
                {
                    Point adjusted = TranslateCoordinate(new Point(position.X, position.Y));
                    Thickness m    = elip.Margin;
                    m.Left         = adjusted.X - 7.5;
                    m.Top          = adjusted.Y - 7.5;
                    elip.Margin    = m;
                });

                newRockets.Add(rocket, elip);
            }

            foreach (var kvPair in m_OldRockets)
            {
                IconsGrid.Dispatcher.InvokeAsync(() => IconsGrid.Children.Remove(kvPair.Value));
            }

            m_OldRockets = newRockets;
        }