예제 #1
0
 private void Exept()
 {
     //!_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)
         {
             if (!_bullet.Exept)
             {
                 _bullet.Exept = UnitGenerator.AddNullDemage(call, _bullet);
             }
             else
             {
                 UnitGenerator.AddNullDemage(call, _bullet);
             }
         }
         //else
         //    _bullet.Exept = true;
     }
     else
     {
         _bullet.Exept = true;
     }
 }
예제 #2
0
        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());
                }
            }
        }