public void UseSpall(Map map, Game_Object_In_Call obj, IUnit unit, object property) { _bullet = property as Bullet; _bullet.Name = "SPB_Jakiro_Ice_Path"; _map = map; _unit = _bullet.UnitUsed; Duration = _bullet.Duration; ///Ячейка где действует тучка _oldCall = map.Calls.Single(p => p.IndexLeft == _bullet.PositionX && p.IndexTop == _bullet.PositionY); _oldCall.Bullet.Add(_bullet); for (int i = 0; i < _oldCall.IUnits.Count; i++) { var item = _oldCall.IUnits[i]; if (item != null && item.GroupType != _unit.GroupType) { UnitGenerator.AddStuneTwo(_oldCall, _bullet, _bullet.StunDuration, 4); } } ///Таймер время жизни тучки _firstTimer = new Storyboard() { Duration = TimeSpan.FromSeconds(1) }; _firstTimer.Completed += _firstTimer_Completed; _firstTimer.Begin(); if (Paused) { Pause(); } }
void _firstTimer_Completed(object sender, object e) { if (Duration-- >= 0) { for (int i = 0; i < _oldCall.IUnits.Count; i++) { var item = _oldCall.IUnits[i]; if (item != null && item.GroupType != _unit.GroupType) { UnitGenerator.AddStuneTwo(_oldCall, _bullet, _bullet.StunDuration, 4); } } _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; Map_Cell oldCall = _map.Calls.Single(p => p.IndexLeft == _bullet.PositionX && p.IndexTop == _bullet.PositionY); oldCall.Bullet.Remove(_bullet); /////Сначала проверяем старую ячейку на попадение //Exept(); _bullet.PositionX = _xNew; _bullet.PositionY = _yNew; Exept(); Map_Cell newCall = _map.Calls.FirstOrDefault(p => p.IndexLeft == _bullet.PositionX && p.IndexTop == _bullet.PositionY); if (_bullet.Exept == true) { if (newCall != null && !newCall.Block) { UnitGenerator.AddStuneTwo(newCall, _bullet, _bullet.StunDuration, 5); } (_bullet.GameObject.View as IGameControl).Remove(_map.MapCanvas); ///Было попадение, анимация исчезновения стрелы //_bullet.GameObject.View.Visibility = Visibility.Collapsed; ///Было попадение стрела исчезает ///Удаляем из масива всех объектов _map.GameObjectInCall.Remove(_bullet.GameObject); //_map.MapCanvas.Children.Remove(_bullet.GameObject.View); } else { newCall.Bullet.Add(_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()); } } }
private void Exept() { int stunDuration = 0; int bonusDamsge = 0; if (_power >= 2 && _power <= 3) { stunDuration = 1; } else if (_power >= 4 && _power <= 5) { stunDuration = 2; bonusDamsge = _bullet.BonusDemage / 2; } else if (_power >= 6) { stunDuration = 3; bonusDamsge = _bullet.BonusDemage; } _bullet.StunDuration = stunDuration; _bullet.DemagePhys = _bullet.DemagePhys + bonusDamsge; //!_exept if (_map.Calls.Any(p => p.IndexLeft == _bullet.PositionX && p.IndexTop == _bullet.PositionY)) { ///Получим ячейку куда попала пуля var call = _map.Calls.Single(p => p.IndexLeft == _bullet.PositionX && p.IndexTop == _bullet.PositionY); if (!call.Block) { #region Desol for (int i = 0; i < call.IUnits.Count; i++) { if (call.IUnits[i] != _bullet.UnitUsed && call.IUnits[i].GroupType != _bullet.UnitUsed.GroupType) { UnitGenerator.Desolator(_bullet.UnitUsed, call.IUnits[i]); UnitGenerator.Skadi(_bullet.UnitUsed, call.IUnits[i]); } } #endregion if (!_bullet.Exept) { _bullet.Exept = UnitGenerator.AddDamage(call, _bullet); UnitGenerator.AddStuneTwo(call, _bullet, stunDuration, 5); } else { UnitGenerator.AddDamage(call, _bullet); UnitGenerator.AddStuneTwo(call, _bullet, stunDuration, 5); } } else { _bullet.Exept = true; } } else { _bullet.Exept = true; } }