/// <summary> /// Этот метод наносит урон /// </summary> private void BoomMethod(int x, int y) { ///Если колба попала или должна исчезнуть ///Берем все ячейки вокруг колбы List <Point> roundPoint = UnitGenerator.RoundNumber(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_Jinx_Zap_Roket arrow = new UC_Jinx_Zap_Roket(); arrow.LoadStyle(ExplosionStyle); if (i == 0) { arrow.ChengAngel(EAngel.Left); } else if (i == 1) { arrow.ChengAngel(EAngel.Right); } else if (i == 2) { arrow.ChengAngel(EAngel.Top); } else if (i == 3) { arrow.ChengAngel(EAngel.Bottom); } else if (i == 4) { ///Центральная ячейка 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 != 4) { bullArrow.DemageMagic = (int)(_bullet.DemageMagic * _bullet.Splash); bullArrow.DemagePhys = (int)(_bullet.DemagePhys * _bullet.Splash); } else { bullArrow.DemageMagic = _bullet.DemageMagic; bullArrow.DemagePhys = _bullet.DemagePhys; } 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.35) }; _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) ///Проверка есть ли мана на каст { Speed = unit.AttackSpeed; ///Флаг кулдауна _culdaunBool = true; ///Отнимаем нужное количество unit.Mana -= ManaCost; if (!AttackType) { Bullet bullArrow = new Bullet(); bullArrow.GameObject = new Game_Object_In_Call() { EnumCallType = EnumCallType.Bullet, }; /// Если есть скади if (UnitGenerator.HasSkadi(unit)) { UC_Skadi skadiArrow = new UC_Skadi(); skadiArrow.ChengAngel(unit.Angel); bullArrow.GameObject.View = skadiArrow; } else { ///Создаем визуальный объект стрела UC_Jinx_Zap arrow = new UC_Jinx_Zap(); arrow.ChengAngel(unit.Angel); bullArrow.GameObject.View = arrow; } bullArrow.UnitUsed = unit; bullArrow.PositionX = unit.PositionX; bullArrow.PositionY = unit.PositionY; bullArrow.Speed = Speed / 2; bullArrow.DemagePhys = unit.Demage; bullArrow.Name = "SP_Jinx_Zap"; ///Магический урон зависит от прокача стрел //bullArrow.DemageMagic = 5 * (int)property; if (LevelCast == 1) { bullArrow.DemagePhys += 5; bullArrow.SpeedSlow = 0.05; } else if (LevelCast == 2) { bullArrow.DemagePhys += 10; bullArrow.SpeedSlow = 0.15; } else if (LevelCast == 3) { bullArrow.DemagePhys += 15; bullArrow.SpeedSlow = 0.2; } bullArrow.DemagePhys += BonusDemage; bullArrow.CurrentMap = map; bullArrow.Angel = unit.Angel; bullArrow.Range = _unit.Range; UnitGenerator.MKB_Bush(bullArrow, unit); bullArrow.Spells.Add(new SPB_Jakiro_Liquid_Fire() { 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"); } else { ///Создаем визуальный объект стрела UC_Jinx_Zap_Roket arrow = new UC_Jinx_Zap_Roket(); 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 / 2; bullArrow.DemageMagic = unit.Demage; bullArrow.Name = "Jinx_Zap_Roket"; ///Магический урон зависит от прокача стрел //bullArrow.DemageMagic = 5 * (int)property; if (LevelCast == 1) { bullArrow.DemageMagic += 5; } else if (LevelCast == 2) { bullArrow.DemageMagic += 10; } else if (LevelCast == 3) { bullArrow.DemageMagic += 15; } bullArrow.Splash = Splash; bullArrow.DemageMagic += BonusDemage; bullArrow.CurrentMap = map; bullArrow.Angel = unit.Angel; bullArrow.Range = _unit.Range + BonusRange; UnitGenerator.MKB_Bush(bullArrow, unit); bullArrow.Spells.Add(new SPB_Jinx_Zap_Roket() { 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 ///Маны нету { } } }