Move next_attack logic to CombatState

* Moves the decision of what attack is used next to CombatState and
  defers selecting the attack until the player is actually ready to hit
  their target for damage.

* Adds a distance check so combat is only initiated within the correct
  range. If the player isn't close enough to their target, they will run
  towards it and check every tick if they're close enough to make an
  attack.
This commit is contained in:
Gary Tierney
2016-02-29 22:21:21 +00:00
parent 064f22d2e0
commit 17e8d02886
2 changed files with 51 additions and 16 deletions
+18 -1
View File
@@ -11,7 +11,7 @@ end
private
class CombatState
attr_accessor :state, :next_attack
attr_accessor :state
attr_reader :queued_attacks, :supports_weapon
def initialize(mob, supports_weapon = true)
@@ -41,6 +41,23 @@ class CombatState
def queue_attack(attack)
@queued_attacks.push(attack)
end
def next_attack(peek = false)
if @queued_attacks.size > 0
peek ? @queued_attacks.first : @queued_attacks.pop
else
weapon = EquipmentUtil.equipped_weapon @mob
if @mob.using_special and weapon.special_attack?
weapon.special_attack
else
weapon_class = weapon.weapon_class
combat_style = weapon_class.style_at @mob.combat_style
weapon_class.attack combat_style
end
end
end
end
MOB_COMBAT_STATE_CACHE = {