void _firstTimer_Completed(object sender, object e)
        {
            _power++;
            _firstTimer.Completed -= _firstTimer_Completed;
            _firstTimer            = null;

            if (_power == 2 ||
                _power == 4 ||
                _power == 6 ||
                _power == 8)
            {
                _bullet.DemageMagic += _bullet.BonusDemage;
                _bullet.Speed       -= 0.06;
            }

            Map_Cell oldCall = _map.Calls.Single(p => p.IndexLeft == _bullet.PositionX &&
                                                 p.IndexTop == _bullet.PositionY);

            oldCall.Bullet.Remove(_bullet);
            /////Сначала проверяем старую ячейку на попадение
            //Exept();
            _bullet.PositionX = _xNew;
            _bullet.PositionY = _yNew;
            Exept();

            Map_Cell newCall = _map.Calls.FirstOrDefault(p => p.IndexLeft == _bullet.PositionX &&
                                                         p.IndexTop == _bullet.PositionY);

            if (_bullet.Exept == true)
            {
                if (newCall != null && !newCall.Block)
                {
                    UnitGenerator.AddStune(newCall, _bullet, _bullet.StunDuration);
                }

                (_bullet.GameObject.View as IGameControl).Remove(_map.MapCanvas);
                ///Было попадение, анимация исчезновения стрелы
                //_bullet.GameObject.View.Visibility = Visibility.Collapsed;
                ///Было попадение стрела исчезает
                ///Удаляем из масива всех объектов
                _map.GameObjectInCall.Remove(_bullet.GameObject);

                BoomMethod(_bullet.PositionX, _bullet.PositionY);
                //_map.MapCanvas.Children.Remove(_bullet.GameObject.View);
            }
            else
            {
                newCall.Bullet.Add(_bullet);
            }
        }
Example #2
0
        void _firstTimer_Completed(object sender, object e)
        {
            _firstTimer.Completed -= _firstTimer_Completed;
            _firstTimer            = null;

            Map_Cell oldCall = _map.Calls.Single(p => p.IndexLeft == _bullet.PositionX &&
                                                 p.IndexTop == _bullet.PositionY);

            oldCall.Bullet.Remove(_bullet);
            /////Сначала проверяем старую ячейку на попадение
            //Exept();
            _bullet.PositionX = _xNew;
            _bullet.PositionY = _yNew;
            Exept();

            Map_Cell newCall = _map.Calls.FirstOrDefault(p => p.IndexLeft == _bullet.PositionX &&
                                                         p.IndexTop == _bullet.PositionY);

            if (_bullet.Exept == true)
            {
                if (_bullet.SproutHealth > 0 &&
                    newCall != null &&
                    newCall.IUnits.Count(p => p.UnitType != EUnitType.Grass) > 0)// Значет нужно создать куст
                {
                    CreateSprout(newCall);
                }

                if (newCall != null && !newCall.Block)
                {
                    UnitGenerator.AddStune(newCall, _bullet, _bullet.StunDuration);
                }

                (_bullet.GameObject.View as IGameControl).Remove(_map.MapCanvas);
                ///Было попадение, анимация исчезновения стрелы
                //_bullet.GameObject.View.Visibility = Visibility.Collapsed;
                ///Было попадение стрела исчезает
                ///Удаляем из масива всех объектов
                _map.GameObjectInCall.Remove(_bullet.GameObject);
                //_map.MapCanvas.Children.Remove(_bullet.GameObject.View);
            }
            else
            {
                newCall.Bullet.Add(_bullet);
            }
        }
        /// <summary>
        /// Этот метод наносит урон
        /// </summary>
        private void BoomMethod(int x, int y)
        {
            _isBoom = true;
            ///Если ракета попала или должна исчезнуть
            ///Берем все ячейки вокруг колбы
            List <Point> roundPoint = UnitGenerator.BigRoundNumber(x, y);

            roundPoint.Add(new Point(x, y));
            ///Теперь рисуем взрыв
            for (int i = 0; i < roundPoint.Count; i++)
            {
                Map_Cell callBoom = _map.Calls.FirstOrDefault(p => p.IndexLeft == roundPoint[i].X && p.IndexTop == roundPoint[i].Y);
                if (callBoom != null && !callBoom.Block)
                {
                    UC_Super_Mega_Death_Rocket arrow = new UC_Super_Mega_Death_Rocket();
                    if (i == 0 || i == 1)
                    {
                        arrow.ChengAngel(EAngel.Left);
                    }
                    else if (i == 2 || i == 3)
                    {
                        arrow.ChengAngel(EAngel.Right);
                    }
                    else if (i == 4 || i == 5)
                    {
                        arrow.ChengAngel(EAngel.Top);
                    }
                    else if (i == 6 || i == 7)
                    {
                        arrow.ChengAngel(EAngel.Bottom);
                    }
                    else if (i == 8)
                    {
                        ///Центральная ячейка
                        arrow.ChengAngelCenter();
                    }

                    Bullet bullArrow = new Bullet();
                    bullArrow.GameObject = new Game_Object_In_Call()
                    {
                        EnumCallType = EnumCallType.Bullet,
                        View         = arrow
                    };
                    bullArrow.UnitUsed  = _bullet.UnitUsed;
                    bullArrow.PositionX = (int)roundPoint[i].X;
                    bullArrow.PositionY = (int)roundPoint[i].Y;
                    bullArrow.Speed     = 0;

                    if (i != 8)
                    {
                        bullArrow.DemageMagic = _bullet.DemageMagic;
                    }
                    else
                    {
                        bullArrow.DemageMagic = (int)(_bullet.DemageMagic * 0.8);
                    }

                    bullArrow.CurrentMap = _map;
                    bullArrow.Angel      = _bullet.UnitUsed.Angel;
                    bullArrow.Range      = 0;

                    ///И его же добавим в масив всех объектов
                    _map.GameObjectInCall.Add(bullArrow.GameObject);
                    Canvas.SetLeft(bullArrow.GameObject.View, bullArrow.PositionX * 50);
                    Canvas.SetTop(bullArrow.GameObject.View, bullArrow.PositionY * 50);
                    ///Отображение
                    _map.MapCanvas.Children.Add(bullArrow.GameObject.View);

                    UnitGenerator.AddDamage(callBoom, bullArrow);
                    UnitGenerator.AddStune(callBoom, bullArrow, _bullet.StunDuration);

                    _boom.Add(bullArrow);
                }
            }

            _secondTimer = new Storyboard()
            {
                Duration = TimeSpan.FromSeconds(0.5)
            };
            _secondTimer.Completed += _secondTimer_Completed;
            _secondTimer.Begin();
        }