void _firstTimer_Completed(object sender, object e) { if (Duration-- >= 0) { UnitGenerator.AddBufDemageOne(_oldCall, _bullet, _bullet.DemageMagic); for (int i = 0; i < _oldCall.IUnits.Count; i++) { var item = _oldCall.IUnits[i]; if (item != null && item.GroupType != _unit.GroupType) { item.GatDamage(0, _bullet.DemageMagic, 0, _unit); Buff buff = item.Buffs.FirstOrDefault(p => p.Name == "SniperShrapnel"); if (buff != null) { buff.Duration = 2; } else { Buff alchBuff = new Buff() { SpeedSlow = _bullet.SpeedSlow, Duration = 2, Name = "SniperShrapnel" }; item.Buffs.Add(alchBuff); } } } _firstTimer.Begin(); } else { _firstTimer.Completed -= _firstTimer_Completed; _firstTimer = null; ///Удаление тучки (_bullet.GameObject.View as IGameControl).Remove(_map.MapCanvas); ///Удаляем из масива всех объектов _map.GameObjectInCall.Remove(_bullet.GameObject); _oldCall.Bullet.Remove(_bullet); } }
void _firstTimer_Completed(object sender, object e) { _firstTimer.Completed -= _firstTimer_Completed; _firstTimer = null; // if (_unit is Player) // _unit = _unit; ///Так как это юнит мы убираем флаг юзед со старой ячейку var callOld = _map.Calls.Single(p => p.IndexLeft == _unit.PositionX && p.IndexTop == _unit.PositionY); ///Удаляем из старой ячейки ссылку на юнит callOld.IUnits.Remove(_unit); if (!callOld.IUnits.Any(p => p.GameObject.EnumCallType == EnumCallType.UnitBlock)) { ///Делаем ячейку пустой callOld.Used = false; } _unit.PositionX = _xNew; _unit.PositionY = _yNew; ///Получаем новую ячейку var callNew = _map.Calls.Single(p => p.IndexLeft == _unit.PositionX && p.IndexTop == _unit.PositionY); if (!_unit.Dead) { //if (_unit is Player) // callNew = callNew; ///Добавляем в нее ссылку на юнит callNew.IUnits.Add(_unit); ///Убераем то что колонка использывалась, теперь ставим что она все время используется callNew.Used = true; } ///Проверим или получил юнит урон в новой ячейке foreach (var item in callNew.Bullet) { if (!item.BuffDemage) { if (!item.IsRoket) { item.Exept = UnitGenerator.AddDamage(callNew, item); } else { ///Только попадение, урон не наносится item.Exept = UnitGenerator.AddNullDemage(callNew, item); } if (item.Exept) { UnitGenerator.AddStuneTwo(callNew, item, item.StunDuration, item.StunDuration); } } else if (!item.IsRoket)///Значит баф урон, и не бомба { UnitGenerator.AddBufDemageOne(callNew, item, item.DemageMagic); } } callNew.Using = false; Player player = _unit as Player; if (player != null && callNew.Item.Count > 0) { int playerItemCount = player.Items.Count; ItemClass addedItem = callNew.Item.FirstOrDefault(); ///Смотрим можно ли данный итем во что то собрать ItemClass newItem = UnitGenerator.CreateNewItem(player, addedItem); if (newItem != null) { ///Можно собрать ///Разрешаем пропустить итем playerItemCount = 0; addedItem = newItem; } if (addedItem.Bonus)///Если итем бонус, то пропустить его тоже { playerItemCount = 0; } if (playerItemCount < 4) { _map.MapCanvas.Children.Remove(callNew.Item.FirstOrDefault().View); ///Подбираем итем player.AddItem(addedItem); callNew.Item.Remove(callNew.Item.FirstOrDefault()); } } }
/// <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(); 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; bullArrow.DemageMagic = _bullet.DemageMagic; 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.AddBufDemageOne(callBoom, bullArrow, bullArrow.DemageMagic); //UnitGenerator.AddStune(callBoom, bullArrow, _bullet.StunDuration); _boom.Add(bullArrow); } } _secondTimer = new Storyboard() { Duration = TimeSpan.FromSeconds(0.35) }; _secondTimer.Completed += _secondTimer_Completed; _secondTimer.Begin(); }