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