/// <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(); }
/// <summary> /// Запуск стрелы /// </summary> /// <param name="property">Уровень прокача способности, умножется на 5 и получается магический урон стрелы</param> public void UseSpall(Map map, Game_Object_In_Call obj, IUnit unit, object property) { _unit = unit; bool upSpell = UnitGenerator.UpPlayerSpell(unit, this); if (unit.UnitFrozen == false && !_culdaunBool && LevelCast != 0 && !upSpell && !unit.Hexed && !Paused) { if (unit.Mana >= ManaCost) ///Проверка есть ли мана на каст { ///Флаг кулдауна _culdaunBool = true; ///Отнимаем нужное количество unit.Mana -= ManaCost; ///Создаем визуальный объект стрела UC_Super_Mega_Death_Rocket arrow = new UC_Super_Mega_Death_Rocket(); arrow.ChengAngelArrow(_unit.Angel); Bullet bullArrow = new Bullet(); bullArrow.GameObject = new Game_Object_In_Call() { EnumCallType = EnumCallType.Bullet, View = arrow }; bullArrow.UnitUsed = unit; bullArrow.PositionX = unit.PositionX; bullArrow.PositionY = unit.PositionY; bullArrow.Speed = Speed; bullArrow.DemageMagic = 20; ///Магический урон зависит от прокача стрел //bullArrow.DemageMagic = 5 * (int)property; bullArrow.BonusDemage = 30; /// Если есть аганим if (UnitGenerator.HasAghanim(unit)) { bullArrow.BonusDemage += 10; arrow.Opacity = 0.5; } bullArrow.CurrentMap = map; bullArrow.Angel = unit.Angel; bullArrow.Range = 30; UnitGenerator.MKB_Bush(bullArrow, unit); bullArrow.Spells.Add(new SPB_Super_Mega_Death_Rocket() { Name = "Fly" }); ///И его же добавим в масив всех объектов 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); bullArrow.UseSpall("Fly"); ///Таймер кулдауна заклинания _secondTimer = new Storyboard() { Duration = TimeSpan.FromSeconds(Culdaun) }; _secondTimer.Completed += _secondTimer_Completed; _secondTimer.Begin(); if (Paused) { Pause(); } if (StartUseSpell != null) { StartUseSpell(this, null); } UnitGenerator.UpdatePlayerView(unit); } else ///Маны нету { } } }