Example #1
0
        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();
            }
        }
Example #2
0
 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);
     }
 }
Example #3
0
        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);
            }
        }
Example #4
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());
                }
            }
        }
Example #5
0
        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;
            }
        }