Beispiel #1
0
 public void PlayerExplode(Player player, double time, ScoreboardTemplate scoreboard, Player bombOwner)
 {
     if (!(player.invincibleUntil > time))
     {
         player.BecomeInvincible(time);
         player.ReduceHealth();
         if (player != bombOwner)
         {
             if (player.IsAlive())
             {
                 scoreboard.AddScore(bombOwner, 1);
             }
             else
             {
                 scoreboard.AddScore(bombOwner, 3);
                 scoreboard.ChangeStatus(player);
             }
         }
         else
         {
             if (player.IsAlive())
             {
                 scoreboard.AddScore(player, -1);
             }
             else
             {
                 scoreboard.AddScore(player, -1);
                 scoreboard.ChangeStatus(player);
             }
         }
     }
 }
Beispiel #2
0
 /// <summary>
 /// Main method for updating the item logic
 /// </summary>
 /// <param name="elapsedTime">Elapsed time in milleseconds</param>
 /// <param name="player">Player object</param>
 internal void UpdateItemSystem(float elapsedTime, Player player)
 {
     if (player.IsAlive())
     {
         //Checks if the player targets an item. Puts it in the backpack.
         if (player.ItemTarget != null && player.ItemTarget.WasLooted)
         {
             AddToBackPack(player, player.ItemTarget);
         }
         //Cheks if the player targets an item in the backpack. Equip/use it.
         if (player.BackpackTarget != null)
         {
             EquipOrUse(player);
         }
         //Checks if the player targets an equipped item. Puts it back in the backpack.
         if (player.CharPanelTarget != null)
         {
             UnEquip(player, player.CharPanelTarget);
         }
     }
 }
Beispiel #3
0
        private void CheckEnemyAggro(Enemy a_enemy, Player a_player)
        {
            a_enemy.UnitState = Enemy.FACING_CAMERA;

            int aggroRange = SetAggroRange(a_enemy);

            //2 ifsatser som testar om spelaren är innanför fiendens "Aggro zon".
            if (a_player.ThisUnit.Bounds.Center.X > a_enemy.ThisUnit.Bounds.Center.X - aggroRange && a_player.ThisUnit.Bounds.Center.X < a_enemy.ThisUnit.Bounds.Center.X + aggroRange)
            {
                if ((a_player.ThisUnit.Bounds.Center.Y > a_enemy.ThisUnit.Bounds.Center.Y - aggroRange && a_player.ThisUnit.Bounds.Center.Y < a_enemy.ThisUnit.Bounds.Center.Y + aggroRange) && a_player.IsAlive())
                {
                    //Sätter fiendens target till spelaren.
                    a_enemy.TargetDisLocationX = m_random.Next(0, 49);
                    a_enemy.TargetDisLocationY = m_random.Next(0, 49);
                    a_enemy.Target             = a_player;
                    a_enemy.IsAttacking        = true;
                }
            }
        }
Beispiel #4
0
        public void Update(float a_elapsedTime, List <Model.Enemy> a_enemies)
        {
            m_player.Update();

            RegenerateMana(a_elapsedTime, m_player);

            RegenerateHp(a_elapsedTime, m_player);

            m_spellSystem.Update(a_elapsedTime);

            DecreaseGlobalCD(m_player, a_elapsedTime);

            //Tar bort en spelares target om fienden dör eller evadar.
            if (m_player.Target != null && m_player.Target.GetType() == GameModel.ENEMY_NPC)
            {
                Enemy enemy = m_player.Target as Enemy;
                if (!m_player.Target.IsAlive() || enemy.IsEvading)
                {
                    m_player.Target      = null;
                    m_player.IsAttacking = false;
                }
            }

            //Kollar om spelaren attackerar.
            if (m_player.IsAttacking)
            {
                m_player.InCombat = true;
                //Testar om spelaren och hans target kolliderar / är i range för hitboxen.
                if (m_player.Target.ThisUnit.Bounds.Intersects(m_player.PlayerArea))
                {
                    m_player.IsWithinMeleRange = true;
                    //Om spelarens hit cooldown är mindre än 0 så slår spelaren.
                    if (m_player.SwingTime <= 0)
                    {
                        //Om player target fienden lever så sänks hans hp.
                        if (m_player.Target.IsAlive() && m_player.IsAlive())
                        {
                            m_player.Target.CurrentHp -= (m_player.AutohitDamage - m_player.Target.Armor);
                        }
                        //Sätter cooldown på ett slag.
                        m_player.SwingTime = 50;
                    }
                    else if (!m_player.IsCastingSpell)
                    {
                        m_player.SwingTime -= 1;
                    }
                }
                else
                {
                    m_player.IsWithinMeleRange = false;
                }
            }
            else
            {
                m_player.InCombat = false;
            }

            if (!m_player.IsAlive())
            {
                m_player.Target      = null;
                m_player.IsAttacking = false;

                if (m_player.SpawnTimer < 0)
                {
                    m_player.Spawn();
                }
                else
                {
                    m_player.SpawnTimer -= a_elapsedTime;
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Main method ffor updating the player logic
        /// </summary>
        /// <param name="elapsedTime">Elapsed time in milleseconds</param>
        /// <param name="enemies">List of active enemies</param>
        public void Update(float elapsedTime, List <Model.Enemy> enemies)
        {
            _player.Update();

            RegenerateMana(elapsedTime, _player);

            RegenerateHp(elapsedTime, _player);

            _spellSystem.Update(elapsedTime);

            DecreaseGlobalCD(_player, elapsedTime);

            //Untarget the players target if it is dead or evading
            if (_player.Target != null && _player.Target.GetType() == GameModel.ENEMY_NPC)
            {
                Enemy enemy = _player.Target as Enemy;
                if (!_player.Target.IsAlive() || enemy.IsEvading)
                {
                    _player.Target      = null;
                    _player.IsAttacking = false;
                }
            }
            if (_player.IsAttacking)
            {
                _player.InCombat = true;
                //Checks if the player is in range of the enemy hitbox
                if (_player.Target.ThisUnit.Bounds.Intersects(_player.PlayerArea))
                {
                    _player.IsWithinMeleRange = true;
                    //Hit cooldown has ended
                    if (_player.SwingTime <= 0)
                    {
                        //If enemy is alive; reduce its hp
                        if (_player.Target.IsAlive() && _player.IsAlive())
                        {
                            _player.Target.CurrentHp -= (_player.AutohitDamage - _player.Target.Armor);
                        }

                        //Setting new cooldown
                        _player.SwingTime = 50;
                    }
                    else if (!_player.IsCastingSpell)
                    {
                        _player.SwingTime -= 1;
                    }
                }
                else
                {
                    _player.IsWithinMeleRange = false;
                }
            }
            else
            {
                _player.InCombat = false;
            }

            //If player is not alive
            if (!_player.IsAlive())
            {
                _player.Target      = null;
                _player.IsAttacking = false;

                if (_player.SpawnTimer < 0)
                {
                    _player.Spawn();
                }
                else
                {
                    _player.SpawnTimer -= elapsedTime;
                }
            }
        }
        /// <summary>
        /// Checks wheter the player is within the enemy aggro range
        /// </summary>
        /// <param name="enemy">Enemy object</param>
        /// <param name="player">Player object</param>
        private void CheckEnemyAggro(Enemy enemy, Player player)
        {
            enemy.UnitState = Model.State.FACING_CAMERA;

            int aggroRange = SetAggroRange(enemy);

            if (player.ThisUnit.Bounds.Center.X > enemy.ThisUnit.Bounds.Center.X - aggroRange && player.ThisUnit.Bounds.Center.X < enemy.ThisUnit.Bounds.Center.X + aggroRange)
            {
                if ((player.ThisUnit.Bounds.Center.Y > enemy.ThisUnit.Bounds.Center.Y - aggroRange && player.ThisUnit.Bounds.Center.Y < enemy.ThisUnit.Bounds.Center.Y + aggroRange) && player.IsAlive())
                {
                    enemy.TargetDisLocationX = _random.Next(0, 49);
                    enemy.TargetDisLocationY = _random.Next(0, 49);
                    enemy.Target             = player;
                    enemy.IsAttacking        = true;
                }
            }
        }