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(); } } } } }