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); } } } }
/// <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); } } }
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; } } }
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; } } }
/// <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; } } }