local Battler = require("scenes.battlesystem.actors.battler")
local Hero = Battler:extend()

-- INIT FUNCTIONS
-- Initialize the hero

function Hero:new(world, x, y, owner, charnumber)
  Hero.super.new(self, world, x, y, 0, owner)
  self:initSprite()
  self.isKo = false
end

-- UPDATE FUNCTION
-- Update the hero

function Hero:update(dt)
  Hero.super.update(self, dt)
  self:updateAnimation(dt)
end

-- HURT/DEATH FUNCTIONS

function Hero:getHurt()
  self:changeAnimation("hurt")
end

function Hero:die()
  if (not self.isKo) then
    self:changeAnimation("getKo")
    self.isKo = true
  end
end

function Hero:revive()
  if (self.isKo) then
    self:changeAnimation("idle")
    self.isKo = false
    self.isDefending = false
  end
end

function Hero:setAsKo()
  self:changeAnimation("ko")
  self.isKo = true
end

-- ASSETS FUNCTIONS
-- Load and play assets needed by the character

function Hero:getSpritePath()
  return "datas/gamedata/characters/" .. self.owner.name .. "/sprites"
end

function Hero:updateAnimation(dt)
  if (self.z > 0 and self.jump.useDefaultAnimation) then
    if self.zspeed > 0 then
      self:changeAnimation("jump")
    else
      self:changeAnimation("fall")
    end
  end

  self:setCustomSpeed(self.gspeed * 160 * dt)
end

function Hero:getNewAnimation(animation)
  if (animation == "hurt") then
    self:changeAnimation("idle")
  end
end

function Hero:flee()
  if (not self.isKo) then
    self:changeAnimation("walk")
    self:goTo(-80, self.y, 3)
  end
end

-- DRAW FUNCTIONS
-- Draw everything related to the hero

function Hero:draw()
  self:drawSprite(0, -self.z)

  if (self.isSelected) then
    local x, y = self.world.map:gridToPixel(self.x, self.y, true)
    self.assets.images["cursorpeak"]:draw(x - 7, y - 24 - 32)
  end

  self:drawDamageNumber()
end

return Hero
