예제 #1
0
        public void UseSpall(Map map, Game_Object_In_Call obj, IUnit unit, object property)
        {
            bool upSpell = UnitGenerator.UpPlayerSpell(unit, this);

            _unit = unit;
            if (unit.UnitFrozen == false &&
                !_culdaunBool && LevelCast != 0 && !upSpell && !unit.Silenced &&
                !unit.Hexed &&
                !Paused)
            {
                if (unit.Mana >= ManaCost)
                ///Проверка есть ли мана на каст
                {
                    ///Флаг кулдауна
                    _culdaunBool = true;

                    ///Отнимаем нужное количество
                    unit.Mana -= ManaCost;

                    ///Тут кординаты ячеек в которых действует тучка
                    List <Point> callsPoint = new List <Point>();
                    ///Получаем ячейки которые находятся перед героем
                    int xNew = unit.PositionX;
                    int yNew = unit.PositionY;
                    if (unit.Angel == EAngel.Left)
                    {
                        xNew = xNew - 1;
                        callsPoint.Add(new Point(xNew, yNew));
                        callsPoint.Add(new Point(xNew, yNew + 2));
                        callsPoint.Add(new Point(xNew, yNew - 2));
                    }
                    else if (unit.Angel == EAngel.Right)
                    {
                        xNew = xNew + 1;
                        callsPoint.Add(new Point(xNew, yNew));
                        callsPoint.Add(new Point(xNew, yNew + 2));
                        callsPoint.Add(new Point(xNew, yNew - 2));
                    }
                    else if (unit.Angel == EAngel.Top)
                    {
                        yNew = yNew - 1;
                        callsPoint.Add(new Point(xNew, yNew));
                        callsPoint.Add(new Point(xNew + 2, yNew));
                        callsPoint.Add(new Point(xNew - 2, yNew));
                    }
                    else if (unit.Angel == EAngel.Bottom)
                    {
                        yNew = yNew + 1;
                        callsPoint.Add(new Point(xNew, yNew));
                        callsPoint.Add(new Point(xNew + 2, yNew));
                        callsPoint.Add(new Point(xNew - 2, yNew));
                    }

                    ///Кординаты ячеек есть
                    ///теперь спауним тучку
                    foreach (var item in callsPoint)
                    {
                        Map_Cell call = map.Calls.FirstOrDefault(p => p.IndexLeft == item.X && p.IndexTop == item.Y);
                        if (call != null &&
                            !call.Block)
                        {
                            ///Создаем визуальный объект тучка
                            UC_Jinx_Flame_Chompers acidSpray = new UC_Jinx_Flame_Chompers();
                            acidSpray.ChengAngel(unit.Angel);

                            Bullet bullAcidSpray = new Bullet()
                            {
                                Name = "Jinx_Flame_Chompers"
                            };
                            bullAcidSpray.GameObject = new Game_Object_In_Call()
                            {
                                EnumCallType = EnumCallType.Bullet,
                                View         = acidSpray
                            };
                            bullAcidSpray.UnitUsed  = unit;
                            bullAcidSpray.PositionX = (int)item.X;
                            bullAcidSpray.PositionY = (int)item.Y;
                            bullAcidSpray.Speed     = Speed;
                            bullAcidSpray.IsRoket   = true;
                            ///Магический урон зависит от прокача стрел
                            ///bullArrow.DemageMagic = 5 * (int)property;

                            if (LevelCast == 1)
                            {
                                bullAcidSpray.DemageMagic  = 15;
                                bullAcidSpray.StunDuration = 2;
                            }
                            else if (LevelCast == 2)
                            {
                                bullAcidSpray.DemageMagic  = 25;
                                bullAcidSpray.StunDuration = 2;
                            }
                            else if (LevelCast == 3)
                            {
                                bullAcidSpray.DemageMagic  = 35;
                                bullAcidSpray.StunDuration = 3;
                            }

                            bullAcidSpray.CurrentMap = map;
                            bullAcidSpray.Angel      = unit.Angel;
                            bullAcidSpray.Range      = _unit.Range;
                            bullAcidSpray.Duration   = Duration;

                            bullAcidSpray.Spells.Add(new SPB_Jinx_Flame_Chompers()
                            {
                                Name = "Jinx_Flame_Chompers"
                            });

                            ///И его же добавим в масив всех объектов
                            map.GameObjectInCall.Add(bullAcidSpray.GameObject);

                            Canvas.SetLeft(bullAcidSpray.GameObject.View, bullAcidSpray.PositionX * 50);
                            Canvas.SetTop(bullAcidSpray.GameObject.View, bullAcidSpray.PositionY * 50);
                            ///Отображение
                            map.MapCanvas.Children.Add(bullAcidSpray.GameObject.View);
                            _animationControl = (bullAcidSpray.GameObject.View as IAnimationControl);
                            _animationControl.StartMuveAnimation(0);

                            bullAcidSpray.UseSpall("Jinx_Flame_Chompers");
                        }
                    }

                    if (StartUseSpell != null)
                    {
                        StartUseSpell(this, null);
                    }

                    ///Таймер кулдауна заклинания
                    _firstTimer = new Storyboard()
                    {
                        Duration = TimeSpan.FromSeconds(Culdaun)
                    };
                    _firstTimer.Completed += _firstTimer_Completed;
                    _firstTimer.Begin();


                    if (Paused)
                    {
                        Pause();
                    }



                    UnitGenerator.UpdatePlayerView(unit);
                }
            }

            if (unit.UnitFrozen == false && ///Проверка не в стане ли юнит
                !Paused)
            {
                Map_Cell unitCall = map.Calls.FirstOrDefault(p => p.IndexLeft == unit.PositionX && p.IndexTop == unit.PositionY);
                ///Может тучка была кинута, тогда можно атаковать
                if (unitCall.Bullet.Any(p => p.Name == "SP_Alchemist_AcidSpray" && p.UnitUsed == unit) &&
                    !CuldaunBoolAttack)
                {
                    Point    attackCallPoint = UnitGenerator.AngelCallPoint(unit.Angel, unit.PositionX, unit.PositionY);
                    Map_Cell attackCallCall  = map.Calls.FirstOrDefault(p => p.IndexLeft == attackCallPoint.X && p.IndexTop == attackCallPoint.Y);
                    ///Если на против юнита есть ячейка куда атаковать
                    if (attackCallCall != null && !attackCallCall.Block && attackCallCall.IUnits.Any())
                    {
                        ///Флаг кулдауна
                        CuldaunBoolAttack = true;


                        Bullet bullet = new Bullet()
                        {
                            UnitUsed   = unit,
                            DemagePhys = unit.Demage
                        };
                        UnitGenerator.MKB_Bush(bullet, unit);

                        UnitGenerator.AddDamage(attackCallCall, bullet);
                        (unit.GameObject.View as IGameControl).ShowAttack(unit.Angel, unit.AttackSpeed);

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

                        if (Paused)
                        {
                            Pause();
                        }
                    }
                }
            }
        }