コード例 #1
0
 private void ModelShipChangedEventHandler(object sender, ShipChangedEventArgs e)
 {
     if (!e.Killed)
     {
         if (e.ShipUpdated is Invader)
         {
             Invader invader = e.ShipUpdated as Invader;
             if (!_invaders.ContainsKey(invader))
             {
                 FrameworkElement invaderControl = InvadersHelper.InvaderControlFactory(invader, Scale);
                 _invaders[invader] = invaderControl;
                 _sprites.Add(invaderControl);
             }
             else
             {
                 FrameworkElement invaderControl = _invaders[invader];
                 InvadersHelper.MoveElement(invaderControl, invader.Location.X, Scale, invader.Location.Y * Scale);
                 InvadersHelper.ResizeElement(invaderControl, invader.Size.Width * Scale, invader.Size.Height * Scale);
             }
         }
         else if (e.ShipUpdated is Player)
         {
             if (_playerFlashing)
             {
                 AnimatedImage playerImage = _playControl as AnimatedImage;
                 _playerFlashing = false;
             }
             if (_playControl == null)
             {
                 FrameworkElement playerControl = InvadersHelper.PlayerControlFactory(player, Scale);
                 _sprites.Add(playerControl);
             }
         }
     }
 }
コード例 #2
0
 private void ModelShipChangedEventHandler(object sender, ShipChangedEventArgs e)
 {
     if (!e.IsKilled)
     {
         if (e.ShipUpdated is Invader)
         {
             Invader invader = e.ShipUpdated as Invader;
             CreateOrMoveInvader(invader);
         }
         else if (e.ShipUpdated is Player)
         {
             Player player = e.ShipUpdated as Player;
             StopPlayerFromFlashing();
             CreatePlayer(player);
         }
     }
     else
     {
         if (e.ShipUpdated is Invader)
         {
             Invader invader = e.ShipUpdated as Invader;
             if (!_invaders.ContainsKey(invader))
             {
                 return;
             }
             AnimatedImage invaderControl = _invaders[invader] as AnimatedImage;
             if (invaderControl != null)
             {
                 invaderControl.InvaderShot();
                 _shotInvaders[invaderControl] = DateTime.Now;
                 _invaders.Remove(invader);
             }
         }
         else if (e.ShipUpdated is Player)
         {
             AnimatedImage control = _playerControl as AnimatedImage;
             if (control != null)
             {
                 control.StartFlashing();
             }
             _isPlayerFlashing = true;
         }
     }
 }
コード例 #3
0
        private void ModelShipChangedEventHandler(object sender, ShipChangedEventArgs e)
        {
            if (!e.Killed)
            {
                if (e.ShipUpdated is Mothership)
                {
                    Mothership mothership = e.ShipUpdated as Mothership;
                    if (_mothershipControl == null)
                    {
                        _mothershipControl = InvadersHelper.ShipControlFactory(mothership, Scale);
                        _sprites.Add(_mothershipControl);
                    }
                    else if (mothership.Escaped == true)
                    {
                        _sprites.Remove(_mothershipControl);
                        _mothershipControl = null;
                    }
                    else
                    {
                        InvadersHelper.MoveElementOnCanvas(_mothershipControl, mothership.Location.X * Scale,
                            mothership.Location.Y * Scale);
                        InvadersHelper.ResizeElement(_mothershipControl, mothership.Size.Width * Scale,
                            mothership.Size.Height * Scale);
                    }
                }
                else if (e.ShipUpdated is Invader)
                {
                    Invader invader = e.ShipUpdated as Invader;
                    if (!_invaders.ContainsKey(invader))
                    {
                        FrameworkElement invaderControl = InvadersHelper.ShipControlFactory(invader, Scale);
                        _invaders[invader] = invaderControl;
                        _sprites.Add(invaderControl);
                    }
                    else
                    {
                        FrameworkElement invaderControl = _invaders[invader];
                        InvadersHelper.MoveElementOnCanvas(invaderControl, invader.Location.X * Scale,
                            invader.Location.Y * Scale);
                        InvadersHelper.ResizeElement(invaderControl, invader.Size.Width * Scale,
                            invader.Size.Height * Scale);
                    }
                }
                else if (e.ShipUpdated is Player)
                {
                    if (_playerFlashing)
                    {
                        AnimatedImage playerImage = _playerControl as AnimatedImage;
                        playerImage.StopFlashing();
                        _playerFlashing = false;
                    }
                    if (_playerControl == null)
                    {
                        _playerControl = InvadersHelper.ShipControlFactory(e.ShipUpdated as Player, Scale);
                        _sprites.Add(_playerControl);
                    }
                    else
                    {
                        InvadersHelper.MoveElementOnCanvas(_playerControl, e.ShipUpdated.Location.X * Scale,
                            e.ShipUpdated.Location.Y * Scale);
                        InvadersHelper.ResizeElement(_playerControl, e.ShipUpdated.Size.Width * Scale,
                            e.ShipUpdated.Size.Height * Scale);
                    }
                }
            }
            else
            {
                if (e.ShipUpdated is Mothership)
                {
                    Mothership deadMothership = e.ShipUpdated as Mothership;

                    if (deadMothership == null)
                        return;

                    AnimatedImage deadMothershipControl = _mothershipControl as AnimatedImage;
                    if (deadMothershipControl != null)
                    {
                        deadMothershipControl.InvaderShot();
                        _shotInvaders[deadMothershipControl] = DateTime.Now;
                        _mothershipControl = null;
                    }
                }
                else if (e.ShipUpdated is Invader)
                {
                    Invader deadInvader = e.ShipUpdated as Invader;

                    if (!_invaders.ContainsKey(deadInvader))
                        return;

                    AnimatedImage deadInvaderControl = _invaders[deadInvader] as AnimatedImage;

                    if (deadInvaderControl != null)
                    {
                        deadInvaderControl.InvaderShot();
                        _shotInvaders[deadInvaderControl] = DateTime.Now;
                        _invaders.Remove(deadInvader);
                    }
                }
                else if (e.ShipUpdated is Player)
                {
                    AnimatedImage playerImage = _playerControl as AnimatedImage;
                    if (playerImage != null)
                        playerImage.StartFlashing();
                    _playerFlashing = true;
                }
            }
        }
コード例 #4
0
        private void ModelShipChangedEventHandler(object sender, ShipChangedEventArgs e)
        {
            if (!e.Killed) //If the ship is alive then move it to the next destination
            {
                if (e.ShipUpdated is Invader)
                {
                    var invader = (Invader)e.ShipUpdated;
                    if (!_invaders.ContainsKey(invader))
                    {
                        var invaderControl = _gameEngineHelper.InvaderControlFactory(invader, Scale);
                        _invaders.Add(invader, invaderControl);
                        Sprites.Add(invaderControl);
                    }
                    else
                    {
                        var invaderControl = _invaders[invader];
                        _gameEngineHelper.MoveElementOnCanvas(invaderControl, invader.Location.X, invader.Location.Y, Scale);
                        _gameEngineHelper.ResizeElement(invaderControl, invader.Size.Width, invader.Size.Height, Scale);
                    }
                }
                else if (e.ShipUpdated is Player)
                {
                    if (ViewModel.PlayerFlashing)
                    {
                        ViewModel.PlayerFlashing = false;
                        var control = _playerControl as AnimatedImage;
                        control?.StopFlashing();
                    }

                    var player = e.ShipUpdated as Player;
                    if (_playerControl == null)
                    {
                        _playerControl = _gameEngineHelper.PlayerControlFactory(player, Scale);
                        Sprites.Add(_playerControl);
                    }
                    else
                    {
                        _gameEngineHelper.MoveElementOnCanvas(_playerControl, player.Location.X, player.Location.Y, Scale);
                        _gameEngineHelper.ResizeElement(_playerControl, player.Size.Width, player.Size.Height, Scale);
                    }
                }
            }
            else
            {
                //If the ship died
                if (e.ShipUpdated is Invader)
                {
                    var invader = (Invader)e.ShipUpdated;
                    if (!_invaders.ContainsKey(invader))
                    {
                        return;
                    }
                    var invaderControl = _invaders[invader] as AnimatedImage;
                    if (invaderControl == null)
                    {
                        return;
                    }
                    invaderControl.InvaderShot();
                    _shotInvaders[invaderControl] = DateTime.Now;
                    _invaders.Remove(invader);
                }
                else if (e.ShipUpdated is Player)
                {
                    var control = _playerControl as AnimatedImage;
                    control?.StartFlashing();
                    ViewModel.PlayerFlashing = true;
                }
            }
        }
コード例 #5
0
        void ModelShipChangedEventHandler(object sender, ShipChangedEventArgs e)
        {
            if (!e.Killed)
            {
                if (e.ShipUpdated is Invader)
                {
                    Invader invader = e.ShipUpdated as Invader;
                    if (!_invaders.ContainsKey(invader))
                    {
                        FrameworkElement invaderControl = InvadersHelper.InvaderControlFactory(invader, Scale);
                        _invaders[invader] = invaderControl;
                        _sprites.Add(invaderControl);
                    }
                    else
                    {
                        FrameworkElement invaderControl = _invaders[invader];
                        InvadersHelper.MoveElementOnCanvas(invaderControl, invader.Location.X * Scale, invader.Location.Y * Scale);
                        InvadersHelper.ResizeElement(invaderControl, invader.Size.Width * Scale, invader.Size.Height * Scale);
                    }
                }
                else if (e.ShipUpdated is Player)
                {
                    if (_playerFlashing)
                    {
                        _playerFlashing = false;
                        AnimatedImage control = _playerControl as AnimatedImage;
                        if (control != null)
                        {
                            control.StopFlashing();
                        }
                    }

                    Player player = e.ShipUpdated as Player;
                    if (_playerControl == null)
                    {
                        _playerControl = InvadersHelper.PlayerControlFactory(player, Scale);
                        _sprites.Add(_playerControl);
                    }
                    else
                    {
                        InvadersHelper.MoveElementOnCanvas(_playerControl, player.Location.X * Scale, player.Location.Y * Scale);
                        InvadersHelper.ResizeElement(_playerControl, player.Size.Width * Scale, player.Size.Height * Scale);
                    }
                }
            }
            else
            {
                if (e.ShipUpdated is Invader)
                {
                    Invader invader = e.ShipUpdated as Invader;
                    if (!_invaders.ContainsKey(invader))
                    {
                        return;
                    }
                    AnimatedImage invaderControl = _invaders[invader] as AnimatedImage;
                    if (invaderControl != null)
                    {
                        invaderControl.InvaderShot();
                        _shotInvaders[invaderControl] = DateTime.Now;
                        _invaders.Remove(invader);
                    }
                }
                else if (e.ShipUpdated is Player)
                {
                    AnimatedImage control = _playerControl as AnimatedImage;
                    if (control != null)
                    {
                        control.StartFlashing();
                    }
                    _playerFlashing = true;
                }
            }
        }
コード例 #6
0
 private void _model_ShipChanged(object sender, ShipChangedEventArgs e)
 {
     throw new NotImplementedException();
 }
コード例 #7
0
        private void ShipChangedHandler(object sender, ShipChangedEventArgs e)
        {
            if (!e.Killed) // if ship is not killed
            {
                if (e.ShipUpdated is Invader)
                {
                    Invader       invader = e.ShipUpdated as Invader;
                    AnimatedImage invaderControl;

                    // set up preliminary data to create or alter invader sprites
                    List <string> invaderNames = new List <string>();
                    for (int i = 1; i < 5; i++)
                    {
                        string invaderName = "Assets/" + invader._invaderType.ToString() + i + ".png";
                        invaderNames.Add(invaderName);
                    }

                    if (!_invaders.ContainsKey(e.ShipUpdated as Invader))
                    {
                        invaderControl = InvadersHelper.InvaderControlFactory(invader, invaderNames, Scale) as AnimatedImage;
                        //_invaders.Add(invader, invaderControl);
                        _invaders[invader] = invaderControl;
                        _sprites.Add(invaderControl);
                    }
                    else
                    {
                        invaderControl = _invaders[e.ShipUpdated as Invader];
                        InvadersHelper.MoveElementOnCanvas(invaderControl, e.X * Scale, e.Y * Scale);
                        InvadersHelper.ResizeElement(invaderControl, invader.Size.Width * Scale, invader.Size.Height * Scale);
                    }
                }
                else // if ship is Player
                {
                    Player player = e.ShipUpdated as Player;

                    if (_playerFlashing)
                    {
                        playerControl.StopFlashing();
                        _playerFlashing = false;
                    }

                    if (playerControl == null)
                    {
                        List <string> playerImage = new List <string>();
                        playerImage.Add("Assets/player.png");
                        playerControl = InvadersHelper.PlayerControlFactory(player, playerImage, Scale) as AnimatedImage;
                        _sprites.Add(playerControl);
                    }
                    else
                    {
                        InvadersHelper.MoveElementOnCanvas(playerControl, e.X * Scale, e.Y * Scale);
                        InvadersHelper.ResizeElement(playerControl, player.Size.Width * Scale, player.Size.Height * Scale);
                    }
                }
            }
            else // if Ship is killed
            {
                if (e.ShipUpdated is Invader) // if ship is Invader
                {
                    AnimatedImage invaderControl;
                    Invader       invader = e.ShipUpdated as Invader;

                    if (_invaders.ContainsKey(invader as Invader))
                    {
                        invaderControl = _invaders[e.ShipUpdated as Invader];
                        _invaders.Remove(invader as Invader);
                        _shotInvaders.Add(invaderControl, DateTime.Now);
                        invaderControl.FadeOut();
                        //// not sure where to put this resize element method
                        //InvadersHelper.ResizeElement(invaderControl, invader.Size.Width * Scale, invader.Size.Height * Scale,
                        //    invader.Location.X * Scale, invader.Location.Y * Scale, Scale);
                    }
                }
                else // if ship is Player
                {
                    playerControl.StartFlashing();
                    _playerFlashing = true;
                    //// not sure where to put this resize element method
                    //InvadersHelper.ResizeElement(playerControl, e.ShipUpdated.Size.Width * Scale,
                    //    e.ShipUpdated.Size.Height * Scale, e.ShipUpdated.Location.X * Scale, e.ShipUpdated.Location.Y * Scale, Scale);
                }
            }
        }
コード例 #8
0
        private void ModelShipChangedEventHandler(object sender, ShipChangedEventArgs e)
        {
            if (!e.Killed)
            {
                switch (e.ShipUpdated)
                {
                case Invader _:
                    var invader = e.ShipUpdated as Invader;
                    if (!_invaders.ContainsKey(invader))
                    {
                        var fe = InvadersHelper.InvaderControlFactory(invader, Scale);
                        _invaders.Add(invader, fe);
                        _sprites.Add(fe);
                    }
                    else
                    {
                        var fe = _invaders[invader];
                        InvadersHelper.MoveElementOnCanvas(fe,
                                                           invader.Location.X * Scale,
                                                           invader.Location.Y * Scale);
                        InvadersHelper.ResizeElement(fe,
                                                     invader.Size.Width * Scale,
                                                     invader.Size.Height * Scale);
                    }

                    break;

                case Player _:
                    if (_playerFlashing)
                    {
                        var playerControl = _playerControl as AnimatedImage;
                        playerControl?.StopFlashing();
                        _playerFlashing = false;
                    }

                    var player = e.ShipUpdated as Player;
                    if (_playerControl == null)
                    {
                        _playerControl = InvadersHelper.PlayerControlFactory(player, Scale);
                        _sprites.Add(_playerControl);
                    }
                    else
                    {
                        InvadersHelper.MoveElementOnCanvas(_playerControl,
                                                           player.Location.X * Scale,
                                                           player.Location.Y * Scale);
                        InvadersHelper.ResizeElement(_playerControl,
                                                     player.Size.Width * Scale,
                                                     player.Size.Height * Scale);
                    }

                    break;
                }
            }
            else
            {
                switch (e.ShipUpdated)
                {
                case Invader _:
                    var invader = e.ShipUpdated as Invader;
                    if (!_invaders.ContainsKey(invader))
                    {
                        return;
                    }
                    if (_invaders[invader] is AnimatedImage invaderControl)
                    {
                        invaderControl.InvaderShot();
                        _shotInvaders[invaderControl] = DateTime.Now;
                        _invaders.Remove(invader);
                    }

                    break;

                case Player _:
                    var playerControl = (AnimatedImage)_playerControl;
                    playerControl.StartFlashing();
                    _playerFlashing = true;
                    OnPlayerShot();
                    break;
                }
            }
        }
コード例 #9
0
        private void ModelShipChangedEventHandler(object sender, ShipChangedEventArgs e)
        {
            if (!e.Killed)
            {
                if (e.ShipUpdated is Invader)
                {
                    Invader invader = e.ShipUpdated as Invader;

                    if (!_invaders.ContainsKey(invader))
                    {
                        FrameworkElement invaderControl = InvadersHelper.InvaderFactory((int)invader.InvaderType,
                                                                                        invader.Size.Width,
                                                                                        invader.Size.Height,
                                                                                        Scale,
                                                                                        _timer.Interval);
                        _sprites.Add(invaderControl);
                        _invaders.Add(invader, invaderControl);
                        InvadersHelper.SetCanvasLocation(invaderControl,
                                                         invader.Location.X,
                                                         invader.Location.Y,
                                                         Scale);
                    }
                    else
                    {
                        FrameworkElement invaderControl = _invaders[invader];
                        InvadersHelper.MoveElementOnCanvas(invaderControl,
                                                           invader.Location.X,
                                                           invader.Location.Y,
                                                           Scale);
                        InvadersHelper.ResizeElement((AnimatedImage)invaderControl,
                                                     invader.Size.Width,
                                                     invader.Size.Height,
                                                     Scale);
                    }
                }
                else if (e.ShipUpdated is Player)
                {
                    Player player = e.ShipUpdated as Player;

                    if (_playerFlashing && !_model.PlayerDying)
                    {
                        _playerFlashing = false;
                        AnimatedImage playerControl = (AnimatedImage)_playerControl;
                        playerControl.StopFlashing();
                    }

                    if (_playerControl == null)
                    {
                        _playerControl = InvadersHelper.PlayerFactory(player.Size.Width,
                                                                      player.Size.Height,
                                                                      Scale,
                                                                      _timer.Interval);
                        _sprites.Add(_playerControl);
                        InvadersHelper.SetCanvasLocation(_playerControl,
                                                         player.Location.X,
                                                         player.Location.Y,
                                                         Scale);
                    }
                    else
                    {
                        InvadersHelper.MoveElementOnCanvas(_playerControl,
                                                           player.Location.X,
                                                           player.Location.Y,
                                                           Scale);
                        InvadersHelper.ResizeElement((AnimatedImage)_playerControl,
                                                     player.Size.Width,
                                                     player.Size.Height,
                                                     Scale);
                    }
                }
            }
            else
            {
                // Invader killed
                if (e.ShipUpdated is Invader)
                {
                    Invader invader = e.ShipUpdated as Invader;

                    if (_invaders.ContainsKey(invader))
                    {
                        AnimatedImage invaderControl = (AnimatedImage)_invaders[invader];

                        invaderControl.InvaderShot(_timeLimitInvadersFadeoutSeconds);
                        _shotInvaders.Add(invaderControl, DateTime.Now);
                        _invaders.Remove(invader);
                    }
                }
                // Player killed
                else if (e.ShipUpdated is Player)
                {
                    Player        player        = e.ShipUpdated as Player;
                    AnimatedImage playerControl = (AnimatedImage)_playerControl;
                    playerControl.StartFlashing();
                    _playerFlashing = true;
                }
            }
        }