Пример #1
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());
                }
            }
        }
Пример #2
0
        private void BuyItemMethod(Player _player, ItemClass itemClass)
        {
            int       playerItemCount = _player.Items.Count;
            ItemClass addedItem       = itemClass;

            ///Если предмет сборный
            ///Названия частей которых есть (чтобы потом их удалить)
            List <string> yesAllParts = new List <string>();
            ///Сума золота необходимая для покупки итема
            int allPrice = itemClass.Price;

            ///С начала проверим, может игроку нужен рецепт итема а не сам итем
            if (addedItem.Parts != null)
            {
                allPrice = 0;

                foreach (var item in addedItem.Parts)
                {
                    if (CurrentPlayer.Items.Count(p => p.Name == item.Name) == 0)
                    {
                        ///Проверим может есть части итема, частей
                        if (item.Parts != null)
                        {
                            foreach (var item2 in item.Parts)
                            {
                                if (!CurrentPlayer.Items.Any(p => p.Name == item2.Name))
                                {
                                    allPrice += item2.Price;
                                }
                                else if (CurrentPlayer.Items.Count(p => p.Name == item2.Name) > yesAllParts.Count(p => p == item2.Name))
                                {
                                    yesAllParts.Add(item2.Name);
                                }
                                else
                                {
                                    allPrice += item2.Price;
                                }
                            }
                        }
                        else
                        {
                            allPrice += item.Price;
                        }
                    }
                    else if (CurrentPlayer.Items.Count(p => p.Name == item.Name) > yesAllParts.Count(p => p == item.Name))
                    {
                        yesAllParts.Add(item.Name);
                    }
                    else
                    {
                        ///Проверим может есть части итема, частей
                        if (item.Parts != null)
                        {
                            foreach (var item2 in item.Parts)
                            {
                                if (!CurrentPlayer.Items.Any(p => p.Name == item2.Name))
                                {
                                    allPrice += item2.Price;
                                }
                                else if (CurrentPlayer.Items.Count(p => p.Name == item2.Name) > yesAllParts.Count(p => p == item2.Name))
                                {
                                    yesAllParts.Add(item2.Name);
                                }
                                else
                                {
                                    allPrice += item2.Price;
                                }
                            }
                        }
                        else
                        {
                            allPrice += item.Price;
                        }
                    }
                }
            }


            if (_player.Gold >= allPrice &&
                !_player.Dead)
            {
                int oldPrice = itemClass.Price;

                if (allPrice == addedItem.Price)
                {///Значит никаких частей у игрока нету
                    ///Смотрим можно ли данный итем во что то собрать
                    ItemClass newItem = UnitGenerator.CreateNewItem(_player, itemClass);
                    if (newItem != null)
                    {
                        ///Можно собрать
                        ///Разрешаем пропустить итем
                        playerItemCount = 0;
                        addedItem       = newItem;
                    }

                    if (playerItemCount < 4)
                    {
                        _player.Gold -= oldPrice;
                        ///Подбираем итем
                        _player.AddItem(addedItem);

                        if (playerItemCount == 0)
                        {
                            ///Смотрим можно ли во что то собрать части в инвинтаре
                            for (int i = 0; i < 4; i++)
                            {
                                ItemClass newItemPart2 = UnitGenerator.CreateNewItem(_player, addedItem);
                                if (newItemPart2 != null)
                                {
                                    _player.RemoveItem(addedItem, false);
                                    _player.AddItem(newItemPart2);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        ///Нет места в инвинтаре
                    }
                }
                else
                {///Части есть, значит место для итема найдется
                    _player.Gold -= allPrice;
                    ///Удаляем части которые уже есть
                    foreach (var item in yesAllParts)
                    {
                        CurrentPlayer.RemoveItem(CurrentPlayer.Items.FirstOrDefault(p => p.Name == item), false);
                    }
                    ///Подбираем итем
                    _player.AddItem(addedItem);
                }
            }
        }